From 9f4bf94ae6f05dfe8b5746a38a11a7e5d415aba8 Mon Sep 17 00:00:00 2001 From: Gabriel Nordeborn Date: Tue, 4 Jun 2024 09:01:45 +0200 Subject: [PATCH 1/3] fixes a special case in switch expr completion --- analysis/src/CompletionFrontEnd.ml | 8 ++++++++ analysis/tests/src/CompletionExpressions.res | 3 +++ .../expected/CompletionExpressions.res.txt | 19 +++++++++++++++++++ 3 files changed, 30 insertions(+) diff --git a/analysis/src/CompletionFrontEnd.ml b/analysis/src/CompletionFrontEnd.ml index 88bbdd2ce..950f3998f 100644 --- a/analysis/src/CompletionFrontEnd.ml +++ b/analysis/src/CompletionFrontEnd.ml @@ -587,6 +587,14 @@ let completionWithParser1 ~currentFile ~debug ~offset ~path ~posCursor if Debug.verbose () && debugTypedCompletionExpr then print_endline "[typedCompletionExpr] No cases, rest"; () + | Pexp_match (expr, [{pc_lhs; pc_rhs}]) + when locHasCursor expr.pexp_loc + && CompletionExpressions.isExprHole pc_rhs + && CompletionPatterns.isPatternHole pc_lhs -> + if Debug.verbose () && debugTypedCompletionExpr then + print_endline + "[typedCompletionExpr] No cases (expr and pat holes), rest"; + () | Pexp_match ( exp, [ diff --git a/analysis/tests/src/CompletionExpressions.res b/analysis/tests/src/CompletionExpressions.res index 8dbff050a..d8ce1ebe2 100644 --- a/analysis/tests/src/CompletionExpressions.res +++ b/analysis/tests/src/CompletionExpressions.res @@ -385,3 +385,6 @@ let {name} = hook({ includeName: true, showMore: true, }) + +// switch someTyp. { | } +// ^com diff --git a/analysis/tests/src/expected/CompletionExpressions.res.txt b/analysis/tests/src/expected/CompletionExpressions.res.txt index 938f96191..2d5c7438c 100644 --- a/analysis/tests/src/expected/CompletionExpressions.res.txt +++ b/analysis/tests/src/expected/CompletionExpressions.res.txt @@ -1459,3 +1459,22 @@ Path hook "documentation": {"kind": "markdown", "value": "```rescript\noperator?: [#\"and\" | #or]\n```\n\n```rescript\ntype config = {includeName: bool, operator: option<[#\"and\" | #or]>, showMore: bool}\n```"} }] +Complete src/CompletionExpressions.res 388:18 +posCursor:[388:18] posNoWhite:[388:17] Found expr:[388:3->388:24] +posCursor:[388:18] posNoWhite:[388:17] Found expr:[388:10->388:18] +Pexp_field [388:10->388:17] _:[388:19->388:18] +Completable: Cpath Value[someTyp]."" +Raw opens: 1 CompletionSupport.place holder +Package opens Pervasives.JsxModules.place holder +Resolved opens 2 pervasives CompletionSupport.res +ContextPath Value[someTyp]."" +ContextPath Value[someTyp] +Path someTyp +[{ + "label": "test", + "kind": 5, + "tags": [], + "detail": "bool", + "documentation": {"kind": "markdown", "value": "```rescript\ntest: bool\n```\n\n```rescript\ntype someTyp = {test: bool}\n```"} + }] + From c2705f48b4147a4535871b9c27f50158da3ff992 Mon Sep 17 00:00:00 2001 From: Gabriel Nordeborn Date: Tue, 4 Jun 2024 09:03:23 +0200 Subject: [PATCH 2/3] changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index de8c061b5..0374167fb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,10 @@ ## master +#### :bug: Bug Fix + +- Fix edge case in switch expr completion. https://github.com/rescript-lang/rescript-vscode/pull/1002 + ## 1.52.0 #### :bug: Bug Fix From 33b5771bb2db0bbe238def2823e44ecd1df5de9d Mon Sep 17 00:00:00 2001 From: Gabriel Nordeborn Date: Tue, 4 Jun 2024 10:27:01 +0200 Subject: [PATCH 3/3] add comments --- analysis/src/CompletionFrontEnd.ml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/analysis/src/CompletionFrontEnd.ml b/analysis/src/CompletionFrontEnd.ml index 950f3998f..f5957a8ed 100644 --- a/analysis/src/CompletionFrontEnd.ml +++ b/analysis/src/CompletionFrontEnd.ml @@ -584,6 +584,7 @@ let completionWithParser1 ~currentFile ~debug ~offset ~path ~posCursor | Some contextPath -> setResult (CexhaustiveSwitch {contextPath; exprLoc = exp.pexp_loc})) | Pexp_match (_expr, []) -> + (* switch x { } *) if Debug.verbose () && debugTypedCompletionExpr then print_endline "[typedCompletionExpr] No cases, rest"; () @@ -591,6 +592,7 @@ let completionWithParser1 ~currentFile ~debug ~offset ~path ~posCursor when locHasCursor expr.pexp_loc && CompletionExpressions.isExprHole pc_rhs && CompletionPatterns.isPatternHole pc_lhs -> + (* switch x { | } when we're in the switch expr itself. *) if Debug.verbose () && debugTypedCompletionExpr then print_endline "[typedCompletionExpr] No cases (expr and pat holes), rest";