跳到内容

功能

本节详细介绍了 Ruff 语言服务器所提供的各项功能。

诊断高亮

实时为您的 Python 代码提供诊断反馈。

Editing a file in Helix

动态配置

当工作区中的配置文件(无论是 pyproject.tomlruff.toml 还是 .ruff.toml)发生更改时,服务器会自动动态刷新诊断信息。

服务器依赖编辑器的文件监视功能来检测这些文件的变化。如果编辑器不支持文件监视,服务器将无法检测到配置文件的更改,因此也就无法刷新诊断信息。

Editing a <code>pyproject.toml</code> configuration file in VS Code

格式化

为您的 Python 代码提供格式化功能。服务器可以格式化整个文档或指定的代码行范围。

VS Code 插件提供了 Ruff: Format Document 命令来格式化整个文档。在 VS Code 中,可以通过选中一段代码行,然后右键点击并选择上下文菜单中的 Format Selection 来触发范围格式化。

Formatting a document in VS Code

Markdown 代码块

该功能目前仅在预览模式下可用。

Ruff 格式化程序还可以格式化 Markdown 文件中的 Python 代码块。Ruff VS Code 插件为 Markdown 文件提供了 Format Document 命令,它将使用与常规 Python 文件相同的设置来格式化这些代码块。

请注意,Ruff 不会格式化 Markdown 文件的其他部分。如果您希望在配合其他 Markdown 格式化插件的同时使用 Ruff 格式化,则需要在 VS Code 中将其中一个设置为默认值,并手动运行 Format Document With...(或 Ruff: Format document)命令来分别调用其他格式化程序。

要在 VS Code 中启用格式化预览模式,请在您的 settings.json 中添加以下内容:

{
  "ruff.format.preview": true,
}

要将 Ruff 设置为 VS Code 中 Markdown 文件的默认格式化程序,请在您的 settings.json 中添加以下内容:

{
  "[markdown]": {
    "editor.defaultFormatter": "charliermarsh.ruff"
  }
}

请注意,Ruff 不支持 Markdown 文件的范围格式化,因此如果您启用了保存时格式化,可能还需要指定以下内容:

{
  "[markdown]": {
    "editor.formatOnSave": true,
    "editor.formatOnSaveMode": "file"
  }
}

有关更多详细信息,请参阅格式化程序文档

代码操作

代码操作是上下文相关的建议,可以帮助您修复代码中的问题。它们通常通过快捷键或点击编辑器中的灯泡图标来触发。Ruff 语言服务器提供以下代码操作:

  • 为有修复方案的诊断应用快速修复(例如:移除未使用的导入)。
  • 使用 # noqa 注释忽略某项诊断。
  • 应用文档中所有可用的快速修复。
  • 整理文档中的导入。

Applying a quick fix in Helix

您甚至可以在保存时运行这些操作。例如,要在 VS Code 中实现保存时修复所有问题并整理导入,请在您的 settings.json 中添加以下内容:

{
  "[python]": {
    "editor.codeActionsOnSave": {
      "source.fixAll.ruff": "explicit",
      "source.organizeImports.ruff": "explicit"
    }
  }
}

修复安全性

Ruff 的自动修复被标记为“安全”和“不安全”。默认情况下,“全部修复”(Fix all)操作不会应用不安全的修复。但是,可以通过“快速修复”(Quick fix)操作手动应用不安全的修复。如果要在使用“全部修复”时应用不安全修复,可以在 Ruff 配置文件中设置 unsafe-fixes = true

有关修复安全性工作原理的更多详细信息,请参阅 Ruff 修复文档

悬停提示

当聚焦于注释中的 NoQA 代码时,服务器可以提供规则文档。聚焦通常指鼠标悬停,也可以通过快捷键触发。

Hovering over a noqa code in VS Code

Jupyter Notebook

与 Ruff 的 CLI 类似,Ruff 语言服务器完全支持 Jupyter Notebook 文件,并具备适用于 Python 文件的所有功能。

注意

Ruff 内置了对 Jupyter Notebook 的支持。从 0.6.0 版本开始,原生语言服务器默认会自动发现并 lint 或格式化 .ipynb 文件。有关更多详细信息,请参阅 Jupyter Notebook 发现一节。

Editing multiple Jupyter Notebook cells in VS Code

Formatting a selection within a Jupyter Notebook cell in VS Code