跳转到主要内容
在 OpenIDEA 里,每个问题来源都是一项检查:每个语言服务器(服务器报告诊断代码时,每个代码也单独算一项),外加几项内置检查,例如语法错误、无法解析的文件引用、未解决的合并冲突标记、构建问题和拼写。它们的显示方式相同,也都在同一个地方配置。

编辑器中的问题

问题在编辑器中以波浪线标出,并在滚动条上做标记。编辑器右上角的微件按严重性显示问题数量(没有问题时显示对勾),单击它打开 问题 工具窗口。鼠标停在带下划线的代码上即可看到消息。 问题 工具窗口有两个标签页:文件(当前编辑器)和 项目错误。在它的选项菜单中可以按严重性或名称排序、显示预览、自动滚动到源代码。

快速修复与意图操作

光标所在行有可用操作时会出现灯泡图标。显示上下文操作 先列出光标处问题的快速修复(首选项加粗),然后是语言服务器提供的意图操作和重构,以及插件提供的操作。大多数条目都能预览改动。 应用快速修复 不打开列表,直接对光标处或光标所在行上最严重的问题应用首选(或第一个)修复。 在某个问题条目的子菜单(→)中,还可以打开该检查的设置、禁用该检查或更改它的严重性。这些改动会写入当前生效的检查配置文件。

检查配置文件

设置 › 编辑器 › 检查 按语言或领域分组列出所有检查,每项都有开关和严重性:错误、警告、弱警告 等。语言服务器报告过问题后才会出现在这里,它的各个诊断代码也会在出现后作为单独的条目列出。
  • 默认 保存在 IDE 设置中,对所有项目生效。
  • 项目默认 保存在项目中。
  • 通过齿轮菜单可以复制配置文件、把它复制到 IDE 级或项目级、重命名或删除。
所选的配置文件决定编辑器、问题工具窗口和“检查代码”显示哪些问题。

分析整个范围

以下命令都在 代码 菜单中:
  • 代码 › 检查代码… 在指定范围内运行语言服务器的诊断,结果按严重性、检查项和文件分组显示在 检查结果 工具窗口中。范围可以是整个项目、某个模块或目录、当前文件、未提交的文件或自定义范围。没有语言服务器的文件会被跳过。
  • 代码 › 分析代码 › 检查当前文件 对当前打开的文件做同样的检查。
  • 代码 › 代码清理… 在指定范围内逐个文件应用语言服务器的自动修复、优化导入并重新格式化,然后保存。超过 100 个文件时会先确认,可以在后台任务弹窗中取消。
  • 代码 › 分析代码 › 查找重复代码… 用基于词法单元(token)的克隆检测查找重复代码。可以设置以 token 计的最小长度,以及是否把标识符和字面量匿名化(这样只有名字不同的代码也能匹配)。结果显示在 重复项 工具窗口中。

结构化搜索与替换

编辑 › 查找 › 结构化搜索… 和 编辑 › 查找 › 结构化替换… 按语法树而不是文本匹配代码。选择语言后,用占位符写模板:
  • $name$ 或 $NAME 匹配一个语法节点;
  • $$$NAME 匹配任意数量的节点(参数、语句);
  • 同一个占位符出现两次时,两处必须匹配相同的代码。
例如在 Rust 中,搜索模板 $e$.unwrap() 配合替换模板 $e$.expect("todo"),会把所有 unwrap() 调用改写掉并保留调用者。搜索结果显示在 查找用法 工具窗口中;替换会先预览,再作为一次改动应用。匹配基于 ast-grep 的匹配器和内置的 tree-sitter 语法。

拼写检查

校对 › 拼写错误 检查会用内置的英语(美式和英式)词典以及一份编程术语表,检查注释、字符串字面量和声明的名称中的单词。camelCase 和 snake_case 名称会被拆成单词检查。 在拼写错误上按 ⌥↵ / Alt+Enter 可以:
  • 拼写错误:更改为…(注释、字符串和文本)或 拼写错误:重命名为…(声明的名称,通过重命名完成,引用会一并更新);
  • 把这个词保存到项目级或应用程序级词典。
项目词典、应用程序词典和自定义词典文件在 设置 › 编辑器 › 自然语言 › 拼写 中管理。拼写错误检查的严重性和选项与其他检查一样,在 设置 › 编辑器 › 检查 中设置。

提交之前

提交对话框可以在提交前对改动的文件运行 分析代码 和 检查 TODO,见 版本控制。

限制

  • 检查来自语言服务器和少量内置检查,没有 IntelliJ IDEA 那样大量的 IDE 内置检查;能看到什么取决于该语言配置的服务器。
  • “检查代码”和“代码清理”会跳过没有语言服务器的文件。