Интеграция с редакторами
Ruff прямо в редакторе — подчёркивания ошибок, автоисправление и форматирование при сохранении.
- Подсветка ошибок прямо во время набора кода
- Автоисправление при сохранении файла
- Автоформатирование
- Code actions (быстрые исправления)
- Сортировка импортов одной командой
LSP сервер Ruff
Ruff включает встроенный Language Server Protocol (LSP) сервер. Это значит, что любой редактор с поддержкой LSP может использовать Ruff для подсветки ошибок, автодополнения и рефакторинга.
Сервер называется ruff server и запускается автоматически редактором при открытии Python-файлов:
# Запустить LSP-сервер вручную (обычно это делает редактор)
ruff server
Что умеет ruff server:
- Diagnostics — подсветка ошибок и предупреждений
- Code actions — быстрые исправления (fix, ignore, show docs)
- Formatting — форматирование документа
- Hover — показывает описание правила при наведении
- Code lenses — запуск Ruff из интерфейса
pyproject.toml или ruff.toml. Не нужно указывать путь к конфигу — достаточно, чтобы файл лежал в корне проекта.
VS Code (Visual Studio Code)
Установка расширения
Установи официальное расширение Ruff от Astral Software:
- Открой VS Code
- Перейди в Extensions (Ctrl+Shift+X)
- Найди "Ruff" от Astral Software (ID:
charliermarsh.ruff) - Нажми Install
Также можно установить через командную строку:
code --install-extension charliermarsh.ruff
Настройка для проекта (.vscode/settings.json)
Создай файл .vscode/settings.json в корне проекта:
{
"[python]": {
"editor.formatOnSave": true,
"editor.defaultFormatter": "charliermarsh.ruff",
"editor.codeActionsOnSave": {
"source.fixAll.ruff": "explicit",
"source.organizeImports.ruff": "explicit"
}
},
"ruff.lint.enable": true,
"ruff.format.enable": true,
"ruff.organizeImports": true
}
Что делает каждая настройка:
| Настройка | Что делает |
|---|---|
formatOnSave | Форматирование при сохранении |
defaultFormatter | Какой форматтер использовать для Python |
source.fixAll.ruff | Автоисправление безопасных ошибок при сохранении |
source.organizeImports.ruff | Автосортировка импортов при сохранении |
ruff.lint.enable | Включить линтинг через расширение |
ruff.format.enable | Включить форматирование через расширение |
Глобальные настройки VS Code
Чтобы Ruff работал во всех Python-проектах по умолчанию, добавь в глобальный settings.json (Ctrl+Shift+P — "Open User Settings JSON"):
{
"[python]": {
"editor.formatOnSave": true,
"editor.defaultFormatter": "charliermarsh.ruff"
},
"ruff.lint.enable": true,
"ruff.format.enable": true,
"ruff.organizeImports": true,
"ruff.codeAction.disableRuleComment": {
"enable": true
},
"ruff.nativeServer": true
}
"ruff.nativeServer": true включает встроенный LSP-сервер Ruff (рекомендуется). Если отключить, расширение будет запускать ruff check для каждого файла отдельно, что медленнее.
Дополнительные настройки VS Code
{
// Путь к исполняемому файлу ruff
"ruff.path": ["/path/to/ruff"],
// Аргументы командной строки для ruff
"ruff.args": [],
// Игнорировать файлы по шаблону
"ruff.ignorePatterns": ["**/migrations/**"],
// Показывать только предупреждения (не ошибки)
"ruff.lint.run": "onType", // или "onSave"
// Размер кэша для LSP
"ruff.trace.server": "off" // "messages" для отладки
}
Быстрые клавиши VS Code
| Действие | Комбинация |
|---|---|
| Форматировать файл | Shift+Alt+F |
| Быстрое исправление | Ctrl+. |
| Сортировка импортов | Shift+Alt+O |
| Показать все ошибки | Ctrl+Shift+M |
PyCharm (и другие IDE JetBrains)
Способ 1: Плагин Ruff
В PyCharm есть официальный плагин Ruff:
- Открой Settings → Plugins → Marketplace
- Найди "Ruff"
- Установи плагин
- Перезагрузи IDE
Способ 2: File Watchers
Если плагин не подходит, настрой Ruff как внешний инструмент через File Watchers:
Program: ruff
Arguments: check --fix --stdin-file-path $FilePath$ -
Output paths: $FilePath$
Environment: PYTHONUNBUFFERED=1
Working directory: $ProjectFileDir$
Способ 3: Настройка Ruff как External Tool
Можно добавить Ruff в Tools → External Tools:
Name: Ruff Check
Program: ruff
Arguments: check $FilePath$
Working directory: $ProjectFileDir$
Name: Ruff Format
Program: ruff
Arguments: format $FilePath$
Working directory: $ProjectFileDir$
Neovim (nvim-lspconfig)
Neovim поддерживает LSP через built-in LSP клиент с nvim-lspconfig:
-- lazy.nvim
{
"neovim/nvim-lspconfig",
config = function()
local lspconfig = require("lspconfig")
lspconfig.ruff.setup({
init_options = {
settings = {
-- настройки Ruff (те же, что в pyproject.toml)
}
}
})
end
}
-- Или через Mason:
{
"williamboman/mason.nvim",
opts = {
ensure_installed = { "ruff" }
}
}
Более полная конфигурация с keymaps:
vim.api.nvim_create_autocmd("FileType", {
pattern = "python",
callback = function()
vim.keymap.set("n", "<leader>rf", function()
vim.lsp.buf.format({ async = true })
end, { desc = "Format with Ruff" })
vim.keymap.set("n", "<leader>ri", function()
vim.lsp.buf.code_action({
context = { only = { "source.organizeImports" } },
apply = true
})
end, { desc = "Organize imports" })
vim.keymap.set("n", "<leader>rx", function()
vim.lsp.buf.code_action({
context = { only = { "source.fixAll" } },
apply = true
})
end, { desc = "Fix all" })
end,
})
Для интеграции с форматированием (замена black/yapf):
-- Включить Ruff как форматтер
lspconfig.ruff.setup({
on_attach = function(client, bufnr)
-- Только форматирование
client.server_capabilities.documentFormattingProvider = true
end,
})
conform.nvim или null-ls, можно добавить Ruff как форматтер через них. Для null-ls используйте builtins.formatting.ruff.
Helix Editor
Helix имеет встроенную поддержку LSP. Для Ruff настройка в .config/helix/languages.toml:
[language-server.ruff]
command = "ruff"
args = ["server"]
[[language]]
name = "python"
language-servers = ["ruff", "pyright"]
Для форматирования через Ruff:
[language-server.ruff]
command = "ruff"
args = ["server"]
[language-server.pyright]
command = "pyright-langserver"
args = ["--stdio"]
[[language]]
name = "python"
language-servers = ["ruff", "pyright"]
formatter = { command = "ruff", args = ["format", "-"] }
Zed Editor
Zed имеет встроенную поддержку Ruff через LSP. Файл конфигурации .config/zed/settings.json:
{
"languages": {
"Python": {
"language_servers": ["ruff", "pyright"],
"format_on_save": {
"external": {
"command": "ruff",
"arguments": ["format", "--stdin-filename", "{buffer_path}", "-"]
}
}
}
},
"lsp": {
"ruff": {
"settings": {
"lineLength": 100,
"lint": {
"select": ["E", "F", "I", "N", "UP", "B"]
}
}
}
}
}
Или с использованием системного конфигурационного файла Ruff:
{
"languages": {
"Python": {
"language_servers": ["ruff"],
"format_on_save": "on"
}
}
}
Zed автоматически предложит установить Ruff, если он не найден в PATH.
Sublime Text
Для Sublime Text можно использовать пакет LSP-ruff через Package Control:
- Установи Package Control (если ещё нет)
- Ctrl+Shift+P → Package Control: Install Package
- Найди "LSP-ruff" и установи
Или через ручную настройку LSP:
// Preferences → Package Settings → LSP → Settings
{
"clients": {
"ruff": {
"command": ["ruff", "server"],
"selector": "source.python",
"settings": {}
}
}
}
pyproject.toml — ничего дополнительно настраивать не нужно.
Emacs (eglot / lsp-mode)
eglot (рекомендуется)
(use-package eglot
:config
(add-to-list 'eglot-server-programs
'(python-mode "ruff" "server"))
:hook
(python-mode . eglot-ensure))
lsp-mode
(use-package lsp-mode
:hook (python-mode . lsp-deferred)
:commands lsp)
(use-package lsp-ruff
:after lsp-mode
:config
(setq lsp-ruff-line-length 100)
(setq lsp-ruff-lint-select "E,F,I,N,UP,B"))
Для автоформатирования при сохранении:
(add-hook 'python-mode-hook
(lambda ()
(add-hook 'before-save-hook 'eglot-format-buffer nil t)))
Vim (ale / coc.nvim)
ale
" .vimrc или init.vim
let g:ale_linters = {'python': ['ruff']}
let g:ale_fixers = {'python': ['ruff_format', 'ruff']}
let g:ale_fix_on_save = 1
let g:ale_python_ruff_options = '--fix'
coc.nvim
" coc-settings.json
{
"languageserver": {
"ruff": {
"command": "ruff",
"args": ["server"],
"filetypes": ["python"],
"rootPatterns": ["pyproject.toml", "ruff.toml", ".git"]
}
}
}
Терминал и файловые менеджеры
Ruff можно использовать не только в редакторах. Вот как интегрировать его в другие инструменты:
watchdog (автоматическая проверка)
# Проверять все Python файлы при изменении
ruff check --watch src/
make / task
# Makefile
.PHONY: lint
lint:
ruff check
.PHONY: format
format:
ruff format
.PHONY: lint-fix
lint-fix:
ruff check --fix
just (команды justfile)
# justfile
lint:
ruff check
format:
ruff format
check: lint format
Поиск и устранение проблем
Проблема 1: Ruff не работает в редакторе
- Проверь, что Ruff установлен:
which ruffв терминале. - Проверь, что расширение VS Code активировано (иконка в статус-баре).
- Открой Output панель (View → Output) и выбери "Ruff" в дропдауне. Там будут сообщения об ошибках.
- Проверь, что есть
pyproject.tomlилиruff.tomlв корне проекта (или любой родительской папке). - Перезагрузи окно VS Code: Ctrl+Shift+P → "Developer: Reload Window".
Проблема 2: Ruff не форматирует при сохранении
- Проверь
settings.json:editor.formatOnSaveдолжен бытьtrueиeditor.defaultFormatterдолжен быть"charliermarsh.ruff". - Убедись, что Ruff не конфликтует с другими форматтерами (black, autopep8). Отключи их для Python.
- Проверь, что файл не в списке исключений
ruff.ignorePatterns. - Попробуй форматировать вручную: Shift+Alt+F. Если не работает — проблема в настройках.
Проблема 3: Конфликт Ruff с другим LSP сервером
"python.linting.enabled": false,
"python.linting.pylintEnabled": false,
"python.linting.flake8Enabled": false,
"python.linting.mypyEnabled": false,
"python.linting.banditEnabled": false
В Neovim/Helix — просто не добавляй конфликтующие LSP серверы для Python.
Проблема 4: Ruff не находит pyproject.toml
- Проверь, что
pyproject.tomlнаходится в корне проекта (там же, где.gitи.vscode). - Проверь, что Ruff настроен в правильном разделе:
[tool.ruff]. - Запусти
ruff check --show-settingsв терминале — если там дефолт, Ruff не видит твой конфиг. - Можно указать путь явно в VS Code:
"ruff.args": ["--config", "/path/to/pyproject.toml"].
Проблема 5: Медленная работа в большом проекте
- Убедись, что используется native LSP сервер (
"ruff.nativeServer": true). - Добавь исключения для директорий, которые не нужно проверять:
"ruff.ignorePatterns": ["**/migrations/**", "**/node_modules/**"]. - Ограничь количество файлов: запускай
ruff check src/вместоruff check .. - Используй
ruff check --no-cacheтолько для отладки — с кэшем Ruff работает быстрее.
Сравнение поддержки редакторов
| Редактор | Способ | Сложность | Функции |
|---|---|---|---|
| VS Code | Расширение | Просто | Линтинг, форматирование, code actions |
| PyCharm | Плагин / File Watcher | Средне | Линтинг, форматирование |
| Neovim | LSP (nvim-lspconfig) | Средне | Линтинг, форматирование, code actions |
| Helix | Встроенный LSP | Просто | Линтинг, форматирование |
| Zed | Встроенный LSP | Просто | Линтинг, форматирование |
| Sublime Text | LSP-ruff | Просто | Линтинг, форматирование |
| Emacs | eglot / lsp-mode | Средне | Линтинг, форматирование, code actions |
| Vim | ale / coc.nvim | Средне | Линтинг, форматирование |
Интеграция с CI/CD (GitHub Actions)
Для автоматизации проверок в CI используйте GitHub Actions. Вот типичный workflow:
# .github/workflows/lint.yml
name: Lint
on: [push, pull_request]
jobs:
ruff:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- run: pip install ruff
- run: ruff check
- run: ruff format --check
С автоисправлением (создаёт PR с исправлениями):
# .github/workflows/ruff-fix.yml
name: Ruff auto-fix
on:
pull_request:
types: [opened, synchronize]
jobs:
fix:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- run: pip install ruff
- run: ruff check --fix
- uses: stefanzweifel/git-auto-commit-action@v5
with:
commit_message: "style: auto-fix ruff issues"
ruff format --check вместо ruff format, чтобы проверить, что код отформатирован, не изменяя его. Изменение кода в CI может привести к конфликтам.
Расширенная диагностика VS Code
Просмотр логов LSP сервера
Для диагностики проблем с расширением VS Code:
- Нажми
Ctrl+Shift+P→ "Developer: Toggle Developer Tools" - Перейди на вкладку Console — там могут быть ошибки расширения
- Или открой View → Output и выбери "Ruff" из выпадающего списка
Настройка verbose-логирования
{
"ruff.trace.server": "messages", // логировать все LSP сообщения
"ruff.trace.server": "verbose", // максимальный уровень логирования
"ruff.logLevel": "info", // info, warn, error, debug
}
Распространённые ошибки в Output панели
| Сообщение в логе | Причина | Решение |
|---|---|---|
ruff: not found | Ruff не установлен в системе | pip install ruff |
Failed to start native server | Версия Ruff старая (нет LSP) | Обнови Ruff до последней версии |
No configuration file found | Нет pyproject.toml/ruff.toml | Создай файл конфигурации |
Connection to server closed | LSP сервер упал | Перезагрузи VS Code |
Полезные клавиатурные сокращения
| Действие | VS Code | PyCharm | Neovim |
|---|---|---|---|
| Форматировать | Shift+Alt+F | Ctrl+Alt+L | :lua vim.lsp.buf.format() |
| Быстрое исправление | Ctrl+. | Alt+Enter | <leader>ca |
| Сортировка импортов | Shift+Alt+O | Ctrl+Alt+O | :lua vim.lsp.buf.code_action() |
| Показать все ошибки | Ctrl+Shift+M | Alt+6 | :Trouble |
| Перейти к следующей ошибке | F8 | F2 | ]d |
VS Code Tasks для Ruff
Настройте задачи VS Code для быстрого запуска Ruff из редактора. Создайте .vscode/tasks.json:
{
"version": "2.0.0",
"tasks": [
{
"label": "Ruff: Lint all files",
"type": "shell",
"command": "ruff check",
"problemMatcher": []
},
{
"label": "Ruff: Fix all files",
"type": "shell",
"command": "ruff check --fix",
"problemMatcher": []
},
{
"label": "Ruff: Format all files",
"type": "shell",
"command": "ruff format",
"problemMatcher": []
}
]
}
Запуск: Ctrl+Shift+P → "Tasks: Run Task" → выбери нужную задачу.
Code Actions в редакторе
Ruff LSP предлагает несколько code actions (быстрых действий) через лампочку или Ctrl+.:
| Действие | Описание |
|---|---|
Fix all auto-fixable problems | Исправить все безопасные ошибки в файле |
Organize imports | Отсортировать импорты в файле |
Disable rule for this line | Добавить # noqa для текущего правила |
Show documentation | Показать описание правила |
Fix using --unsafe-fixes | Применить небезопасное исправление |
# noqa: CODE комментарий. Это удобно для быстрого подавления предупреждений без ручного ввода.
Итоги
- Ruff имеет встроенный LSP-сервер (
ruff server) — работает с любым LSP-совместимым редактором. - VS Code — лучший опыт: установи расширение и настрой
settings.json. - PyCharm — используй официальный плагин или File Watchers.
- Neovim — настрой через nvim-lspconfig или Mason.
- Helix, Zed — встроенная поддержка, минимум конфигурации.
- Sublime, Emacs, Vim — настройка через LSP или плагины.
- При проблемах проверяй Output панель редактора и
ruff check --show-settings. - Настрой
formatOnSave— самая полезная функция для повседневной работы.
Урок 6.1: Интеграция с редактором
5 вопросов