开发工具代码编辑器桌面应用【免费下载链接】oni2Native, lightweight modal code editor项目地址https://gitcode.com/gh_mirrors/on/oni2点击查看免费下载reason-vscodejaredly.reason-vscode是一个随 Onivim 2 一起打包发布的 VS Code 兼容扩展其核心是一个用 Reason 编写并原生编译的语言服务器language server后端为 Reason、OCaml 与 Reason Lisp 三种语言提供悬停提示、自动补全、跳转定义、重命名、格式化等完整的 IDE 能力。本文以 extensions/reason-vscode/Readme.md 为骨架结合 package.json 的配置声明与 src/index.js 的客户端实现逐项讲解该扩展的功能、全部配置项、语言服务器启动逻辑与内置命令并说明它在 Onivim 2 扩展体系中的定位帮助你理解并上手这套 Reason/OCaml 开发环境。一、扩展概览从 vscode-reasonml 到原生编译的语言服务器原文档开宗明义该扩展基于vscode-reasonml但语言服务器后端完全用 Reason 编写并原生编译。也就是说它不像传统方案那样依赖 Node.js 实现的解析器或独立的二进制桥接而是把类型检查、补全、格式化等逻辑集中在一个原生语言服务器进程里通过 LSPLanguage Server Protocol与编辑器通信。在 Onivim 2 中这个扩展被当作内置bundled扩展随仓库分发src/Feature/Extensions/Model.re的Internal.filterBundled函数src/Feature/Extensions/Model.re明确把jaredly.reason-vscode列入打包过滤名单与vscode.typescript-language-features、vscode.css-language-features等一并视为开箱即用的内置扩展。因此在使用 Onivim 2 打开 Reason/OCaml 项目时该扩展会自动参与语言服务。扩展清单来自 package.json名称reason-vscode显示名Reason / OCaml LSP版本1.7.8发布者jaredly激活事件onLanguage:reason、onLanguage:ocaml、onLanguage:reason_lisp依赖vscode-languageclient^4.1.3、vscode-languageserver-types^3.14.0二、核心功能清单原文档列出的功能可归纳为“导航 重构 格式化 自动构建”四类且都有对应的 LSP 能力支撑类别功能说明代码洞察悬停提示hover goodness悬停显示符号的类型与定义信息代码洞察自动补全autocomplete基于类型上下文的成员补全代码洞察函数签名帮助调用时提示参数签名导航跳转到定义 / 预览定义jump-to-definition 与 preview-definition导航查找所有引用Find all references导航文档大纲 / 符号搜索document outline / symbol search代码透镜文件依赖列表在文件顶部显示其依赖dependencies_codelens默认开启代码透镜open使用分析显示从某个open中实际用到了哪些值opens_codelens默认开启代码透镜每个顶层值的类型每个顶层值的类型透镜per_value_codelens默认关闭重构高亮所有用法highlight all usages of a variable重构重命名变量rename a variable格式化格式化选中区format selection格式化格式化文档format document构建文件变更时自动运行 bsb / duneauto-run bsb / dune on file changeautoRebuild默认开启上面的截图正是这些能力的实拍悬停提示框给出了pathOfModuleOpen的完整定义与来源文件路径输入Belt.Array.后弹出成员补全列表并显示eqU的类型签名PROBLEMS 面板则展示了 Unbound value fail、Unbound module Belt.Array.List 等类型诊断。三、语言注册与语法高亮三种语言、四套语法扩展通过contributes.languages注册了三种语言package.json语言 ID别名文件扩展名语言配置reasonReason.re、.reireason.configuration.jsonocamlOCaml.ml、.mliocaml.configuration.jsonreason_lispReason Lisp.rel、.relireason-lisp.configuration.json语法高亮方面声明了四套 TextMate 语法package.jsonocaml.jsonscope 为source.ocamlreason.jsonscope 为source.reason约 2200 行规则覆盖属性、模式、表达式等完整语法结构reason-lisp.jsonscope 为source.reason_lispreason-markdown-codeblock.json注入 MarkdowninjectTo: text.html.markdown使 Markdown 中的 Reason 代码块也能正确高亮此外客户端在激活时还通过vscode.languages.setLanguageConfiguration为 Reason 注册了onEnterRulessrc/index.js实现多行注释的自动续写输入/**或/*!换行自动补**/前自动缩进等这些规则无法通过独立的 language-configuration.json 表达因此由代码动态注册。四、配置参考reason_language_server.*全部配置项原文档强调所有配置都以reason_language_server.为前缀。综合 Readme.md 与 package.json 中声明的完整配置属性整理如下配置键前缀reason_language_server.类型默认值说明format_widthnumber80格式化宽度控制 refmt / ocamlformat 的换行宽度per_value_codelensbooleanfalse是否在每个顶层值上以 code lens 显示类型dependencies_codelensbooleantrue是否在文件顶部列出其依赖opens_codelensbooleantrue是否显示从open中实际使用的值autoRebuildbooleantrue保存文件时自动运行 bsb构建项目locationstring—自定义语言服务器二进制路径主要用于调试refmtstring—自定义 refmt 二进制路径lispRefmtstring—reason-lisp 的 lispRefmt 二进制路径mlfmtstring—.ml/.mli格式化器路径仅出现在 package.json 中原文档未列出reloadOnChangebooleanfalse监视语言服务器二进制文件变化并自动重启开发语言服务器时使用show_debug_errorsbooleanfalse将语言服务器 stderr 输出到 VS Code 的 OUTPUT 面板show_module_path_on_hoverbooleanfalse悬停时显示模块路径仅出现在 package.json 中原文档未列出build_system_override_by_rootobject—按项目根目录uri 格式如file:///some/path/here覆盖构建系统探测结果其中build_system_override_by_root的值必须是如下枚举之一package.jsonbsb:4.0.7 dune:esy dune:opam:/abs/path/to/switch bsb-native:4.0.7:js bsb-native:4.0.7:bytecode bsb-native:4.0.7:native原文档特别提醒该配置仅当构建系统自动探测失效时才需要指定例如同一项目里同时存在bsconfig.json和dune文件时可以手动指定走 bsb 还是 dune。五、调试配置语言服务器开发者的工具集原文档指出下面这组配置对“正在开发语言服务器”的人最有用.location为语言服务器指定自定义二进制位置。客户端在 src/index.js 的getLocation中先对它做路径校验相对路径会拼上工作区根目录路径不存在则返回 null再进入后续的自动探测逻辑。.refmt/.lispRefmt为 refmt 与 reason-lisp 的 refmt 指定自定义位置用于格式化链路。.reloadOnChange二进制更新时自动重启服务器。客户端通过startCheckingsrc/index.js以 500ms 间隔轮询二进制文件的mtime一旦晚于上次启动时间就触发restart()并弹出 DEBUG MODE: Will auto-restart the reason language server if it recompiles 提示——这是典型的“改完服务器代码重新编译后编辑器自动重载”的开发闭环。.show_debug_errors把语言服务器的 stderr 管道到 VS Code 的 OUTPUT 面板。该开关控制RevealOutputChannelOn开启时设为Error出错自动弹出输出面板关闭时为Neversrc/index.js。六、语言服务器的启动与探测逻辑虽然原文档把扩展定位为“原生 Reason 语言服务器”客户端但仓库内的客户端实现src/index.js展示了一套更完整的探测优先级值得开发者了解首先读取并校验reason_language_server.location指定的 RLS 二进制路径若工作区是 esy 项目目录下存在dune、dune-project、*.opam或esy.lock见isEsyProject且环境中有 esy则通过esy -q sh -c echo #{opam/ocaml-lsp-server.bin}查询 esy 托管的ocamllsp二进制位置若 esy 中找不到则尝试which ocamllsp从 PATH 中寻找以上都失败时回退到第 1 步的 RLS 二进制reason_language_server.location。也就是说运行时优先使用 esy / opam 环境中的ocaml-lsp-server其次才回退到原生的 Reason 语言服务器。语言客户端本身通过vscode-languageclient建立documentSelector覆盖reason、ocaml、reason_lisp三种语言src/index.js同时注册了两个文件监听器**/bsconfig.json与**/.merlin——前者对应 bsb 工程后者对应 OCaml 的传统 merlin 配置任一变化都会触发配置同步配合autoRebuild实现保存即构建的体验。七、内置命令五个实用操作扩展通过contributes.commands注册了 5 个命令package.json并在 src/index.js 中实现命令 ID作用底层机制reason-language-server.restart重启语言服务器停止旧 LanguageClient 并重新getLocation启动同时reason_language_server.location配置变更或工作区根目录变化也会自动触发重启src/index.jsreason-language-server.show_ppxed_source显示当前文件的 ppx 展开后源码通过虚拟 schemeppxed-source的 TextDocumentContentProvider 向服务器发custom:reasonLanguageServer/showPpxedSource请求仅对 Reason / OCaml 文件有效reason-language-server.show_ast显示当前文件的抽象语法树AST通过虚拟 schemeast-source发custom:reasonLanguageServer/showAst请求reason-language-server.create_interface为实现文件创建 interface 文件.rei/.mli若 interface 文件已存在则拒绝执行否则发custom:reasonLanguageServer/createInterface请求reason-language-server.dump_file_data导出当前文件的语言服务器内部数据发custom:reasonLanguageServer/dumpFileData请求其中ppxed-source与ast-source两个虚拟文档会随文件保存自动刷新onDidSaveTextDocument触发 provider 变更事件见 src/index.js非常适合用来观察宏展开前后的代码形态。八、代码片段Reason 常用结构速写扩展为 Reason 语言提供了内置 snippetssnippets/snippets.json覆盖最常见的语法骨架let (block)let ${1:pattern} { ... };functionlet ${1:name} (${2:args}) $0;function (block)let ${1:f} (${2:args}) { ... };module (block)module ${1:M} { ... };switchswitch ${1:scrutinee} { | ${2:pattern} ... };这些片段以prefix触发如输入let可选择函数或块配合类型化的自动补全可以显著提升 Reason 代码的书写效率。九、版权与许可原文档声明Copyright © 2018 Jared Forsyth and contributors基于 MIT License 分发。仓库内对应许可证文件为 extensions/reason-vscode/LICENSE.txt需要注意的是 package.json 的license字段填写的是ISC以包元数据与仓库许可证文件的实际内容为准。结语reason-vscode 是 Onivim 2 中 Reason/OCaml 语言体验的基石它以“原生编译的语言服务器后端”为设计初衷通过reason_language_server.*一套配置即可控制格式化宽度、三类 code lens、自动构建与调试重载运行时又能智能地在 esy 的 ocaml-lsp-server 与自建 RLS 之间切换并提供了查看 ppx 展开、AST 等深度调试命令。无论你是在 Onivim 2 中编写.re/.rei/.ml/.mli还是想基于该客户端二次开发语言服务器都可以从 extensions/reason-vscode/src/index.js 与 package.json 入手找到完整的调用链与配置契约。赞分享开发工具代码编辑器桌面应用【免费下载链接】oni2Native, lightweight modal code editor项目地址https://gitcode.com/gh_mirrors/on/oni2点击查看免费下载相关推荐github1s 中的 OCaml 语言支持ocaml-web 扩展的语言功能解析与配置指南github1s 中的 OCaml 语言支持ocaml web 扩展的语言功能解析与配置指南 导读 ocaml web 是 github1s 仓库中为 OCa开发工具前端NorthCinder 订单自动化完整指南把订单邮件变成本地订单台账退货截止前主动提醒你NorthCinder 订单自动化完整指南把订单邮件变成本地订单台账退货截止前主动提醒你 网购之后确认信、发货通知、物流更新、退货窗口说明会陆续散落进收件VSCode Java 语言支持扩展项目推荐VSCode Java 语言支持扩展项目推荐 项目基础介绍和主要编程语言 VSCode Java 语言支持扩展是由 Red Hat 开发者团队开发的开源项目旨上一篇visx/pattern 完全指南用 SVG 图案填充为 React 图表添加纹理下一篇YouTube.js PivotBarItem 节点解析详解移动端 Pivot 导航项的 API 与源码实现创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
只有域名如何做网站?这份保姆级建站教程专治备案焦虑 只有域名如何做网站?这份保姆级建站教程专治备案焦虑 刚拿到域名,对着后台发呆?备案流程像天书一样看不懂?别慌,这正是很多开发者卡在第一步的噩梦。 这也是一份保姆级建站教程的核心价值所在:把复杂的流程拆成能落地的步骤。… · 2026/9/27 8:32:12
营销型网站建设规划书如何写?一文搞懂避坑省钱 营销型网站建设规划书如何写?一文搞懂避坑省钱 找建站公司最怕什么?不是技术不行,而是报价虚高、需求模糊,最后付了钱拿到的却是个“样子货”。很多老板拿着模糊的想法去谈,对方报个三万五,你砍到两万八,签了字才发现,连个后台管理都没有,更别提SE… · 2026/9/27 8:32:06
为什么Surge下载管理器比wget快2倍?这款Go打造的TUI下载神器完整解析 为什么Surge下载管理器比wget快2倍?这款Go打造的TUI下载神器完整解析 【免费下载链接】Surge Blazing fast TUI download manager built in Go for power users 项目地址: https://gitcode.com/gh_mirrors/surge46/Surge
如果你还在用 wget 或浏览器慢慢拖一… · 2026/9/27 9:07:39
没有装wordpress性能优化 没装WordPress也能做官网?3个实战案例拆解 很多老板问我,不懂代码,是不是只能花大价钱找外包?其实完全不是。我见过太多因为迷信“必须装WordPress”而掉进坑里的项目。今天不讲虚的,直接上 实战案例 ,聊聊… · 2026/9/27 9:07:33
Surge凭什么比aria2c快1.4倍?深入拆解并行下载引擎的4大设计秘诀 Surge凭什么比aria2c快1.4倍?深入拆解并行下载引擎的4大设计秘诀 【免费下载链接】Surge Blazing fast TUI download manager built in Go for power users 项目地址: https://gitcode.com/gh_mirrors/surge46/Surge
Surge是一款用Go语言编写的极速TUI并行下… · 2026/9/27 9:07:33
Selenium 装驱动太麻烦?Playwright 入门指南:Python 网页自动化新标准 Selenium 装驱动太麻烦?Playwright 入门指南:Python 网页自动化新标准
一、开头痛点:驱动、等待、玄学报错
做过网页自动化的同学,大概率被这三件事折磨过:
装驱动:chromedriver 的版本必须和本机 Chrome 严… · 2026/9/27 9:07:27
涂布后的胶面产生针孔,破坏热封密封性? 在涂布处理后、胶面上可能出现针孔现象。这种现象主要源于不合适的原材料、涂布设备的状态和工作环境等因素。针孔的出现直接影响热封密封性、可能导致漏气或液体渗透进而降低产品质量。另外损坏,给企业带来损失。为了应对这一问题、生产企业需要采取有效措施对生产… · 2026/9/27 9:07:21
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01