WSL+VSCode下ocaml-lsp-server报'unbound module'错误求助
WSL + VSCode OCaml Platform 模块识别问题
我用WSL搭配VSCode的Ocaml Platform扩展(运行ocaml-lsp-server)开发OCaml项目,项目能正常构建运行,但VSCode里大量模块(包括Core、Cmdliner等)都标红,提示unbound module错误。
查了很多论坛帖子,试过的解决方案都没用,怀疑是WSL环境特有的问题。
我已修改VSCode的.vscode/settings.json文件中的ocaml sandbox配置:
{ "ocaml.sandbox": { "kind": "custom", "template": "wsl opam exec --switch=4.12.0 --set-switch -- $prog $args" } }
默认配置为:
opam exec --switch=4.12.0 --set-switch -- $prog $args
添加wsl前缀是因为opam仅安装在WSL中,Windows系统未安装,不加的话会提示“opam未被识别”。修改后ocaml-lsp-server可正常运行并提供类型标注等功能,但仍无法识别大量模块,尽管项目构建完全正常。
我猜测ocamllsp未正确识别dune文件,以下是我的dune文件内容:
(library (name compiler) (libraries core cmdliner yojson) (inline_tests) (preprocess (pps ppx_jane ppx_expect))) ; makes subdirs not be their own module/library (include_subdirs unqualified)
以下是opam list的输出:
# Packages matching: installed # Name # Installed # Synopsis astring 0.8.5 OCaml的替代String模块 base v0.14.3 OCaml标准库的完整替代实现 base-bigarray base base-bytes base OCaml编译器自带的Bytes库 base-threads base base-unix base base_bigstring v0.14.0 基于[Bigarray]的String类型,用于I/O和C绑定场景 base_quickcheck v0.14.1 随机测试框架,兼容Base库 bin_prot v0.14.1 二进制协议生成器 camlp-streams 5.0.1 配合Camlp4和Camlp5使用的Stream和Genlex库 cmdliner 1.2.0 OCaml命令行接口的声明式定义工具 core v0.14.1 工业级OCaml标准库替代方案 core_kernel v0.14.2 工业级OCaml标准库核心替代方案 cppo 1.6.9 OCaml版代码预处理器(类似cpp) csexp 1.5.2 规范形式S表达式的解析与打印库 dot-merlin-reader 4.5 读取merlin的配置文件 dune 3.13.0 快速、可移植、 opiniated 的构建系统 dune-build-info 3.13.0 将构建信息嵌入可执行文件 dune-configurator 3.13.0 用于收集系统配置的辅助库 either 1.0.0 兼容性Either模块 fieldslib v0.14.0 语法扩展,用于定义表示记录字段的一等值 fix 20230505 用于记忆化、递归等场景的算法构建块 fpath 0.7.3 OCaml的文件系统路径库 jane-street-headers v0.14.0 Jane Street的C头文件 jst-config v0.14.1 Jane Street库的编译时配置 lambda-term 3.3.2 OCaml的终端操作库 logs 0.7.0 OCaml的日志基础设施 lwt 5.7.0 异步Promise与事件驱动I/O库 lwt_react 1.2.0 配合Lwt使用React的辅助库 menhir 20231231 LR(1)解析器生成器 menhirCST 20231231 Menhir生成的解析器的运行时支持库 menhirLib 20231231 Menhir生成的解析器的运行时支持库 menhirSdk 20231231 与Menhir相关的辅助工具的编译时库 merlin 4.7-412 编辑器辅助工具,在Vim中提供补全、类型提示和源码浏览 mew 0.1.0 模态编辑工具 mew_vi 0.5.0 模态编辑工具的VI解释器 num 1.5 遗留的任意精度整数和有理数库 ocaml 4.12.0 OCaml编译器(虚拟包) ocaml-base-compiler 4.12.0 官方发布版4.12.0 ocaml-compiler-libs v0.12.4 重新打包的OCaml编译器库 ocaml-config 2 OCaml Switch配置 ocaml-lsp-server 1.9.0 固定版本1.9.0 ocaml-options-vanilla 1 确保OCaml编译时无特殊选项 ocaml-version 3.6.4 操作、解析和生成OCaml编译器版本字符串 ocamlbuild 0.14.3 OCaml构建系统,自带规则可轻松构建大多数OCaml项目 ocamlfind 1.9.6 OCaml库管理器 ocamlformat 0.26.1 OCaml代码自动格式化工具 ocamlformat-lib 0.26.1 OCaml代码格式化库 ocamlformat-rpc-lib 0.19.0 OCaml代码自动格式化工具(RPC模式) ocp-indent 1.8.1 OCaml代码简单缩进工具 ocplib-endian 1.2 优化的从字符串和大数组读写int16/32/64的函数 octavius 1.2.2 Ocamldoc注释语法解析器 parsexp v0.14.2 S表达式解析库 pp 1.2.0 漂亮打印库 ppx_assert v0.14.0 类似Assert的扩展节点,失败时抛出有用错误 ppx_base v0.14.0 基础ppx重写器集合 ppx_bench v0.14.1 OCaml代码中编写内联基准测试的语法扩展 ppx_bin_prot v0.14.0 从类型生成bin_prot读写器 ppx_cold v0.14.0 将[@cold]扩展为[@inline never][@specialise never][@local never] ppx_compare v0.14.0 从类型生成比较函数 ppx_custom_printf v0.14.1 用于用户定义字符串转换的printf风格格式字符串 ppx_derivers 1.2.1 共享的[@@deriving]插件注册表 ppx_enumerate v0.14.0 生成有限类型的所有值的列表 ppx_expect v0.14.2 OCaml的Cram风格测试框架 ppx_fields_conv v0.14.2 生成OCaml记录的访问器和迭代函数 ppx_fixed_literal v0.14.0 定点字面量的简化表示法 ppx_hash v0.14.0 从类型表达式生成哈希函数的ppx重写器 ppx_here v0.14.0 将[%here]扩展为其所在位置 ppx_inline_test v0.14.1 OCaml代码中编写内联测试的语法扩展 ppx_jane v0.14.0 Jane Street标准ppx重写器 ppx_js_style v0.14.1 Jane Street包的代码风格检查器 ppx_let v0.14.0 单子式let绑定 ppx_module_timer v0.14.0 记录顶级模块启动时间的ppx重写器 ppx_optcomp v0.14.3 OCaml的可选编译工具 ppx_optional v0.14.0 扁平选项的模式匹配 ppx_pipebang v0.14.0 内联反向应用操作符`|>`和`|!`的ppx重写器 ppx_sexp_conv v0.14.3 [@@deriving]插件,生成S表达式转换函数 ppx_sexp_message v0.14.1 简化构建S表达式的ppx重写器 ppx_sexp_value v0.14.0 简化从OCaml值构建S表达式的ppx重写器 ppx_stable v0.14.1 稳定类型转换生成器 ppx_string v0.14.1 字符串插值的ppx扩展 ppx_typerep_conv v0.14.2 从类型声明生成运行时类型 ppx_variants_conv v0.14.2 生成OCaml变体类型的访问器和迭代函数 ppx_yojson_conv_lib v0.15.0 ppx_yojson_conv的运行时库 ppxlib 0.25.1 ppx重写器的标准库 re 1.11.0 OCaml的正则表达式库 react 1.2.2 OCaml的声明式事件和信号库 result 1.5 兼容性Result模块 seq base OCaml标准迭代器类型的兼容性包(从OCaml 4.07开始) sexplib v0.14.0 OCaml值与S表达式之间的序列化库 sexplib0 v0.14.0 包含S表达式定义和一些基础转换的库 spawn v0.15.1 子进程生成库 splittable_random v0.14.0 可拆分为独立流的伪随机数生成器 stdio v0.14.0 OCaml的标准IO库 stdlib-shims 0.3.0 将新标准库特性向后移植到旧编译器 time_now v0.14.0 报告当前时间 timezone v0.14.0 时区处理库 topkg 1.0.7 OCaml软件过渡打包工具 trie 1.0.0 严格不纯的前缀树库 typerep v0.14.0 运行时类型库 uchar 0.0.2 OCaml Uchar模块的兼容性库 utop 2.13.1 OCaml通用顶层环境 uucp 15.0.0 OCaml的Unicode字符属性库 uuseg 15.0.0 OCaml的Unicode文本分割库 uutf 1.0.3 非阻塞流式Unicode编解码器 variantslib v0.14.0 Jane Street Core库的一部分 xdg 3.13.0 XDG基础目录规范实现 yojson 2.1.2 JSON格式的优化解析与打印库 zed 3.2.3 文本编辑的抽象引擎
内容的提问来源于stack exchange,提问作者Aaron Gostein
相关产品推荐
相关产品推荐

