Skip to content

Allow oneliner when including module with single type alias #7502

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
May 22, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@

- Suggest awaiting promise before using it when types mismatch. https://github.com/rescript-lang/rescript/pull/7498
- Complete from `RegExp` stdlib module for regexes. https://github.com/rescript-lang/rescript/pull/7425
- Allow oneliner formatting when including module with single type alias. https://github.com/rescript-lang/rescript/pull/7502

# 12.0.0-alpha.13

Expand Down
45 changes: 44 additions & 1 deletion compiler/syntax/src/res_printer.ml
Original file line number Diff line number Diff line change
Expand Up @@ -1081,7 +1081,50 @@ and print_include_declaration ~state
print_attributes ~state include_declaration.pincl_attributes cmt_tbl;
Doc.text "include ";
(let include_doc =
print_mod_expr ~state include_declaration.pincl_mod cmt_tbl
match include_declaration.pincl_mod.pmod_desc with
(*
include Module.Name({ type t = t })
try as oneliner if there is a single type alias declaration
*)
| Pmod_apply
( {pmod_desc = Pmod_ident longident_loc},
{
pmod_desc =
Pmod_structure
[
({
pstr_desc =
Pstr_type
( _,
[
{
ptype_kind = Ptype_abstract;
ptype_manifest = Some _;
};
] );
} as structure_item);
];
} ) ->
Doc.concat
[
print_longident_location longident_loc cmt_tbl;
Doc.lparen;
Doc.breakable_group ~force_break:false
(Doc.concat
[
Doc.lbrace;
Doc.indent
(Doc.concat
[
Doc.soft_line;
print_structure_item ~state structure_item cmt_tbl;
]);
Doc.soft_line;
Doc.rbrace;
]);
Doc.rparen;
]
| _ -> print_mod_expr ~state include_declaration.pincl_mod cmt_tbl
in
if Parens.include_mod_expr include_declaration.pincl_mod then
add_parens include_doc
Expand Down
60 changes: 15 additions & 45 deletions runtime/JsxEvent.res
Original file line number Diff line number Diff line change
Expand Up @@ -95,9 +95,7 @@ module Clipboard = {
type tag
type t = synthetic<tag>

include MakeEventWithType({
type t = t
})
include MakeEventWithType({type t = t})

@get external clipboardData: t => {..} = "clipboardData"
/* Should return Dom.dataTransfer */
Expand All @@ -107,9 +105,7 @@ module Composition = {
type tag
type t = synthetic<tag>

include MakeEventWithType({
type t = t
})
include MakeEventWithType({type t = t})

@get external data: t => string = "data"
}
Expand All @@ -118,9 +114,7 @@ module Keyboard = {
type tag
type t = synthetic<tag>

include MakeEventWithType({
type t = t
})
include MakeEventWithType({type t = t})

@get external altKey: t => bool = "altKey"
@get external charCode: t => int = "charCode"
Expand All @@ -142,9 +136,7 @@ module Focus = {
type tag
type t = synthetic<tag>

include MakeEventWithType({
type t = t
})
include MakeEventWithType({type t = t})

@get @return(nullable) external relatedTarget: t => option<{..}> = "relatedTarget"
/* Should return Dom.eventTarget */
Expand All @@ -154,18 +146,14 @@ module Form = {
type tag
type t = synthetic<tag>

include MakeEventWithType({
type t = t
})
include MakeEventWithType({type t = t})
}

module Mouse = {
type tag
type t = synthetic<tag>

include MakeEventWithType({
type t = t
})
include MakeEventWithType({type t = t})

@get external altKey: t => bool = "altKey"
@get external button: t => int = "button"
Expand Down Expand Up @@ -194,9 +182,7 @@ module Pointer = {
type tag
type t = synthetic<tag>

include MakeEventWithType({
type t = t
})
include MakeEventWithType({type t = t})

/* UIEvent */
@get @get
Expand Down Expand Up @@ -244,18 +230,14 @@ module Selection = {
type tag
type t = synthetic<tag>

include MakeEventWithType({
type t = t
})
include MakeEventWithType({type t = t})
}

module Touch = {
type tag
type t = synthetic<tag>

include MakeEventWithType({
type t = t
})
include MakeEventWithType({type t = t})

@get external altKey: t => bool = "altKey"
@get external changedTouches: t => {..} = "changedTouches"
Expand All @@ -278,9 +260,7 @@ module UI = {
type tag
type t = synthetic<tag>

include MakeEventWithType({
type t = t
})
include MakeEventWithType({type t = t})

@get external detail: t => int = "detail"
/* external view : t -> Dom.window = "view" [@@get] */
Expand All @@ -291,9 +271,7 @@ module Wheel = {
type tag
type t = synthetic<tag>

include MakeEventWithType({
type t = t
})
include MakeEventWithType({type t = t})

@get external deltaMode: t => int = "deltaMode"
@get external deltaX: t => float = "deltaX"
Expand All @@ -305,27 +283,21 @@ module Media = {
type tag
type t = synthetic<tag>

include MakeEventWithType({
type t = t
})
include MakeEventWithType({type t = t})
}

module Image = {
type tag
type t = synthetic<tag>

include MakeEventWithType({
type t = t
})
include MakeEventWithType({type t = t})
}

module Animation = {
type tag
type t = synthetic<tag>

include MakeEventWithType({
type t = t
})
include MakeEventWithType({type t = t})

@get external animationName: t => string = "animationName"
@get external pseudoElement: t => string = "pseudoElement"
Expand All @@ -336,9 +308,7 @@ module Transition = {
type tag
type t = synthetic<tag>

include MakeEventWithType({
type t = t
})
include MakeEventWithType({type t = t})

@get external propertyName: t => string = "propertyName"
@get external pseudoElement: t => string = "pseudoElement"
Expand Down
2 changes: 1 addition & 1 deletion tests/analysis_tests/tests/src/expected/Completion.res.txt

Large diffs are not rendered by default.

60 changes: 15 additions & 45 deletions tests/dependencies/rescript-react/src/ReactEvent.res
Original file line number Diff line number Diff line change
Expand Up @@ -59,27 +59,21 @@ external toSyntheticEvent: synthetic<'a> => Synthetic.t = "%identity"
module Clipboard = {
type tag = JsxEvent.Clipboard.tag
type t = synthetic<tag>
include MakeEventWithType({
type t = t
})
include MakeEventWithType({type t = t})
@get external clipboardData: t => {..} = "clipboardData" /* Should return Dom.dataTransfer */
}

module Composition = {
type tag = JsxEvent.Composition.tag
type t = synthetic<tag>
include MakeEventWithType({
type t = t
})
include MakeEventWithType({type t = t})
@get external data: t => string = "data"
}

module Keyboard = {
type tag = JsxEvent.Keyboard.tag
type t = synthetic<tag>
include MakeEventWithType({
type t = t
})
include MakeEventWithType({type t = t})
@get external altKey: t => bool = "altKey"
@get external charCode: t => int = "charCode"
@get external code: t => string = "code"
Expand All @@ -99,27 +93,21 @@ module Keyboard = {
module Focus = {
type tag = JsxEvent.Focus.tag
type t = synthetic<tag>
include MakeEventWithType({
type t = t
})
include MakeEventWithType({type t = t})
@get @return(nullable)
external relatedTarget: t => option<{..}> = "relatedTarget" /* Should return Dom.eventTarget */
}

module Form = {
type tag = JsxEvent.Form.tag
type t = synthetic<tag>
include MakeEventWithType({
type t = t
})
include MakeEventWithType({type t = t})
}

module Mouse = {
type tag = JsxEvent.Mouse.tag
type t = synthetic<tag>
include MakeEventWithType({
type t = t
})
include MakeEventWithType({type t = t})
@get external altKey: t => bool = "altKey"
@get external button: t => int = "button"
@get external buttons: t => int = "buttons"
Expand All @@ -143,9 +131,7 @@ module Mouse = {
module Pointer = {
type tag = JsxEvent.Pointer.tag
type t = synthetic<tag>
include MakeEventWithType({
type t = t
})
include MakeEventWithType({type t = t})

// UIEvent
@get external detail: t => int = "detail"
Expand Down Expand Up @@ -190,17 +176,13 @@ module Pointer = {
module Selection = {
type tag = JsxEvent.Selection.tag
type t = synthetic<tag>
include MakeEventWithType({
type t = t
})
include MakeEventWithType({type t = t})
}

module Touch = {
type tag = JsxEvent.Touch.tag
type t = synthetic<tag>
include MakeEventWithType({
type t = t
})
include MakeEventWithType({type t = t})
@get external altKey: t => bool = "altKey"
@get external changedTouches: t => {..} = "changedTouches" /* Should return Dom.touchList */
@get external ctrlKey: t => bool = "ctrlKey"
Expand All @@ -215,19 +197,15 @@ module Touch = {
module UI = {
type tag = JsxEvent.UI.tag
type t = synthetic<tag>
include MakeEventWithType({
type t = t
})
include MakeEventWithType({type t = t})
@get external detail: t => int = "detail"
@get external view: t => Dom.window = "view" /* Should return DOMAbstractView/WindowProxy */
}

module Wheel = {
type tag = JsxEvent.Wheel.tag
type t = synthetic<tag>
include MakeEventWithType({
type t = t
})
include MakeEventWithType({type t = t})
@get external deltaMode: t => int = "deltaMode"
@get external deltaX: t => float = "deltaX"
@get external deltaY: t => float = "deltaY"
Expand All @@ -237,25 +215,19 @@ module Wheel = {
module Media = {
type tag = JsxEvent.Media.tag
type t = synthetic<tag>
include MakeEventWithType({
type t = t
})
include MakeEventWithType({type t = t})
}

module Image = {
type tag = JsxEvent.Image.tag
type t = synthetic<tag>
include MakeEventWithType({
type t = t
})
include MakeEventWithType({type t = t})
}

module Animation = {
type tag = JsxEvent.Animation.tag
type t = synthetic<tag>
include MakeEventWithType({
type t = t
})
include MakeEventWithType({type t = t})
@get external animationName: t => string = "animationName"
@get external pseudoElement: t => string = "pseudoElement"
@get external elapsedTime: t => float = "elapsedTime"
Expand All @@ -264,9 +236,7 @@ module Animation = {
module Transition = {
type tag = JsxEvent.Transition.tag
type t = synthetic<tag>
include MakeEventWithType({
type t = t
})
include MakeEventWithType({type t = t})
@get external propertyName: t => string = "propertyName"
@get external pseudoElement: t => string = "pseudoElement"
@get external elapsedTime: t => float = "elapsedTime"
Expand Down
Loading