From dbf1358451273008ed8e23912b90c72765b3cd58 Mon Sep 17 00:00:00 2001 From: Cristiano Calcagno Date: Thu, 8 Sep 2022 14:02:24 +0200 Subject: [PATCH 1/4] Rename Jsx test to Jsx2 See https://github.com/rescript-lang/rescript-compiler/issues/5648 --- analysis/tests/src/{Jsx.res => Jsx2.res} | 0 analysis/tests/src/{Jsx.resi => Jsx2.resi} | 0 .../expected/{Jsx.res.txt => Jsx2.res.txt} | 74 +++++++++---------- .../expected/{Jsx.resi.txt => Jsx2.resi.txt} | 8 +- 4 files changed, 41 insertions(+), 41 deletions(-) rename analysis/tests/src/{Jsx.res => Jsx2.res} (100%) rename analysis/tests/src/{Jsx.resi => Jsx2.resi} (100%) rename analysis/tests/src/expected/{Jsx.res.txt => Jsx2.res.txt} (91%) rename analysis/tests/src/expected/{Jsx.resi.txt => Jsx2.resi.txt} (87%) diff --git a/analysis/tests/src/Jsx.res b/analysis/tests/src/Jsx2.res similarity index 100% rename from analysis/tests/src/Jsx.res rename to analysis/tests/src/Jsx2.res diff --git a/analysis/tests/src/Jsx.resi b/analysis/tests/src/Jsx2.resi similarity index 100% rename from analysis/tests/src/Jsx.resi rename to analysis/tests/src/Jsx2.resi diff --git a/analysis/tests/src/expected/Jsx.res.txt b/analysis/tests/src/expected/Jsx2.res.txt similarity index 91% rename from analysis/tests/src/expected/Jsx.res.txt rename to analysis/tests/src/expected/Jsx2.res.txt index 041c8d867..2de65d15b 100644 --- a/analysis/tests/src/expected/Jsx.res.txt +++ b/analysis/tests/src/expected/Jsx2.res.txt @@ -1,9 +1,9 @@ -Definition src/Jsx.res 5:9 +Definition src/Jsx2.res 5:9 getLocItem #4: heuristic for within fragments: take make as makeProps does not work the type is not great but jump to definition works -{"uri": "Jsx.res", "range": {"start": {"line": 2, "character": 6}, "end": {"line": 2, "character": 10}}} +{"uri": "Jsx2.res", "range": {"start": {"line": 2, "character": 6}, "end": {"line": 2, "character": 10}}} -Complete src/Jsx.res 8:15 +Complete src/Jsx2.res 8:15 posCursor:[8:15] posNoWhite:[8:14] Found expr:[8:4->8:15] JSX 8:5] second[8:6->8:12]=...[8:13->8:15]> _children:None posCursor:[8:15] posNoWhite:[8:14] Found expr:[8:13->8:15] @@ -11,7 +11,7 @@ Pexp_ident fi:[8:13->8:15] Completable: Cpath Value[fi] [] -Complete src/Jsx.res 11:20 +Complete src/Jsx2.res 11:20 posCursor:[11:20] posNoWhite:[11:19] Found expr:[11:4->11:20] JSX 11:5] second[11:6->11:12]=...[11:13->11:18] f[11:19->11:20]=...[11:19->11:20]> _children:None Completable: Cjsx([M], f, [second, f]) @@ -29,7 +29,7 @@ Completable: Cjsx([M], f, [second, f]) "documentation": null }] -Complete src/Jsx.res 14:13 +Complete src/Jsx2.res 14:13 posCursor:[14:13] posNoWhite:[14:12] Found expr:[14:12->14:13] JSX 14:13] > _children:None Completable: Cpath Module[M] @@ -59,7 +59,7 @@ Completable: Cpath Module[M] "documentation": null }] -Complete src/Jsx.res 22:19 +Complete src/Jsx2.res 22:19 posCursor:[22:19] posNoWhite:[22:18] Found expr:[22:4->22:19] JSX 22:5] prop[22:6->22:10]=...[22:12->22:16] k[22:18->22:19]=...[22:18->22:19]> _children:None Completable: Cjsx([M], k, [prop, k]) @@ -71,7 +71,7 @@ Completable: Cjsx([M], k, [prop, k]) "documentation": null }] -Complete src/Jsx.res 25:17 +Complete src/Jsx2.res 25:17 posCursor:[25:17] posNoWhite:[25:16] Found expr:[25:4->25:17] JSX 25:5] prop[25:6->25:10]=...[25:11->25:15] k[25:16->25:17]=...[25:16->25:17]> _children:None Completable: Cjsx([M], k, [prop, k]) @@ -83,7 +83,7 @@ Completable: Cjsx([M], k, [prop, k]) "documentation": null }] -Complete src/Jsx.res 28:21 +Complete src/Jsx2.res 28:21 posCursor:[28:21] posNoWhite:[28:20] Found expr:[28:4->28:21] JSX 28:5] prop[28:6->28:10]=...[28:11->28:19] k[28:20->28:21]=...[28:20->28:21]> _children:None Completable: Cjsx([M], k, [prop, k]) @@ -95,7 +95,7 @@ Completable: Cjsx([M], k, [prop, k]) "documentation": null }] -Complete src/Jsx.res 31:24 +Complete src/Jsx2.res 31:24 posCursor:[31:24] posNoWhite:[31:23] Found expr:[31:4->31:24] JSX 31:5] prop[31:6->31:10]=...[31:11->31:22] k[31:23->31:24]=...[31:23->31:24]> _children:None Completable: Cjsx([M], k, [prop, k]) @@ -107,7 +107,7 @@ Completable: Cjsx([M], k, [prop, k]) "documentation": null }] -Complete src/Jsx.res 34:18 +Complete src/Jsx2.res 34:18 posCursor:[34:18] posNoWhite:[34:17] Found expr:[34:4->34:18] JSX 34:5] prop[34:6->34:10]=...[34:12->34:16] k[34:17->34:18]=...[34:17->34:18]> _children:None Completable: Cjsx([M], k, [prop, k]) @@ -119,7 +119,7 @@ Completable: Cjsx([M], k, [prop, k]) "documentation": null }] -Complete src/Jsx.res 37:16 +Complete src/Jsx2.res 37:16 posCursor:[37:16] posNoWhite:[37:15] Found expr:[37:4->37:16] JSX 37:5] prop[37:6->37:10]=...[37:11->37:14] k[37:15->37:16]=...[37:15->37:16]> _children:None Completable: Cjsx([M], k, [prop, k]) @@ -131,7 +131,7 @@ Completable: Cjsx([M], k, [prop, k]) "documentation": null }] -Complete src/Jsx.res 40:17 +Complete src/Jsx2.res 40:17 posCursor:[40:17] posNoWhite:[40:16] Found expr:[40:4->40:17] JSX 40:5] prop[40:6->40:10]=...[40:11->40:15] k[40:16->40:17]=...[40:16->40:17]> _children:None Completable: Cjsx([M], k, [prop, k]) @@ -143,7 +143,7 @@ Completable: Cjsx([M], k, [prop, k]) "documentation": null }] -Complete src/Jsx.res 43:18 +Complete src/Jsx2.res 43:18 posCursor:[43:18] posNoWhite:[43:17] Found expr:[43:4->43:18] JSX 43:5] prop[43:6->43:10]=...[43:11->43:16] k[43:17->43:18]=...[43:17->43:18]> _children:None Completable: Cjsx([M], k, [prop, k]) @@ -155,7 +155,7 @@ Completable: Cjsx([M], k, [prop, k]) "documentation": null }] -Complete src/Jsx.res 46:16 +Complete src/Jsx2.res 46:16 posCursor:[46:16] posNoWhite:[46:15] Found expr:[46:4->46:16] JSX 46:5] prop[46:6->46:10]=...[46:11->46:14] k[46:15->46:16]=...[46:15->46:16]> _children:None Completable: Cjsx([M], k, [prop, k]) @@ -167,7 +167,7 @@ Completable: Cjsx([M], k, [prop, k]) "documentation": null }] -Complete src/Jsx.res 49:27 +Complete src/Jsx2.res 49:27 posCursor:[49:27] posNoWhite:[49:26] Found expr:[49:4->49:27] JSX 49:5] prop[49:6->49:10]=...[49:11->49:25] k[49:26->49:27]=...[49:26->49:27]> _children:None Completable: Cjsx([M], k, [prop, k]) @@ -179,7 +179,7 @@ Completable: Cjsx([M], k, [prop, k]) "documentation": null }] -Complete src/Jsx.res 52:38 +Complete src/Jsx2.res 52:38 posCursor:[52:38] posNoWhite:[52:37] Found expr:[52:4->52:38] JSX 52:5] prop[52:6->52:10]=...[52:11->52:36] k[52:37->52:38]=...[52:37->52:38]> _children:None Completable: Cjsx([M], k, [prop, k]) @@ -191,7 +191,7 @@ Completable: Cjsx([M], k, [prop, k]) "documentation": null }] -Complete src/Jsx.res 55:25 +Complete src/Jsx2.res 55:25 posCursor:[55:25] posNoWhite:[55:24] Found expr:[55:4->55:25] JSX 55:5] prop[55:6->55:10]=...[55:11->55:23] k[55:24->55:25]=...[55:24->55:25]> _children:None Completable: Cjsx([M], k, [prop, k]) @@ -203,12 +203,12 @@ Completable: Cjsx([M], k, [prop, k]) "documentation": null }] -Definition src/Jsx.res 58:11 +Definition src/Jsx2.res 58:11 getLocItem #4: heuristic for within fragments: take make as makeProps does not work the type is not great but jump to definition works {"uri": "Component.res", "range": {"start": {"line": 1, "character": 4}, "end": {"line": 1, "character": 8}}} -Complete src/Jsx.res 68:10 +Complete src/Jsx2.res 68:10 posCursor:[68:10] posNoWhite:[68:9] Found expr:[68:4->68:10] JSX 68:7] al[68:8->68:10]=...[68:8->68:10]> _children:None Completable: Cjsx([Ext], al, [al]) @@ -220,13 +220,13 @@ Completable: Cjsx([Ext], al, [al]) "documentation": null }] -Complete src/Jsx.res 71:11 +Complete src/Jsx2.res 71:11 posCursor:[71:11] posNoWhite:[71:10] Found expr:[71:4->71:11] JSX 71:5] first[71:6->71:11]=...[71:6->71:11]> _children:None Completable: Cjsx([M], first, [first]) [] -Complete src/Jsx.res 74:16 +Complete src/Jsx2.res 74:16 posCursor:[74:16] posNoWhite:[74:15] Found expr:[74:4->74:16] JSX 74:5] first[74:6->74:11]=...[74:12->74:14] k[74:15->74:16]=...[74:15->74:16]> _children:None Completable: Cjsx([M], k, [first, k]) @@ -238,7 +238,7 @@ Completable: Cjsx([M], k, [first, k]) "documentation": null }] -Complete src/Jsx.res 77:23 +Complete src/Jsx2.res 77:23 posCursor:[77:23] posNoWhite:[77:22] Found expr:[77:4->77:23] JSX 77:5] first[77:6->77:11]=...[77:19->77:21] k[77:22->77:23]=...[77:22->77:23]> _children:None Completable: Cjsx([M], k, [first, k]) @@ -250,7 +250,7 @@ Completable: Cjsx([M], k, [first, k]) "documentation": null }] -Complete src/Jsx.res 80:6 +Complete src/Jsx2.res 80:6 posCursor:[80:6] posNoWhite:[80:5] Found expr:[80:4->85:69] Pexp_apply ...[83:20->83:21] (...[80:4->83:19], ...[84:2->85:69]) posCursor:[80:6] posNoWhite:[80:5] Found expr:[80:4->83:19] @@ -261,7 +261,7 @@ posCursor:[80:6] posNoWhite:[80:5] Found expr:__ghost__[80:5->83:20] Pexp_construct []:__ghost__[80:5->83:20] None [] -Complete src/Jsx.res 89:16 +Complete src/Jsx2.res 89:16 posCursor:[89:16] posNoWhite:[89:15] Found expr:[89:4->89:16] JSX 89:16] > _children:None Completable: Cpath Module[WithChildren] @@ -273,7 +273,7 @@ Completable: Cpath Module[WithChildren] "documentation": null }] -Complete src/Jsx.res 91:18 +Complete src/Jsx2.res 91:18 posCursor:[91:18] posNoWhite:[91:17] Found expr:[91:4->91:18] JSX 91:16] n[91:17->91:18]=...[91:17->91:18]> _children:None Completable: Cjsx([WithChildren], n, [n]) @@ -285,7 +285,7 @@ Completable: Cjsx([WithChildren], n, [n]) "documentation": null }] -Complete src/Jsx.res 94:18 +Complete src/Jsx2.res 94:18 posCursor:[94:18] posNoWhite:[94:17] Found pattern:[94:7->94:18] posCursor:[94:18] posNoWhite:[94:17] Found type:[94:11->94:18] Ptyp_constr React.e:[94:11->94:18] @@ -298,7 +298,7 @@ Completable: Cpath Type[React, e] "documentation": null }] -Complete src/Jsx.res 96:20 +Complete src/Jsx2.res 96:20 posCursor:[96:20] posNoWhite:[96:19] Found pattern:[96:7->99:6] posCursor:[96:20] posNoWhite:[96:19] Found type:[96:11->99:6] Ptyp_constr ReactDOMR:[96:11->99:6] @@ -311,7 +311,7 @@ Completable: Cpath Type[ReactDOMR] "documentation": null }] -Complete src/Jsx.res 102:21 +Complete src/Jsx2.res 102:21 posCursor:[102:21] posNoWhite:[102:20] Found expr:[102:13->102:21] Pexp_apply ...[102:15->102:16] (...[102:13->102:14], ...[102:17->102:21]) posCursor:[102:21] posNoWhite:[102:20] Found expr:[102:17->102:21] @@ -319,7 +319,7 @@ Pexp_field [102:17->102:18] th:[102:19->102:21] Completable: Cpath Value[x].th [] -Complete src/Jsx.res 106:28 +Complete src/Jsx2.res 106:28 posCursor:[106:28] posNoWhite:[106:27] Found expr:[106:11->106:28] Pexp_ident DefineSomeFields.:[106:11->106:28] Completable: Cpath Value[DefineSomeFields, ""] @@ -331,7 +331,7 @@ Completable: Cpath Value[DefineSomeFields, ""] "documentation": null }] -Complete src/Jsx.res 108:36 +Complete src/Jsx2.res 108:36 posCursor:[108:36] posNoWhite:[108:35] Found expr:[108:11->108:36] Pexp_apply ...[108:13->108:14] (...[108:11->108:12], ...[108:15->108:36]) posCursor:[108:36] posNoWhite:[108:35] Found expr:[108:15->108:36] @@ -351,7 +351,7 @@ Completable: Cpath Module[DefineSomeFields].th "documentation": null }] -Complete src/Jsx.res 122:20 +Complete src/Jsx2.res 122:20 posCursor:[122:20] posNoWhite:[122:19] Found expr:[121:3->125:4] JSX 121:6] x[122:5->122:6]=...[122:7->122:20] name[124:4->124:8]=...[124:9->124:11]> _children:125:2 posCursor:[122:20] posNoWhite:[122:19] Found expr:[122:7->122:20] @@ -365,7 +365,7 @@ Completable: Cpath Value[Outer, Inner, h] "documentation": null }] -Complete src/Jsx.res 129:19 +Complete src/Jsx2.res 129:19 posCursor:[129:19] posNoWhite:[129:18] Found expr:[128:3->131:9] JSX 128:6] x[129:5->129:6]=...[129:7->131:8]> _children:None posCursor:[129:19] posNoWhite:[129:18] Found expr:[129:7->131:8] @@ -379,12 +379,12 @@ Completable: Cpath Value[Outer, Inner, ""] "documentation": null }] -Complete src/Jsx.res 136:7 +Complete src/Jsx2.res 136:7 posCursor:[136:7] posNoWhite:[136:6] Found expr:[135:3->138:9] JSX 135:6] x[136:5->136:6]=...[138:4->138:8]> _children:None [] -Complete src/Jsx.res 150:21 +Complete src/Jsx2.res 150:21 posCursor:[150:21] posNoWhite:[150:20] Found expr:[150:12->150:32] JSX 150:21] name[150:22->150:26]=...[150:27->150:29]> _children:150:30 Completable: Cpath Module[Nested, Co] @@ -396,7 +396,7 @@ Completable: Cpath Module[Nested, Co] "documentation": null }] -Complete src/Jsx.res 153:19 +Complete src/Jsx2.res 153:19 posCursor:[153:19] posNoWhite:[153:18] Found expr:[153:12->153:25] JSX 153:24] > _children:None Completable: Cpath Module[Nested, ""] @@ -408,7 +408,7 @@ Completable: Cpath Module[Nested, ""] "documentation": null }] -Hover src/Jsx.res 162:12 +Hover src/Jsx2.res 162:12 Nothing at that position. Now trying to use completion. posCursor:[162:12] posNoWhite:[162:11] Found expr:[162:3->162:21] Pexp_construct :::[162:6->162:21] [162:6->162:21] @@ -418,7 +418,7 @@ JSX 162:10] age[162:11->162:14]=...[162:15->162:17]> _children:162 Completable: Cjsx([Comp], age, [age]) {"contents": "```rescript\nint\n```"} -Hover src/Jsx.res 167:16 +Hover src/Jsx2.res 167:16 Nothing at that position. Now trying to use completion. posCursor:[167:16] posNoWhite:[167:15] Found expr:[167:3->167:30] Pexp_construct :::[167:7->167:30] [167:7->167:30] diff --git a/analysis/tests/src/expected/Jsx.resi.txt b/analysis/tests/src/expected/Jsx2.resi.txt similarity index 87% rename from analysis/tests/src/expected/Jsx.resi.txt rename to analysis/tests/src/expected/Jsx2.resi.txt index b0b987154..bff16aa8c 100644 --- a/analysis/tests/src/expected/Jsx.resi.txt +++ b/analysis/tests/src/expected/Jsx2.resi.txt @@ -1,12 +1,12 @@ -Hover src/Jsx.resi 1:4 +Hover src/Jsx2.resi 1:4 getLocItem #1: heuristic for makeProps in interface files n1:componentLike n2:unit n3:string {"contents": "```rescript\n(~first: string, ~key: string=?, unit) => {\"first\": string}\n```"} -Hover src/Jsx.resi 4:4 +Hover src/Jsx2.resi 4:4 {"contents": "```rescript\nint\n```"} -Complete src/Jsx.resi 7:19 +Complete src/Jsx2.resi 7:19 posCursor:[7:19] posNoWhite:[7:18] Found type:[7:12->7:19] Ptyp_constr React.e:[7:12->7:19] Completable: Cpath Type[React, e] @@ -18,7 +18,7 @@ Completable: Cpath Type[React, e] "documentation": null }] -Complete src/Jsx.resi 10:18 +Complete src/Jsx2.resi 10:18 posCursor:[10:18] posNoWhite:[10:17] Found type:[10:11->10:18] Ptyp_constr React.e:[10:11->10:18] Completable: Cpath Type[React, e] From dd4a562c946fb974a66a68b0bf0a0cca0e381bbf Mon Sep 17 00:00:00 2001 From: Cristiano Calcagno Date: Thu, 8 Sep 2022 14:03:10 +0200 Subject: [PATCH 2/4] Update bsconfig for v4. --- analysis/tests/bsconfig.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/analysis/tests/bsconfig.json b/analysis/tests/bsconfig.json index ab6be18e9..cef97db16 100644 --- a/analysis/tests/bsconfig.json +++ b/analysis/tests/bsconfig.json @@ -11,5 +11,5 @@ ], "bsc-flags": ["-w -33-44"], "bs-dependencies": ["@rescript/react"], - "reason": { "react-jsx": 3 } + "jsx": { "version": 3 } } From 915c207955959483cef7a720ff9c6a13c475e37d Mon Sep 17 00:00:00 2001 From: Cristiano Calcagno Date: Thu, 8 Sep 2022 14:03:52 +0200 Subject: [PATCH 3/4] Revert "Update bsconfig for v4." This reverts commit dd4a562c946fb974a66a68b0bf0a0cca0e381bbf. --- analysis/tests/bsconfig.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/analysis/tests/bsconfig.json b/analysis/tests/bsconfig.json index cef97db16..ab6be18e9 100644 --- a/analysis/tests/bsconfig.json +++ b/analysis/tests/bsconfig.json @@ -11,5 +11,5 @@ ], "bsc-flags": ["-w -33-44"], "bs-dependencies": ["@rescript/react"], - "jsx": { "version": 3 } + "reason": { "react-jsx": 3 } } From 5483c8ce54466d76ab5bc42d1a8679ba7c06fd13 Mon Sep 17 00:00:00 2001 From: Cristiano Calcagno Date: Thu, 8 Sep 2022 21:24:24 +0200 Subject: [PATCH 4/4] One component per module. --- analysis/tests/src/CreateInterface.res | 55 ++++++++----- analysis/tests/src/Hover.res | 8 +- analysis/tests/src/Jsx2.res | 2 +- .../src/expected/CreateInterface.res.txt | 41 +++++++--- analysis/tests/src/expected/Hover.res.txt | 82 +++++++++---------- 5 files changed, 109 insertions(+), 79 deletions(-) diff --git a/analysis/tests/src/CreateInterface.res b/analysis/tests/src/CreateInterface.res index 56af48136..7bc514cc2 100644 --- a/analysis/tests/src/CreateInterface.res +++ b/analysis/tests/src/CreateInterface.res @@ -7,8 +7,10 @@ let add = (~x, ~y) => x + y @react.component let make = (~name) => React.string(name) -@react.component -let otherComponentName = (~name) => React.string(name) +module Other = { + @react.component + let otherComponentName = (~name) => React.string(name) +} module Mod = { @react.component @@ -40,8 +42,7 @@ let f1 = 10 @inline let f2 = "some string" -@genType -@inline +@genType @inline let f3 = 10 @genType @inline @@ -95,32 +96,42 @@ module type OptT = { @react.component let withOpt1: (~x: int=?, ~y: int) => int - @react.component - let withOpt2: (~x: int=?, ~y: int) => int + module type Opt2 = { + @react.component + let withOpt2: (~x: int=?, ~y: int) => int + } - @react.component - let withOpt3: (~x: option, ~y: int) => int + module type Opt3 = { + @react.component + let withOpt3: (~x: option, ~y: int) => int + } } module Opt = { @react.component let withOpt1 = (~x=3, ~y) => x + y - @react.component - let withOpt2 = (~x=?, ~y) => - switch x { - | None => 0 - | Some(x) => x - } + - y + module Opt2 = { + @react.component + let withOpt2 = (~x: option=?, ~y: int) => + switch x { + | None => 0 + | Some(x) => x + } + + y + } + module type Opt2 = module type of Opt2 - @react.component - let withOpt3 = (~x, ~y) => - switch x { - | None => 0 - | Some(x) => x - } + - y + module Opt3 = { + @react.component + let withOpt3 = (~x: option, ~y: int) => + switch x { + | None => 0 + | Some(x) => x + } + + y + } + module type Opt3 = module type of Opt3 } module Opt2: OptT = Opt diff --git a/analysis/tests/src/Hover.res b/analysis/tests/src/Hover.res index 593d40473..a5f7058ba 100644 --- a/analysis/tests/src/Hover.res +++ b/analysis/tests/src/Hover.res @@ -38,9 +38,11 @@ let functionWithTypeAnnotation: unit => int = () => 1 let make = (~name) => React.string(name) // ^hov -@react.component -let make2 = (~name: string) => React.string(name) -// ^hov +module C2 = { + @react.component + let make2 = (~name: string) => React.string(name) + // ^hov +} let num = 34 // ^hov diff --git a/analysis/tests/src/Jsx2.res b/analysis/tests/src/Jsx2.res index b49174d22..6ee94d39d 100644 --- a/analysis/tests/src/Jsx2.res +++ b/analysis/tests/src/Jsx2.res @@ -64,7 +64,7 @@ module Ext = { external make: (~align: string=?) => React.element = "Typography" } -let _ = (Ext.make, Ext.makeProps) +let _ = Ext.make // int @react.component let make: (~name: string) => React.element -@react.component -let otherComponentName: (~name: string) => React.element +module Other: { + @react.component + let otherComponentName: (~name: string) => React.element +} module Mod: { @react.component let make: (~name: string) => React.element @@ -28,8 +30,7 @@ external padLeft: ( @inline let f1: int @inline let f2: string -@genType -@inline +@genType @inline let f3: int @genType @inline let f4: string @@ -73,18 +74,34 @@ and D: ModTyp module type OptT = { @react.component let withOpt1: (~x: int=?, ~y: int) => int - @react.component - let withOpt2: (~x: int=?, ~y: int) => int - @react.component - let withOpt3: (~x: option, ~y: int) => int + module type Opt2 = { + @react.component + let withOpt2: (~x: int=?, ~y: int) => int + } + module type Opt3 = { + @react.component + let withOpt3: (~x: option, ~y: int) => int + } } module Opt: { @react.component let withOpt1: (~x: int=?, ~y: int) => int - @react.component - let withOpt2: (~x: int=?, ~y: int) => int - @react.component - let withOpt3: (~x: option, ~y: int) => int + module Opt2: { + @react.component + let withOpt2: (~x: int=?, ~y: int) => int + } + module type Opt2 = { + @react.component + let withOpt2: (~x: int=?, ~y: int) => int + } + module Opt3: { + @react.component + let withOpt3: (~x: option, ~y: int) => int + } + module type Opt3 = { + @react.component + let withOpt3: (~x: option, ~y: int) => int + } } module Opt2: OptT module Opt3 = Opt diff --git a/analysis/tests/src/expected/Hover.res.txt b/analysis/tests/src/expected/Hover.res.txt index 93d8616be..2eea12724 100644 --- a/analysis/tests/src/expected/Hover.res.txt +++ b/analysis/tests/src/expected/Hover.res.txt @@ -26,7 +26,7 @@ heuristic for: [Props, x], give loc of `x` n1:Props n2:name {"contents": "```rescript\nstring\n```"} -Hover src/Hover.res 41:13 +Hover src/Hover.res 42:15 getLocItem #7: heuristic for JSX on type-annotated labeled (~arg:t): (~arg:t) becomes Props#arg Props has the location range of arg:t @@ -35,84 +35,84 @@ heuristic for: [Props, arg], give loc of `arg` n1:Props n2:name {"contents": "```rescript\nstring\n```"} -Hover src/Hover.res 44:10 +Hover src/Hover.res 46:10 {"contents": "```rescript\nint\n```"} -Hover src/Hover.res 47:13 +Hover src/Hover.res 49:13 {"contents": "```rescript\nmodule Logger = {\n let log: string => unit\n}\n```"} -Hover src/Hover.res 52:7 +Hover src/Hover.res 54:7 {"contents": "```rescript\nmodule Logger = {\n let log: string => unit\n}\n```"} -Definition src/Hover.res 58:14 -{"uri": "Hover.res", "range": {"start": {"line": 47, "character": 12}, "end": {"line": 47, "character": 18}}} +Definition src/Hover.res 60:14 +{"uri": "Hover.res", "range": {"start": {"line": 49, "character": 12}, "end": {"line": 49, "character": 18}}} -Hover src/Hover.res 61:9 +Hover src/Hover.res 63:9 {"contents": "```rescript\nmodule IdDefinedTwice = {\n let y: int\n let _x: int\n}\n```"} -Hover src/Hover.res 72:7 +Hover src/Hover.res 74:7 {"contents": "```rescript\nmodule A = {\n let x: int\n}\n```"} -Hover src/Hover.res 75:7 +Hover src/Hover.res 77:7 {"contents": "```rescript\nmodule A = {\n let x: int\n}\n```"} -Hover src/Hover.res 89:10 +Hover src/Hover.res 91:10 Nothing at that position. Now trying to use completion. -posCursor:[89:10] posNoWhite:[89:8] Found expr:[86:3->89:9] -JSX 86:7] > _children:86:7 +posCursor:[91:10] posNoWhite:[91:8] Found expr:[88:3->91:9] +JSX 88:7] > _children:88:7 null -Hover src/Hover.res 96:10 +Hover src/Hover.res 98:10 Nothing at that position. Now trying to use completion. -posCursor:[96:10] posNoWhite:[96:9] Found expr:[93:3->96:10] -JSX 93:8] > _children:93:8 +posCursor:[98:10] posNoWhite:[98:9] Found expr:[95:3->98:10] +JSX 95:8] > _children:95:8 null -Hover src/Hover.res 101:25 +Hover src/Hover.res 103:25 {"contents": "```rescript\nfloat\n```"} -Hover src/Hover.res 104:21 +Hover src/Hover.res 106:21 {"contents": "```rescript\nint\n```"} -Hover src/Hover.res 114:16 +Hover src/Hover.res 116:16 {"contents": "```rescript\nAA.cond<[< #str(string)]> => AA.cond<[< #str(string)]>\n```"} -Hover src/Hover.res 117:25 +Hover src/Hover.res 119:25 {"contents": "```rescript\nAA.cond<[< #str(string)]> => AA.cond<[< #str(string)]>\n```"} -Hover src/Hover.res 120:3 +Hover src/Hover.res 122:3 Nothing at that position. Now trying to use completion. -Attribute id:live:[120:0->120:5] label:live +Attribute id:live:[122:0->122:5] label:live Completable: Cdecorator(live) {"contents": "The `@live` decorator is for reanalyze, a static analysis tool for ReScript that can do dead code analysis.\n\n`@live` tells the dead code analysis that the value should be considered live, even though it might appear to be dead. This is typically used in case of FFI where there are indirect ways to access values. It can be added to everything that could otherwise be considered unused by the dead code analysis - values, functions, arguments, records, individual record fields, and so on.\n\n[Read more and see examples in the documentation](https://rescript-lang.org/syntax-lookup#live-decorator).\n\nHint: Did you know you can run an interactive code analysis in your project by running the command `> ReScript: Start Code Analyzer`? Try it!"} -Hover src/Hover.res 123:4 +Hover src/Hover.res 125:4 {"contents": "```rescript\n(. ()) => unit => int\n```"} -Hover src/Hover.res 129:4 +Hover src/Hover.res 131:4 {"contents": "```rescript\n(. ()) => (. ()) => int\n```"} -Hover src/Hover.res 132:4 +Hover src/Hover.res 134:4 {"contents": "```rescript\n(. unit, unit) => int\n```"} -Hover src/Hover.res 135:5 +Hover src/Hover.res 137:5 {"contents": "```rescript\n(. ()) => unit => int\n```"} -Hover src/Hover.res 142:9 +Hover src/Hover.res 144:9 {"contents": "```rescript\nint\n```\n\ndoc comment 1"} -Hover src/Hover.res 146:6 +Hover src/Hover.res 148:6 {"contents": "```rescript\nint\n```\n\n doc comment 2 "} -Hover src/Hover.res 163:23 +Hover src/Hover.res 165:23 {"contents": "```rescript\nfoo\n```\n\n```rescript\ntype foo<'a> = {content: 'a, zzz: string}\n```"} -Hover src/Hover.res 165:22 +Hover src/Hover.res 167:22 {"contents": "```rescript\nfoobar\n```\n\n```rescript\ntype foobar = foo\n```"} -Complete src/Hover.res 168:16 -posCursor:[168:16] posNoWhite:[168:15] Found expr:[168:5->168:16] -Pexp_field [168:5->168:15] _:[174:2->168:16] +Complete src/Hover.res 170:16 +posCursor:[170:16] posNoWhite:[170:15] Found expr:[170:5->170:16] +Pexp_field [170:5->170:15] _:[176:2->170:16] Completable: Cpath Value[x1].content."" [{ "label": "age", @@ -122,9 +122,9 @@ Completable: Cpath Value[x1].content."" "documentation": null }] -Complete src/Hover.res 171:16 -posCursor:[171:16] posNoWhite:[171:15] Found expr:[171:5->171:16] -Pexp_field [171:5->171:15] _:[174:2->171:16] +Complete src/Hover.res 173:16 +posCursor:[173:16] posNoWhite:[173:15] Found expr:[173:5->173:16] +Pexp_field [173:5->173:15] _:[176:2->173:16] Completable: Cpath Value[x2].content."" [{ "label": "age", @@ -134,9 +134,9 @@ Completable: Cpath Value[x2].content."" "documentation": null }] -Complete src/Hover.res 180:16 -posCursor:[180:16] posNoWhite:[180:15] Found expr:[180:5->180:16] -Pexp_field [180:5->180:15] _:[185:0->180:16] +Complete src/Hover.res 182:16 +posCursor:[182:16] posNoWhite:[182:15] Found expr:[182:5->182:16] +Pexp_field [182:5->182:15] _:[187:0->182:16] Completable: Cpath Value[y1].content."" [{ "label": "age", @@ -146,9 +146,9 @@ Completable: Cpath Value[y1].content."" "documentation": null }] -Complete src/Hover.res 183:16 -posCursor:[183:16] posNoWhite:[183:15] Found expr:[183:5->183:16] -Pexp_field [183:5->183:15] _:[185:0->183:16] +Complete src/Hover.res 185:16 +posCursor:[185:16] posNoWhite:[185:15] Found expr:[185:5->185:16] +Pexp_field [185:5->185:15] _:[187:0->185:16] Completable: Cpath Value[y2].content."" [{ "label": "age",