@@ -2,12 +2,19 @@ let digConstructor = (~env, ~getModule, path) => {
22 switch (Query . resolveFromCompilerPath(~env, ~getModule, path)) {
33 | ` Not_found => None
44 | ` Stamp (stamp ) =>
5- let %opt t = Hashtbl.find_opt(env.file.stamps.types, stamp);
6- Some ((env , t ));
5+ switch (Hashtbl . find_opt(env. file. stamps. types, stamp)) {
6+ | None => None
7+ | Some (t ) => Some ((env, t))
8+ }
79 | ` Exported (env , name ) =>
8- let %opt stamp = Hashtbl.find_opt(env.exported.types, name);
9- let %opt t = Hashtbl.find_opt(env.file.stamps.types, stamp);
10- Some ((env , t ));
10+ switch (Hashtbl . find_opt(env. exported. types, name)) {
11+ | None => None
12+ | Some (stamp ) =>
13+ switch (Hashtbl . find_opt(env. file. stamps. types, stamp)) {
14+ | None => None
15+ | Some (t ) => Some ((env, t))
16+ }
17+ }
1118 | _ => None
1219 };
1320};
@@ -67,38 +74,60 @@ let newHover = (~file: SharedTypes.file, ~getModule, loc) => {
6774 Some (codeBlock(typeDef));
6875 | LModule (Definition (stamp , _tip ))
6976 | LModule (LocalReference (stamp , _tip )) =>
70- let %opt md = Hashtbl.find_opt(file.stamps.modules, stamp);
71- let %opt (file, declared) =
72- References . resolveModuleReference (~file , ~getModule , md );
73- let (name , docstring ) =
74- switch (declared) {
75- | Some (d ) => (d. name. txt, d. docstring)
76- | None => (file. moduleName, file. contents. docstring)
77- };
78- showModule(~docstring, ~name, ~file, declared);
77+ switch (Hashtbl . find_opt(file. stamps. modules, stamp)) {
78+ | None => None
79+ | Some (md ) =>
80+ switch (References . resolveModuleReference(~file, ~getModule, md)) {
81+ | None => None
82+ | Some ((file , declared )) =>
83+ let (name , docstring ) =
84+ switch (declared) {
85+ | Some (d ) => (d. name. txt, d. docstring)
86+ | None => (file. moduleName, file. contents. docstring)
87+ };
88+ showModule(~docstring, ~name, ~file, declared);
89+ }
90+ }
7991 | LModule (GlobalReference (moduleName , path , tip )) =>
80- let %opt file = getModule(moduleName);
81- let env = Query . fileEnv(file);
82- let %opt (env, name) = Query.resolvePath(~env, ~path, ~getModule);
83- let %opt stamp = Query.exportedForTip(~env, name, tip);
84- let %opt md = Hashtbl.find_opt(file.stamps.modules, stamp);
85- let %opt (file, declared) =
86- References . resolveModuleReference (~file , ~getModule , md );
87- let (name , docstring ) =
88- switch (declared) {
89- | Some (d ) => (d. name. txt, d. docstring)
90- | None => (file. moduleName, file. contents. docstring)
92+ switch (getModule(moduleName)) {
93+ | None => None
94+ | Some (file ) =>
95+ let env = Query . fileEnv(file);
96+ switch (Query . resolvePath(~env, ~path, ~getModule)) {
97+ | None => None
98+ | Some ((env , name )) =>
99+ switch (Query . exportedForTip(~env, name, tip)) {
100+ | None => None
101+ | Some (stamp ) =>
102+ switch (Hashtbl . find_opt(file. stamps. modules, stamp)) {
103+ | None => None
104+ | Some (md ) =>
105+ switch (References . resolveModuleReference(~file, ~getModule, md)) {
106+ | None => None
107+ | Some ((file , declared )) =>
108+ let (name , docstring ) =
109+ switch (declared) {
110+ | Some (d ) => (d. name. txt, d. docstring)
111+ | None => (file. moduleName, file. contents. docstring)
112+ };
113+ showModule(~docstring, ~name, ~file, declared);
114+ }
115+ }
116+ }
91117 };
92- showModule(~docstring , ~name , ~file , declared) ;
118+ }
93119 | LModule (NotFound ) => None
94120 | TopLevelModule (name ) =>
95- let %opt file = getModule(name);
96- showModule (
97- ~docstring =file .contents .docstring ,
98- ~name =file .moduleName ,
99- ~file ,
100- None ,
101- );
121+ switch (getModule(name)) {
122+ | None => None
123+ | Some (file ) =>
124+ showModule(
125+ ~docstring= file. contents. docstring,
126+ ~name= file. moduleName,
127+ ~file,
128+ None ,
129+ )
130+ }
102131 | Typed (_ , Definition (_ , Field (_ ) | Constructor (_ ))) => None
103132 | Constant (t ) =>
104133 Some (
@@ -117,15 +146,20 @@ let newHover = (~file: SharedTypes.file, ~getModule, loc) => {
117146 let typeString = codeBlock(typ |> Shared . typeToString);
118147 let extraTypeInfo = {
119148 let env = Query . fileEnv(file);
120- let %opt path = typ |> Shared.digConstructor;
121- let %opt (_env, {docstring, name: {txt}, item: {decl}}) =
122- digConstructor (~env , ~getModule , path );
123- let isUncurriedInternal =
124- Utils . startsWith(Path . name(path), "Js.Fn.arity" );
125- if (isUncurriedInternal) {
126- None ;
127- } else {
128- Some ((decl |> Shared . declToString(txt), docstring));
149+ switch (typ |> Shared . digConstructor) {
150+ | None => None
151+ | Some (path ) =>
152+ switch (digConstructor(~env, ~getModule, path)) {
153+ | None => None
154+ | Some ((_env , {docstring, name: {txt}, item: {decl}})) =>
155+ let isUncurriedInternal =
156+ Utils . startsWith(Path . name(path), "Js.Fn.arity" );
157+ if (isUncurriedInternal) {
158+ None ;
159+ } else {
160+ Some ((decl |> Shared . declToString(txt), docstring));
161+ };
162+ }
129163 };
130164 };
131165 let (typeString , docstring ) =
0 commit comments