diff --git a/CHANGELOG.md b/CHANGELOG.md index 4702c132e..3c331f049 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,10 @@ ## master +#### :nail_care: Polish + +- Resolve module aliases in hover. https://github.com/rescript-lang/rescript-vscode/pull/820 + ## 1.20.0 #### :rocket: New Feature diff --git a/analysis/src/Hover.ml b/analysis/src/Hover.ml index d0df179a9..1eced0f36 100644 --- a/analysis/src/Hover.ml +++ b/analysis/src/Hover.ml @@ -27,7 +27,7 @@ let showModuleTopLevel ~docstring ~isType ~name (topLevel : Module.item list) = in Some (doc ^ full) -let rec showModule ~docstring ~(file : File.t) ~name +let rec showModule ~docstring ~(file : File.t) ~package ~name (declared : Module.t Declared.t option) = match declared with | None -> @@ -41,10 +41,12 @@ let rec showModule ~docstring ~(file : File.t) ~name showModuleTopLevel ~docstring ~isType ~name items | Some ({item = Constraint (_moduleItem, moduleTypeItem)} as declared) -> (* show the interface *) - showModule ~docstring ~file ~name + showModule ~docstring ~file ~name ~package (Some {declared with item = moduleTypeItem}) - | Some {item = Ident path} -> - Some ("Unable to resolve module reference " ^ Path.name path) + | Some ({item = Ident path} as declared) -> ( + match References.resolveModuleReference ~file ~package declared with + | None -> Some ("Unable to resolve module reference " ^ Path.name path) + | Some (_, declared) -> showModule ~docstring ~file ~name ~package declared) type extractedType = { name: string; @@ -179,7 +181,7 @@ let newHover ~full:{file; package} ~supportsMarkdownLinks locItem = | Some d -> (d.name.txt, d.docstring) | None -> (file.moduleName, file.structure.docstring) in - showModule ~docstring ~name ~file declared)) + showModule ~docstring ~name ~file declared ~package)) | LModule (GlobalReference (moduleName, path, tip)) -> ( match ProcessCmt.fileForModule ~package moduleName with | None -> None @@ -199,14 +201,14 @@ let newHover ~full:{file; package} ~supportsMarkdownLinks locItem = | Some d -> (d.name.txt, d.docstring) | None -> (file.moduleName, file.structure.docstring) in - showModule ~docstring ~name ~file declared)))) + showModule ~docstring ~name ~file ~package declared)))) | LModule NotFound -> None | TopLevelModule name -> ( match ProcessCmt.fileForModule ~package name with | None -> None | Some file -> showModule ~docstring:file.structure.docstring ~name:file.moduleName ~file - None) + ~package None) | Typed (_, _, Definition (_, (Field _ | Constructor _))) -> None | Constant t -> Some diff --git a/analysis/tests/src/Hover.res b/analysis/tests/src/Hover.res index 0657759a4..bbfff37a5 100644 --- a/analysis/tests/src/Hover.res +++ b/analysis/tests/src/Hover.res @@ -260,3 +260,6 @@ let coolVariant = CoolVariant // switch x { | {someField} => someField } // ^hov + +module Arr = Belt.Array +// ^hov \ No newline at end of file diff --git a/analysis/tests/src/expected/Hover.res.txt b/analysis/tests/src/expected/Hover.res.txt index e56cbe0f2..8503e0b48 100644 --- a/analysis/tests/src/expected/Hover.res.txt +++ b/analysis/tests/src/expected/Hover.res.txt @@ -261,3 +261,6 @@ ContextPath Value[x] Path x {"contents": {"kind": "markdown", "value": "```rescript\nbool\n```"}} +Hover src/Hover.res 263:8 +{"contents": {"kind": "markdown", "value": "\n [`Belt.Array`]()\n\n **mutable array**: Utilities functions\n\n```rescript\nmodule Array: {\n module Id\n module Array\n module SortArray\n module MutableQueue\n module MutableStack\n module List\n module Range\n module Set\n module Map\n module MutableSet\n module MutableMap\n module HashSet\n module HashMap\n module Option\n module Result\n module Int\n module Float\n}\n```"}} +