跳转到主要内容
OpenIDEA 认识的每种语言都是一个 TOML 文件,格式如本页所述。有三种用法:
  • 为自己修改内置语言:在配置目录的 languages 文件夹里放一个 id 相同的文件。它会整体替换内置定义(字段不会合并),所以最好从内置文件复制一份再改。
  • 为自己添加语言:在同一个文件夹里放一个使用新 id 的文件。
  • 把语言提供给别人:放进插件(见 通过插件提供语言),或者加到仓库的 languages/ 目录。
配置目录位置: 这个文件夹只在启动时读取一次,修改后需要重启 IDE。无法解析的文件会被跳过,原因写在日志里。

示例

一个完整的定义,包含 tree-sitter 语法、语言服务器和调试器:
languages/zig.toml
所有键都使用 kebab-case。只有 id 和 name 是必填的;只写这两项时,这类文件至少会在界面上显示正确的语言名。

语言字段

内置的 tree-sitter 语法:bash、c、cmake、cpp、csharp、css、dart、elixir、gdscript、go、graphql、haskell、hcl、html、java、javascript、json、kotlin、lua、make、markdown、nix、ocaml、ocaml_interface、php、proto、python、ruby、rust、scala、swift、toml、tsx、typescript、xml、yaml、zig。新的语法需要编译进 IDE;没有语法的语言可以改由插件提供高亮和结构(见 语言功能)。

[[framework-ui-modes]]

按顺序第一个找到标记的条目生效。HTML 用它来支持 Angular 模板:

[[language-servers]]

每一项启动一个 LSP 服务器。服务器按顺序列出:普通服务器同时运行;fallback 服务器只有在排在它前面的服务器都缺失时才运行。 大部分配置用户都能在 设置 › 语言和框架 › 语言服务器 里按服务器覆盖(可执行文件、实参、环境变量、初始化选项、工作区配置),无需修改定义文件。

TCP 服务器

有些服务器只监听 TCP 端口,比如 Godot 编辑器内置的服务器。配置 connect 后,如果该地址有程序在监听,IDE 直接连接;否则启动 command(已安装时),等它可以接受连接后再连接:参数里有 ${port} 时连接 127.0.0.1:${port}(端口由 IDE 选一个空闲的),否则连接 connect 地址。参数中的 ${root} 是工作区根目录。不是由 IDE 启动的服务器,IDE 也不会关闭它。

[debugger]

配置了 [debugger] 的语言,可以在其文件中设置断点。

formatter

外部格式化工具,在没有语言服务器能格式化该文件、或在设置中选择了它时使用:

通过插件提供语言

插件附带同样格式的文件,并在清单中声明:
plugin.toml
定义里启动的每个程序(language-servers.command、debugger.command)都需要 process:<program> 权限;未获授权的服务器会被忽略,但语言本身仍然可用。内置定义和用户定义优先:插件不能占用它们的 id、扩展名或文件名。插件侧的写法见 语言功能,完整示例见 plugins/official/solidity。

添加内置语言

要把语言加入 OpenIDEA 本身,新增 languages/<id>.toml,并在 crates/ide-language/src/registry.rs 的 BUILTIN 表中注册(这些文件在构建时嵌入)。要让它的服务器支持一键安装,还需要在 crates/ide-tools/src/registry.rs 中添加同名条目。