Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 33 additions & 10 deletions analysis/src/BuildSystem.ml
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,42 @@ let namespacedName namespace name =

let ( /+ ) = Filename.concat

(*
Here is the real problem:
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@zth I would use an environment variable here to avoid breaking all the analysis commands.
Thoughts?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think that's fine, we use env variables for other stuff as well. So go for it!

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, ready for review.


For pnpm it needs to figure out

"/Users/nojaf/Projects/test-stdlib/node_modules/.pnpm/@[email protected]/node_modules/@rescript/runtime"
*)

let getRuntimeDir rootPath =
match !Cfg.isDocGenFromCompiler with
| false -> (
let result =
ModuleResolution.resolveNodeModulePath ~startPath:rootPath
"@rescript/runtime"
in
match result with
| Some path -> Some path
| None ->
let message = "@rescript/runtime could not be found" in
Log.log message;
None)
(* First check RESCRIPT_RUNTIME environment variable, like bsc does *)
match Sys.getenv_opt "RESCRIPT_RUNTIME" with
| Some envPath ->
if Debug.verbose () then
Printf.printf "[getRuntimeDir] Using RESCRIPT_RUNTIME=%s\n" envPath;
Some envPath
| None -> (
let result =
ModuleResolution.resolveNodeModulePath ~startPath:rootPath
"@rescript/runtime"
in
match result with
| Some path ->
if Debug.verbose () then
Printf.printf "[getRuntimeDir] Resolved via node_modules: %s\n" path;
Some path
| None ->
let message = "@rescript/runtime could not be found" in
Log.log message;
if Debug.verbose () then
Printf.printf
"[getRuntimeDir] Failed to resolve @rescript/runtime from \
rootPath=%s\n"
rootPath;
None))
| true -> Some rootPath

