diff --git a/src/ppx2/Ppx_Unmonads.re b/src/ppx2/Ppx_Unmonads.re index d19c6cac..cf6f0b6e 100644 --- a/src/ppx2/Ppx_Unmonads.re +++ b/src/ppx2/Ppx_Unmonads.re @@ -115,21 +115,31 @@ let mapper = | Pexp_extension(({txt: ( "opt" | "opt_consume" | "try" | "try_wrap" - ) as txt, loc}, PStr([{pstr_desc: Pstr_eval({pexp_desc: Pexp_let(Nonrecursive, bindings, continuation)}, _attributes)}]))) => { - let (front, explanation) = switch (txt) { - | "opt" => ([%expr Monads.Option.bind], opt_explanation) - | "opt_consume" => ([%expr Monads.Option.consume], opt_consume_explanation) - | "try" => ([%expr Monads.Result.bind], "Sugar for the Result type") - | "try_wrap" => ([%expr Monads.Result.map], "Sugar for the Result type - auto-wraps in `Ok()`") - | _ => assert(false) - }; + ) as txt}, PStr([{pstr_desc: Pstr_eval({pexp_desc: Pexp_let(Nonrecursive, bindings, continuation)}, _attributes)}]))) => { let (pat, expr) = process_bindings(bindings); - Ast_helper.Exp.attr( - [%expr [%e front]([%e mapper.expr(mapper, expr)], ~f=([%p pat]) => [%e mapper.expr(mapper, continuation)])], - ({txt: "ocaml.explanation", loc}, PStr([ - Ast_helper.Str.eval(Ast_helper.Exp.constant(Pconst_string(explanation, None))) - ])) - ) + switch (txt) { + | "opt" => + [%expr [%e [%expr switch [%e mapper.expr(mapper, expr)] { + | None => None + | Some([%p pat]) => [%e mapper.expr(mapper, continuation)] + }]]] + | "opt_consume" => + [%expr [%e [%expr switch [%e mapper.expr(mapper, expr)] { + | None => () + | Some([%p pat]) => [%e mapper.expr(mapper, continuation)] + }]]] + | "try" => + [%expr [%e [%expr switch [%e mapper.expr(mapper, expr)] { + | Error(e) => Error(e) + | Ok([%p pat]) => [%e mapper.expr(mapper, continuation)] + }]]] + | "try_wrap" => + [%expr [%e [%expr switch [%e mapper.expr(mapper, expr)] { + | Error(e) => Error(e) + | Ok([%p pat]) => Ok([%e mapper.expr(mapper, continuation)]) + }]]] + | _ => assert(false) + }; } | _ => Ast_mapper.default_mapper.expr(mapper, expr) } diff --git a/src/rescript-editor-support/BuildSystem.re b/src/rescript-editor-support/BuildSystem.re index e5c5f87e..3e768d62 100644 --- a/src/rescript-editor-support/BuildSystem.re +++ b/src/rescript-editor-support/BuildSystem.re @@ -30,7 +30,8 @@ let getBsPlatformDir = rootPath => { let getCompiledBase = root => { Files.ifExists(root /+ "lib" /+ "bs"); }; -let getStdlib = base => { - let%try_wrap bsPlatformDir = getBsPlatformDir(base); - bsPlatformDir /+ "lib" /+ "ocaml"; -}; +let getStdlib = base => + switch (getBsPlatformDir(base)) { + | Error(e) => Error(e) + | Ok(bsPlatformDir) => Ok(bsPlatformDir /+ "lib" /+ "ocaml") + }; diff --git a/src/rescript-editor-support/FindFiles.re b/src/rescript-editor-support/FindFiles.re index 3bdbdc42..8a63e71b 100644 --- a/src/rescript-editor-support/FindFiles.re +++ b/src/rescript-editor-support/FindFiles.re @@ -299,36 +299,39 @@ let findDependencyFiles = (~debug, base, config) => { let namespace = getNamespace(inner); let directories = getSourceDirectories(~includeDev=false, loc, inner); - let%opt compiledBase = BuildSystem.getCompiledBase(loc); /* |! "No compiled base found"; */ - if (debug) { - Log.log("Compiled base: " ++ compiledBase); + switch (BuildSystem.getCompiledBase(loc)) { + | None => None + | Some(compiledBase) => + if (debug) { + Log.log("Compiled base: " ++ compiledBase); + }; + let compiledDirectories = + directories |> List.map(Files.fileConcat(compiledBase)); + let compiledDirectories = + namespace == None + ? compiledDirectories + : [compiledBase, ...compiledDirectories]; + let files = + findProjectFiles( + ~debug, + namespace, + loc, + directories, + compiledBase, + ); + /* let files = + switch (namespace) { + | None => + files + | Some(namespace) => + files + |> List.map(((name, paths)) => + (namespace ++ "-" ++ name, paths) + ) + }; */ + Some((compiledDirectories, files)); }; - let compiledDirectories = - directories |> List.map(Files.fileConcat(compiledBase)); - let compiledDirectories = - namespace == None - ? compiledDirectories - : [compiledBase, ...compiledDirectories]; - let files = - findProjectFiles( - ~debug, - namespace, - loc, - directories, - compiledBase, - ); - /* let files = - switch (namespace) { - | None => - files - | Some(namespace) => - files - |> List.map(((name, paths)) => - (namespace ++ "-" ++ name, paths) - ) - }; */ - Some((compiledDirectories, files)); | None => None }; } @@ -343,8 +346,11 @@ let findDependencyFiles = (~debug, base, config) => { }); let (directories, files) = List.split(depFiles); let files = List.concat(files); - let%try stdlibDirectory = BuildSystem.getStdlib(base); - let directories = [stdlibDirectory, ...List.concat(directories)]; - let results = files @ collectFiles(stdlibDirectory); - Ok((directories, results)); + switch (BuildSystem.getStdlib(base)) { + | Error(e) => Error(e) + | Ok(stdlibDirectory) => + let directories = [stdlibDirectory, ...List.concat(directories)]; + let results = files @ collectFiles(stdlibDirectory); + Ok((directories, results)); + }; };