diff --git a/CHANGELOG.md b/CHANGELOG.md
index 926ec5c52..9ee5515ad 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -18,6 +18,8 @@
- Fix issue where doc comment is not shown on hover in case of shadowed identifier (in particular for JSX V4 components which shadow `make`) https://github.com/rescript-lang/rescript-vscode/issues/621
+- Adapt command to create interface files to latest JSX V4 (no key prop, possibly empty record) https://github.com/rescript-lang/rescript-vscode/issues/617
+
## v1.8.2
#### :rocket: New Feature
diff --git a/analysis/src/CreateInterface.ml b/analysis/src/CreateInterface.ml
index 07b96d153..7aafb5e49 100644
--- a/analysis/src/CreateInterface.ml
+++ b/analysis/src/CreateInterface.ml
@@ -240,16 +240,19 @@ let printSignature ~extractor ~signature =
( propsId,
{
type_params;
- type_kind = Type_record (labelDecls, Record_optional_labels optLbls);
+ type_kind = Type_record (labelDecls, recordRepresentation);
},
_ )
:: Sig_value (makeId (* make *), makeValueDesc)
:: rest
when Ident.name propsId = "props"
&& getComponentTypeV4 makeValueDesc.val_type <> None
- && optLbls |> List.mem "key" ->
+ &&
+ match recordRepresentation with
+ | Record_optional_labels _ -> true
+ | _ -> labelDecls = [] (* empty record *) ->
(* PPX V4 component declaration:
- type props = {..., key?: _}
+ type props = {...}
let v = ...
*)
let newItemStr =
@@ -268,15 +271,18 @@ let printSignature ~extractor ~signature =
in
let lblName = labelDecl.ld_id |> Ident.name in
let lbl =
+ let optLbls =
+ match recordRepresentation with
+ | Record_optional_labels optLbls -> optLbls
+ | _ -> []
+ in
if List.mem lblName optLbls then Asttypes.Optional lblName
else Labelled lblName
in
- if lblName = "key" then mkFunType rest
- else
- {retType with desc = Tarrow (lbl, propType, mkFunType rest, Cok)}
+ {retType with desc = Tarrow (lbl, propType, mkFunType rest, Cok)}
in
let funType =
- if List.length labelDecls = 1 (* No props: only "key "*) then
+ if List.length labelDecls = 0 (* No props *) then
let tUnit =
Ctype.newconstr (Path.Pident (Ident.create "unit")) []
in
diff --git a/analysis/tests/src/JsxV4.res b/analysis/tests/src/JsxV4.res
index d23b651ba..a5f2c5d1b 100644
--- a/analysis/tests/src/JsxV4.res
+++ b/analysis/tests/src/JsxV4.res
@@ -14,3 +14,9 @@ let _ =
let _ =
// ^hov
+
+
+module MM = {
+ @react.component
+ let make = () => React.null
+}