let getLibBs path = Files.ifExists (path /+ "lib" /+ "bs")
Expand Down
7 changes: 6 additions & 1 deletion analysis/src/Hover.ml
Original file line number Diff line number Diff line change
Expand Up @@ -275,7 +275,12 @@ let newHover ~full:{file; package} ~supportsMarkdownLinks locItem =
| Some file ->
showModule ~docstring:file.structure.docstring ~name:file.moduleName ~file
~package None)
| Typed (_, _, Definition (_, (Field _ | Constructor _))) -> None
| Typed (_, t, Definition (_, (Field _ | Constructor _))) ->
let fromType typ =
hoverWithExpandedTypes ~file ~package ~supportsMarkdownLinks typ
in
let t = Shared.dig t in
Some (fromType t)
| Constant t ->
Some
(Markdown.codeBlock
Expand Down
3 changes: 3 additions & 0 deletions tests/analysis_tests/tests/src/Hover.res
Original file line number Diff line number Diff line change
Expand Up @@ -281,3 +281,6 @@ module Arr = Belt.Array

type aliased = variant
// ^hov

let _ = String.length("meh")
// ^hov
3 changes: 3 additions & 0 deletions tests/analysis_tests/tests/src/expected/Hover.res.txt
Original file line number Diff line number Diff line change
Expand Up @@ -348,3 +348,6 @@ Hover src/Hover.res 278:8
Hover src/Hover.res 281:6
{"contents": {"kind": "markdown", "value": "```rescript\ntype aliased = variant\n```\n\n---\n\n```\n \n```\n```rescript\ntype variant = CoolVariant | OtherCoolVariant\n```\nGo to: [Type definition](command:rescript-vscode.go_to_location?%5B%22Hover.res%22%2C251%2C0%5D)\n"}}

Hover src/Hover.res 284:10
{"contents": {"kind": "markdown", "value": "\n\nFunctions for interacting with JavaScript strings.\nSee: [`String`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String).\n\n---\n\n```\n \n```\n```rescript\nmodule Stdlib_String: {\n type t = string\n let make: 'a => string\n let fromCharCode: int => string\n let fromCharCodeMany: array<int> => string\n let fromCodePoint: int => string\n let fromCodePointMany: array<int> => string\n let equal: (string, string) => bool\n let compare: (string, string) => Ordering.t\n let length: string => int\n let get: (string, int) => option<string>\n let getUnsafe: (string, int) => string\n let charAt: (string, int) => string\n let charCodeAt: (string, int) => option<int>\n let charCodeAtUnsafe: (string, int) => int\n let codePointAt: (string, int) => option<int>\n let concat: (string, string) => string\n let concatMany: (string, array<string>) => string\n let endsWith: (string, string) => bool\n let endsWithFrom: (string, string, int) => bool\n let includes: (string, string) => bool\n let includesFrom: (string, string, int) => bool\n let indexOf: (string, string) => int\n let indexOfOpt: (string, string) => option<int>\n let indexOfFrom: (string, string, int) => int\n let lastIndexOf: (string, string) => int\n let lastIndexOfOpt: (string, string) => option<int>\n let lastIndexOfFrom: (string, string, int) => int\n let match: (string, RegExp.t) => option<\\\"RegExp.Result\".t>\n let normalize: string => string\n type normalizeForm = [#NFC | #NFD | #NFKC | #NFKD]\n let normalizeByForm: (string, normalizeForm) => string\n let repeat: (string, int) => string\n let replace: (string, string, string) => string\n let replaceRegExp: (string, RegExp.t, string) => string\n let replaceAll: (string, string, string) => string\n let replaceAllRegExp: (string, RegExp.t, string) => string\n let unsafeReplaceRegExpBy0: (\n string,\n RegExp.t,\n (~match: string, ~offset: int, ~input: string) => string,\n) => string\n let unsafeReplaceRegExpBy1: (\n string,\n RegExp.t,\n (\n ~match: string,\n ~group1: string,\n ~offset: int,\n ~input: string,\n ) => string,\n) => string\n let unsafeReplaceRegExpBy2: (\n string,\n RegExp.t,\n (\n ~match: string,\n ~group1: string,\n ~group2: string,\n ~offset: int,\n ~input: string,\n ) => string,\n) => string\n let unsafeReplaceRegExpBy3: (\n string,\n RegExp.t,\n (\n ~match: string,\n ~group1: string,\n ~group2: string,\n ~group3: string,\n ~offset: int,\n ~input: string,\n ) => string,\n) => string\n let replaceRegExpBy0Unsafe: (\n string,\n RegExp.t,\n (~match: string, ~offset: int, ~input: string) => string,\n) => string\n let replaceRegExpBy1Unsafe: (\n string,\n RegExp.t,\n (\n ~match: string,\n ~group1: string,\n ~offset: int,\n ~input: string,\n ) => string,\n) => string\n let replaceRegExpBy2Unsafe: (\n string,\n RegExp.t,\n (\n ~match: string,\n ~group1: string,\n ~group2: string,\n ~offset: int,\n ~input: string,\n ) => string,\n) => string\n let replaceRegExpBy3Unsafe: (\n string,\n RegExp.t,\n (\n ~match: string,\n ~group1: string,\n ~group2: string,\n ~group3: string,\n ~offset: int,\n ~input: string,\n ) => string,\n) => string\n let search: (string, RegExp.t) => int\n let searchOpt: (string, RegExp.t) => option<int>\n let isEmpty: string => bool\n let capitalize: string => string\n let slice: (string, ~start: int, ~end: int=?) => string\n let sliceToEnd: (string, ~start: int) => string\n let split: (string, string) => array<string>\n let splitAtMost: (string, string, ~limit: int) => array<string>\n let splitByRegExp: (string, RegExp.t) => array<option<string>>\n let splitByRegExpAtMost: (string, RegExp.t, ~limit: int) => array<option<string>>\n let startsWith: (string, string) => bool\n let startsWithFrom: (string, string, int) => bool\n let substring: (string, ~start: int, ~end: int=?) => string\n let substringToEnd: (string, ~start: int) => string\n let toLowerCase: string => string\n let toLocaleLowerCase: string => string\n let toUpperCase: string => string\n let toLocaleUpperCase: string => string\n let trim: string => string\n let trimStart: string => string\n let trimEnd: string => string\n let padStart: (string, int, string) => string\n let padEnd: (string, int, string) => string\n let localeCompare: (string, string) => float\n let ignore: string => unit\n let getSymbolUnsafe: (string, Symbol.t) => 'a\n}\n```"}}

Loading