From 50d7bc3797ba85fc5337cd97e1e5016b58e7dddf Mon Sep 17 00:00:00 2001 From: Gabriel Nordeborn Date: Wed, 26 Oct 2022 21:42:11 +0200 Subject: [PATCH 1/4] special case completion for built ins when ReScriptJs is automatically opened --- analysis/src/CompletionBackEnd.ml | 8 ++++---- analysis/src/Packages.ml | 19 +++++++++++++++++++ analysis/src/SharedTypes.ml | 8 ++++++++ 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/analysis/src/CompletionBackEnd.ml b/analysis/src/CompletionBackEnd.ml index 51dab59be..8cdfd88c4 100644 --- a/analysis/src/CompletionBackEnd.ml +++ b/analysis/src/CompletionBackEnd.ml @@ -1283,10 +1283,10 @@ let rec getCompletionsForContextPath ~package ~opens ~rawOpens ~allFiles ~pos |> completionsGetTypeEnv with | Some (typ, _envNotUsed) -> ( - let arrayModulePath = ["Js"; "Array2"] in - let listModulePath = ["Belt"; "List"] in - let optionModulePath = ["Belt"; "Option"] in - let stringModulePath = ["Js"; "String2"] in + let {arrayModulePath; listModulePath; optionModulePath; stringModulePath} + = + package.builtInCompletionModules + in let getModulePath path = let rec loop (path : Path.t) = match path with diff --git a/analysis/src/Packages.ml b/analysis/src/Packages.ml index c43ca71d9..62bcf1062 100644 --- a/analysis/src/Packages.ml +++ b/analysis/src/Packages.ml @@ -88,6 +88,25 @@ let newBsPackage ~rootPath = pathsForModule; opens; namespace; + builtInCompletionModules = + (if + opens + |> List.find_opt (fun opn -> opn = "ReScriptJs") + |> Option.is_some + then + { + arrayModulePath = ["Array"]; + listModulePath = ["List"]; + optionModulePath = ["Option"]; + stringModulePath = ["String"]; + } + else + { + arrayModulePath = ["Js"; "Array2"]; + listModulePath = ["Belt"; "List"]; + optionModulePath = ["Belt"; "Option"]; + stringModulePath = ["Js"; "String2"]; + }); }))) | None -> None) diff --git a/analysis/src/SharedTypes.ml b/analysis/src/SharedTypes.ml index 440ccc811..ba771c7e0 100644 --- a/analysis/src/SharedTypes.ml +++ b/analysis/src/SharedTypes.ml @@ -365,6 +365,13 @@ type file = string module FileSet = Set.Make (String) +type builtInCompletionModules = { + arrayModulePath: string list; + listModulePath: string list; + optionModulePath: string list; + stringModulePath: string list; +} + type package = { rootPath: filePath; projectFiles: FileSet.t; @@ -372,6 +379,7 @@ type package = { pathsForModule: (file, paths) Hashtbl.t; namespace: string option; opens: string list; + builtInCompletionModules: builtInCompletionModules; } type full = {extra: extra; file: File.t; package: package} From c12539536b1c91db7ba565e221b025e48f748f31 Mon Sep 17 00:00:00 2001 From: Gabriel Nordeborn Date: Thu, 27 Oct 2022 15:52:48 +0200 Subject: [PATCH 2/4] handle more built ins --- analysis/src/CompletionBackEnd.ml | 18 +++++++++++++++--- analysis/src/Packages.ml | 8 ++++++-- analysis/src/SharedTypes.ml | 4 +++- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/analysis/src/CompletionBackEnd.ml b/analysis/src/CompletionBackEnd.ml index 8cdfd88c4..7f756a1b3 100644 --- a/analysis/src/CompletionBackEnd.ml +++ b/analysis/src/CompletionBackEnd.ml @@ -1283,8 +1283,14 @@ let rec getCompletionsForContextPath ~package ~opens ~rawOpens ~allFiles ~pos |> completionsGetTypeEnv with | Some (typ, _envNotUsed) -> ( - let {arrayModulePath; listModulePath; optionModulePath; stringModulePath} - = + let { + arrayModulePath; + optionModulePath; + stringModulePath; + intModulePath; + floatModulePath; + promiseModulePath; + } = package.builtInCompletionModules in let getModulePath path = @@ -1296,9 +1302,15 @@ let rec getCompletionsForContextPath ~package ~opens ~rawOpens ~allFiles ~pos in match path with | Path.Pident id when Ident.name id = "array" -> arrayModulePath - | Path.Pident id when Ident.name id = "list" -> listModulePath | Path.Pident id when Ident.name id = "option" -> optionModulePath | Path.Pident id when Ident.name id = "string" -> stringModulePath + | Path.Pident id when Ident.name id = "int" -> intModulePath + | Path.Pident id when Ident.name id = "float" -> floatModulePath + | Path.Pident id when Ident.name id = "promise" -> promiseModulePath + | Path.Pident id when Ident.name id = "list" -> ["Belt"; "List"] + | Path.Pident id when Ident.name id = "lazy_t" -> ["Lazy"] + | Path.Pident id when Ident.name id = "result" -> ["Belt"; "Result"] + | Path.Pident id when Ident.name id = "char" -> ["Char"] | _ -> ( match loop path with | _ :: rest -> List.rev rest diff --git a/analysis/src/Packages.ml b/analysis/src/Packages.ml index 62bcf1062..8848fd9e0 100644 --- a/analysis/src/Packages.ml +++ b/analysis/src/Packages.ml @@ -96,16 +96,20 @@ let newBsPackage ~rootPath = then { arrayModulePath = ["Array"]; - listModulePath = ["List"]; optionModulePath = ["Option"]; stringModulePath = ["String"]; + intModulePath = ["Int"]; + floatModulePath = ["Float"]; + promiseModulePath = ["Promise"]; } else { arrayModulePath = ["Js"; "Array2"]; - listModulePath = ["Belt"; "List"]; optionModulePath = ["Belt"; "Option"]; stringModulePath = ["Js"; "String2"]; + intModulePath = ["Belt"; "Int"]; + floatModulePath = ["Belt"; "Float"]; + promiseModulePath = ["Js"; "Promise"]; }); }))) | None -> None) diff --git a/analysis/src/SharedTypes.ml b/analysis/src/SharedTypes.ml index ba771c7e0..33c77c52c 100644 --- a/analysis/src/SharedTypes.ml +++ b/analysis/src/SharedTypes.ml @@ -367,9 +367,11 @@ module FileSet = Set.Make (String) type builtInCompletionModules = { arrayModulePath: string list; - listModulePath: string list; optionModulePath: string list; stringModulePath: string list; + intModulePath: string list; + floatModulePath: string list; + promiseModulePath: string list; } type package = { From a4bf4601b3fd4b755022cc29b1f21a71429c4af2 Mon Sep 17 00:00:00 2001 From: Gabriel Nordeborn Date: Sat, 29 Oct 2022 18:22:14 +0200 Subject: [PATCH 3/4] change target package name to new ReScriptStdLib --- analysis/src/Packages.ml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/analysis/src/Packages.ml b/analysis/src/Packages.ml index 8848fd9e0..ecc4a4ba4 100644 --- a/analysis/src/Packages.ml +++ b/analysis/src/Packages.ml @@ -91,7 +91,7 @@ let newBsPackage ~rootPath = builtInCompletionModules = (if opens - |> List.find_opt (fun opn -> opn = "ReScriptJs") + |> List.find_opt (fun opn -> opn = "ReScriptStdLib") |> Option.is_some then { From 39d7010061d8e7832d4e53a3a2e862ccfa9f2a32 Mon Sep 17 00:00:00 2001 From: Gabriel Nordeborn Date: Sat, 29 Oct 2022 18:39:23 +0200 Subject: [PATCH 4/4] look in appropriate opens location --- analysis/src/Packages.ml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/analysis/src/Packages.ml b/analysis/src/Packages.ml index d9028441f..2a4bd73bd 100644 --- a/analysis/src/Packages.ml +++ b/analysis/src/Packages.ml @@ -95,7 +95,7 @@ let newBsPackage ~rootPath = namespace; builtInCompletionModules = (if - opens + opens_from_bsc_flags |> List.find_opt (fun opn -> match opn with | ["ReScriptStdLib"] -> true