> ## Documentation Index
> Fetch the complete documentation index at: https://openidea.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# 代码检查

> 编辑器和问题工具窗口中的问题、快速修复与意图操作、检查配置文件、批量分析和拼写检查。

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

## 编辑器中的问题

问题在编辑器中以波浪线标出，并在滚动条上做标记。编辑器右上角的微件按严重性显示问题数量（没有问题时显示对勾），单击它打开 **问题** 工具窗口。鼠标停在带下划线的代码上即可看到消息。

| 操作 | macOS | Windows / Linux |
| - | - | - |
| **下一个高亮错误** | `F2` | `F2` |
| **上一个高亮错误** | `⇧F2` | `Shift+F2` |
| **错误描述** | `⌘F1` | `Ctrl+F1` |
| **问题** 工具窗口 | `⌘6` | `Alt+6` |

**问题** 工具窗口有两个标签页：**文件**（当前编辑器）和 **项目错误**。在它的选项菜单中可以按严重性或名称排序、显示预览、自动滚动到源代码。

## 快速修复与意图操作

| 操作 | macOS | Windows / Linux |
| - | - | - |
| **显示上下文操作** | `⌥↵` | `Alt+Enter` |
| **应用快速修复** | `⌥⇧↵` | `Alt+Shift+Enter` |

光标所在行有可用操作时会出现灯泡图标。**显示上下文操作** 先列出光标处问题的快速修复（首选项加粗），然后是语言服务器提供的意图操作和重构，以及插件提供的操作。大多数条目都能预览改动。

**应用快速修复** 不打开列表，直接对光标处或光标所在行上最严重的问题应用首选（或第一个）修复。

在某个问题条目的子菜单（`→`）中，还可以打开该检查的设置、禁用该检查或更改它的严重性。这些改动会写入当前生效的检查配置文件。

## 检查配置文件

**设置 › 编辑器 › 检查** 按语言或领域分组列出所有检查，每项都有开关和严重性：**错误**、**警告**、**弱警告** 等。语言服务器报告过问题后才会出现在这里，它的各个诊断代码也会在出现后作为单独的条目列出。

* **默认** 保存在 IDE 设置中，对所有项目生效。
* **项目默认** 保存在项目中。
* 通过齿轮菜单可以复制配置文件、把它复制到 IDE 级或项目级、重命名或删除。

所选的配置文件决定编辑器、问题工具窗口和“检查代码”显示哪些问题。

## 分析整个范围

| 操作 | macOS | Windows / Linux |
| - | - | - |
| **检查当前文件** | `⌥⇧I` | `Alt+Shift+I` |

以下命令都在 **代码** 菜单中：

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

## 结构化搜索与替换

**编辑 › 查找 › 结构化搜索…** 和 **编辑 › 查找 › 结构化替换…** 按语法树而不是文本匹配代码。选择语言后，用占位符写模板：

* `$name$` 或 `$NAME` 匹配一个语法节点；
* `$$$NAME` 匹配任意数量的节点（参数、语句）；
* 同一个占位符出现两次时，两处必须匹配相同的代码。

例如在 Rust 中，搜索模板 `$e$.unwrap()` 配合替换模板 `$e$.expect("todo")`，会把所有 `unwrap()` 调用改写掉并保留调用者。搜索结果显示在 **查找用法** 工具窗口中；替换会先预览，再作为一次改动应用。匹配基于 ast-grep 的匹配器和内置的 tree-sitter 语法。

## 拼写检查

**校对 › 拼写错误** 检查会用内置的英语（美式和英式）词典以及一份编程术语表，检查注释、字符串字面量和声明的名称中的单词。`camelCase` 和 `snake_case` 名称会被拆成单词检查。

在拼写错误上按 `⌥↵` / `Alt+Enter` 可以：

* **拼写错误：更改为…**（注释、字符串和文本）或 **拼写错误：重命名为…**（声明的名称，通过重命名完成，引用会一并更新）；
* 把这个词保存到项目级或应用程序级词典。

项目词典、应用程序词典和自定义词典文件在 **设置 › 编辑器 › 自然语言 › 拼写** 中管理。拼写错误检查的严重性和选项与其他检查一样，在 **设置 › 编辑器 › 检查** 中设置。

## 提交之前

提交对话框可以在提交前对改动的文件运行 **分析代码** 和 **检查 TODO**，见 [版本控制](https://openidea.sh/zh/guide/vcs.md)。

## 限制

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


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.