Skip to content
This repository was archived by the owner on Apr 24, 2021. It is now read-only.

Commit 8e9f0fb

Browse files
authored
Convert everything over to unmonad (#91)
* Convert Hover to unmonad * Convert MessengerHandlers to unmonad * Convert NotificationHandlers to unmonad * Convert Packages to unmonad * Convert Process_406 to unmonad * Convert ProcessExtra to unmonad * Convert Protocol to unmonad * Convert NewCompletions to unmonad * Convert Query to unmonad * Convert References to unmonad * Convert RescriptEditorSupport.re to unmonad * Convert State over to unmonad
1 parent 6b4aa74 commit 8e9f0fb

12 files changed

+1359
-933
lines changed

src/rescript-editor-support/Hover.re

+76-42
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)