From 5db37eed0214c0b5138ab7fc9387e5ff6d3dee16 Mon Sep 17 00:00:00 2001 From: Cristiano Calcagno Date: Fri, 18 Nov 2022 07:50:41 +0100 Subject: [PATCH 1/2] Add example where create interface file does not work with V4 See https://github.com/rescript-lang/rescript-vscode/issues/617 --- analysis/tests/src/JsxV4.res | 8 +++++++- analysis/tests/src/expected/JsxV4.res.txt | 14 ++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/analysis/tests/src/JsxV4.res b/analysis/tests/src/JsxV4.res index a5f2c5d1b..a48c69f7d 100644 --- a/analysis/tests/src/JsxV4.res +++ b/analysis/tests/src/JsxV4.res @@ -15,8 +15,14 @@ let _ = let _ = // ^hov - module MM = { @react.component let make = () => React.null } + +module Other = { + @react.component + let make = (~name) => React.string(name) +} + +// ^int diff --git a/analysis/tests/src/expected/JsxV4.res.txt b/analysis/tests/src/expected/JsxV4.res.txt index 96e4f4746..328d98ffe 100644 --- a/analysis/tests/src/expected/JsxV4.res.txt +++ b/analysis/tests/src/expected/JsxV4.res.txt @@ -16,3 +16,17 @@ Completable: Cjsx([M4], f, [first, f]) Hover src/JsxV4.res 14:9 {"contents": {"kind": "markdown", "value": "```rescript\nReact.component>\n```\n\n---\n\n```\n \n```\n```rescript\ntype React.component<'props> = Jsx.component<'props>\n```\nGo to: [Type definition](command:rescript-vscode.go_to_location?%5B%22React.res%22%2C12%2C0%5D)\n\n\n---\n\n```\n \n```\n```rescript\ntype M4.props<'first, 'fun, 'second> = {\n first: 'first,\n fun?: 'fun,\n second?: 'second,\n}\n```\nGo to: [Type definition](command:rescript-vscode.go_to_location?%5B%22JsxV4.res%22%2C3%2C2%5D)\n\n\n Doc Comment For M4 "}} +Create Interface src/JsxV4.res +module M4: { + @react.component + let make: (~first: string, ~fun: string=?, ~second: string=?) => React.element +} +module MM: { + @react.component + let make: unit => React.element +} +module Other: { + type props<'name> = {name: 'name} + let make: props => React.element +} + From 16972c0807ae0e74bbbf93f8c132bac8a47e826e Mon Sep 17 00:00:00 2001 From: Cristiano Calcagno Date: Fri, 25 Nov 2022 14:09:08 +0100 Subject: [PATCH 2/2] Fix issue where create interface file would not work with certain JSX V4 components --- CHANGELOG.md | 2 ++ analysis/src/CreateInterface.ml | 6 +----- analysis/tests/src/expected/JsxV4.res.txt | 4 ++-- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f03806f3e..165577736 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,6 +31,8 @@ - Fix file location in Document Symbols response. https://github.com/rescript-lang/rescript-vscode/issues/629 +- Fix issue where create interface file would not work with certain JSX V4 components 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 7aafb5e49..951d7183e 100644 --- a/analysis/src/CreateInterface.ml +++ b/analysis/src/CreateInterface.ml @@ -246,11 +246,7 @@ let printSignature ~extractor ~signature = :: Sig_value (makeId (* make *), makeValueDesc) :: rest when Ident.name propsId = "props" - && getComponentTypeV4 makeValueDesc.val_type <> None - && - match recordRepresentation with - | Record_optional_labels _ -> true - | _ -> labelDecls = [] (* empty record *) -> + && getComponentTypeV4 makeValueDesc.val_type <> None -> (* PPX V4 component declaration: type props = {...} let v = ... diff --git a/analysis/tests/src/expected/JsxV4.res.txt b/analysis/tests/src/expected/JsxV4.res.txt index 328d98ffe..3ae47a79e 100644 --- a/analysis/tests/src/expected/JsxV4.res.txt +++ b/analysis/tests/src/expected/JsxV4.res.txt @@ -26,7 +26,7 @@ module MM: { let make: unit => React.element } module Other: { - type props<'name> = {name: 'name} - let make: props => React.element + @react.component + let make: (~name: string) => React.element }