跳转到主要内容

结果从哪里来

代码智能有两个来源:
  • 语言服务器。 每种语言在 languages/<id>.toml 中配置一个或多个 LSP 服务器(例如 Python 用 basedpyright 和 Ruff,Rust 用 rust-analyzer,Java 用 JDT LS)。打开某种语言的文件时,对应的服务器随之启动,负责补全、导航、用法、文档、诊断、格式化和重构。一种语言可以同时由多个服务器提供服务,结果会合并。
  • IDE 自己的索引和语法树。 OpenIDEA 用内置的 tree-sitter 语法解析文件,并在后台为项目的文件和符号建立索引。转到文件 / 类 / 符号、结构视图、代码折叠、扩展选区和语法高亮都依赖它;没有可用的语言服务器时,它也是兜底:导航、查找用法、局部变量重命名和引入变量会根据语法树完成能确定的部分,查找用法会把同名匹配作为文本出现列出。
缺少某个语言服务器时,会弹出通知提示安装。已安装的服务器、版本和设置在 设置 › 语言和框架 › 语言服务器 中管理。状态栏的 语言服务 微件显示当前项目运行着哪些服务器,并可以重启它们。各语言具体用什么,见 语言。 插件可以在此基础上再提供补全项、快速修复等功能,详见“插件”标签页。

代码补全

输入时补全列表会自动弹出。↵ / Enter 插入选中项,⇥ / Tab 替换光标后的剩余标识符。选中项的文档显示在列表旁边。实时模板和后缀模板也会出现在列表中(见 Live Templates)。 输入 ( 和 , 后会自动显示形参信息,⇥ / ⇧⇥ 在参数之间切换。 循环补全单词 不依赖语言服务器,用当前文件和其他已打开编辑器里的单词补全光标处的词,连续按会依次切换候选。 补全的行为(大小写匹配、唯一候选时自动插入、排序、自动补括号、何时显示文档)在 设置 › 编辑器 › 常规 › 代码补全 中设置。设置 › 编辑器 › 常规 › 自动导入 控制粘贴时插入导入,以及自动添加无歧义的导入。

内联补全

支持 LSP 内联补全的语言服务器会在输入时于光标处显示灰色建议。可以在 设置 › 编辑器 › 常规 › 内联补全 中关闭它、改为停止输入一段时间后再显示,或只对部分语言启用。

导航

  • 在声明本身上执行 转到声明或用法,会改为显示它的用法。
  • 按住 ⌘ / Ctrl 把鼠标悬停在名称上,名称会显示为链接,并附带简要信息。
  • 装订区域的图标标出被实现或被重写的类型和方法(↓),以及实现或重写了其他方法的方法(↑),单击即可跳转。
  • 导航 › 测试 按命名约定在类和它的测试之间跳转;还没有测试时会提供 创建新测试…。
按名称跳转到文件、类和符号,见 搜索与导航。

查找用法

查找用法 把结果按文件分组列在 查找用法 工具窗口中,并带预览。显示用法 在光标处用弹窗显示。移动光标时,编辑器会自动高亮光标下符号的所有出现位置。 声明上方会显示用法数量(如 3 usages)和这段代码最后的作者(来自 Git blame)。可以在 设置 › 编辑器 › 嵌入提示 的 Code Vision 一节中关闭。

文档与信息

鼠标在代码上停留片刻,会显示文档以及指针下的问题。在 快速文档 弹窗中,链接会在原地打开其他符号的文档,← / → 前后翻看,F4 跳到源代码。弹窗获得焦点时再按 F1,会把它移到 文档 工具窗口;该窗口打开期间,F1 的文档都会显示在窗口里而不是弹窗中。 快速定义 在弹窗中显示定义的源代码,不用离开当前文件。上下文信息 显示光标周围的声明行(类、方法、代码块的开头),在它们已经滚出视野时很有用。

嵌入提示

参数名、推断出的类型以及其他细节(例如链式调用的类型)的内联提示由语言服务器提供。可以在 设置 › 编辑器 › 嵌入提示 中按种类和语言开关,也可以右键单击某个提示来关闭这一类。提示中指向声明的部分可以 ⌘+单击 / Ctrl+单击跳转过去。

结构与层次结构

文件结构 弹出当前文件的声明列表,输入文字过滤,按 ↵ / Enter 跳转。结构 工具窗口显示同样的大纲,可通过它的工具栏设置跟随光标。编辑器顶部或底部的痕迹导航显示光标所在位置,位置和适用语言在 设置 › 编辑器 › 常规 › 痕迹导航 中设置。 调用层次结构 和 类型层次结构 在 层次结构 工具窗口中打开,展开时逐级加载。它们需要语言服务器支持 LSP 的调用层次和类型层次请求。

生成代码

这些命令列出语言服务器在光标处能生成的内容(构造函数、getter 和 setter、缺失的成员等),可选项因语言而异。快速修复和意图操作见 代码检查,重构见 重构。

语义高亮

除了语法高亮,还会应用语言服务器语义令牌(semantic tokens)提供的颜色。语义高亮(每个局部变量和参数名在整个文件中使用各自固定的颜色)和 彩虹括号 是可以在查找操作中运行的开关命令,也可以在 设置 › 编辑器 › 配色方案 中设置。

不工作时怎么排查

  • 先看状态栏的 语言服务 微件:服务器可能还在启动、启动失败,或者没有安装。
  • 不在模块源代码目录中的文件(例如不在模块源根下的 Java 文件),部分服务器只做语法检查,编辑器顶部会有横幅说明。
  • 文件 › 省电模式 会关闭补全和形参信息的自动弹出、悬停文档、用法高亮、用法提示和内联补全。
  • 项目打开后索引在后台进行。搜索会先用已经建好的索引给出结果,索引完成后结果才完整。
  • 更多检查项和日志位置见 故障排查。