diff --git a/CHANGELOG.md b/CHANGELOG.md index 40ca6a0b3..d4a4217ec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ #### :bug: Bug Fix - Fix invalid range for `definition`. https://github.com/rescript-lang/rescript-vscode/pull/781 +- Don't emit object keys in uppercase as namespace. https://github.com/rescript-lang/rescript-vscode/pull/798 ## 1.18.0 diff --git a/analysis/src/SemanticTokens.ml b/analysis/src/SemanticTokens.ml index bb1f0d822..41fb70353 100644 --- a/analysis/src/SemanticTokens.ml +++ b/analysis/src/SemanticTokens.ml @@ -115,8 +115,8 @@ let emitFromLoc ~loc ~type_ emitter = let emitLongident ?(backwards = false) ?(jsx = false) ?(lowerCaseToken = if jsx then Token.JsxLowercase else Token.Variable) - ?(upperCaseToken = Token.Namespace) ?(lastToken = None) ?(posEnd = None) ~pos - ~lid ~debug emitter = + ?(upperCaseToken = Token.Namespace) ?(lastToken = None) ?(posEnd = None) + ~pos ~lid ~debug emitter = let rec flatten acc lid = match lid with | Longident.Lident txt -> txt :: acc @@ -309,7 +309,12 @@ let command ~debug ~emitter ~path = Ast_iterator.default_iterator.expr iterator e | Pexp_record (cases, _) -> cases - |> List.iter (fun (label, _) -> emitter |> emitRecordLabel ~label ~debug); + |> List.filter_map (fun ((label : Longident.t Location.loc), _) -> + match label.txt with + | Longident.Lident s when not (Utils.isFirstCharUppercase s) -> + Some label + | _ -> None) + |> List.iter (fun label -> emitter |> emitRecordLabel ~label ~debug); Ast_iterator.default_iterator.expr iterator e | Pexp_field (_, label) | Pexp_setfield (_, label, _) -> emitter |> emitRecordLabel ~label ~debug; diff --git a/analysis/src/Utils.ml b/analysis/src/Utils.ml index 0ef9e3c7e..e548457f2 100644 --- a/analysis/src/Utils.ml +++ b/analysis/src/Utils.ml @@ -15,6 +15,9 @@ let endsWith s suffix = let l = String.length s in p <= String.length s && String.sub s (l - p) p = suffix +let isFirstCharUppercase s = + String.length s > 0 && Char.equal s.[0] (Char.uppercase_ascii s.[0]) + let cmtPosToPosition {Lexing.pos_lnum; pos_cnum; pos_bol} = Protocol.{line = pos_lnum - 1; character = pos_cnum - pos_bol} diff --git a/analysis/tests/src/Highlight.res b/analysis/tests/src/Highlight.res index 3baebefbd..225f0c48a 100644 --- a/analysis/tests/src/Highlight.res +++ b/analysis/tests/src/Highlight.res @@ -132,3 +132,5 @@ let _ = 3 == 3 || 3 === 3 let _ = (~_type_ as _) => () let _ = {"abc": 34} + +let _ = {"Key": 2} diff --git a/analysis/tests/src/expected/Highlight.res.txt b/analysis/tests/src/expected/Highlight.res.txt index 23362420d..a4ab8e142 100644 --- a/analysis/tests/src/expected/Highlight.res.txt +++ b/analysis/tests/src/expected/Highlight.res.txt @@ -1,5 +1,5 @@ Highlight src/Highlight.res -structure items:38 diagnostics:0 +structure items:39 diagnostics:0 Lident: M 0:7 Namespace Lident: C 1:9 Namespace Lident: Component 1:13 Namespace