Setup#
選択したエディタに応じて、特定のセットアップ手順があります。このリストにエディタが表示されず、セットアップガイドが必要な場合は、問題を開いてください。
ruff-lsp
から設定を転送する場合は、エディタに関係なく、変更された設定や使用できなくなった設定がいくつかあります。詳細については、migration guideを参照してください。
Note
以下に示すセットアップ手順は、ベストエフォートベースで提供されています。エディタでRuffをセットアップ中に問題が発生した場合は、open an issueにこのドキュメントを改善するための支援と支援を求めてください。
Tip
エディタに関係なく、競合を防ぐために、古い言語サーバ(ruff-lsp
)を無効にすることをお勧めします。
VS Code#
VS Code Marketplaceから Ruff 拡張をインストールします。Ruff 言語サーバーで最高のエクスペリエンスを得るには、Ruff 拡張バージョン2024.32.0
以降を使用することをお勧めします。
Ruff 拡張機能に関する詳細なドキュメントについては、拡張機能リポジトリのREADMEを参照してください。
Neovim#
nvim-lspconfig
プラグインを使用して、Neovim で Ruff Language Server を設定できます。セットアップするには、nvim-lspconfig
プラグインをインストールし、configurationドキュメントに従ってセットアップし、次のものをinit.lua
に追加します:
require('lspconfig').ruff.setup({
init_options = {
settings = {
-- Ruff language server settings go here
}
}
})
Note
インストールされたnvim-lspconfig
のバージョンにneovim/nvim-lspconfig@70d1c2c
からの変更が含まれている場合は、Ruffバージョン0.5.3
以降を使用する必要があります。
Ruff を別の言語サーバー(Pyright など)と一緒に使用している場合は、textDocument/hover
のような特定の機能については、その言語サーバーに任せることができます。:
vim.api.nvim_create_autocmd("LspAttach", {
group = vim.api.nvim_create_augroup('lsp_attach_disable_ruff_hover', { clear = true }),
callback = function(args)
local client = vim.lsp.get_client_by_id(args.data.client_id)
if client == nil then
return
end
if client.name == 'ruff' then
-- Disable hover in favor of Pyright
client.server_capabilities.hoverProvider = false
end
end,
desc = 'LSP: Disable hover capability from Ruff',
})
Ruff をリンティング、フォーマット、インポートの整理にのみ使用したい場合は、Pyright のこれらの機能を無効にすることができます。:
require('lspconfig').pyright.setup {
settings = {
pyright = {
-- Using Ruff's import organizer
disableOrganizeImports = true,
},
python = {
analysis = {
-- Ignore all files for analysis to exclusively use Ruff for linting
ignore = { '*' },
},
},
},
}
デフォルトでは、Ruff はログを表示しません。Neovim でログを有効にするには、trace
設定をmessages
またはverbose
に設定し、logLevel
設定を使用してログレベルを変更する必要があります。:
require('lspconfig').ruff.setup {
trace = 'messages',
init_options = {
settings = {
logLevel = 'debug',
}
}
}
デフォルトでは、これは Neovim の LSP クライアントログファイル(:lua vim.print(vim.lsp.get_log_path())
)で使用可能な stderr にログを書き込みます。logFile
設定を使用して、これらのログを別のファイルに転送することもできます。
Vim#
vim-lsp
プラグインを使用して、Vim で Ruff Language Server を設定できます。
設定するには、vim-lsp
プラグインをインストールし、.vimrc
に次のコマンドを使用してサーバを登録します。:
if executable('ruff')
au User lsp_setup call lsp#register_server({
\ 'name': 'ruff',
\ 'cmd': {server_info->['ruff', 'server']},
\ 'allowlist': ['python'],
\ 'workspace_config': {},
\ })
endif
言語サーバの設定方法の詳細については、vim-lsp
ドキュメントを参照してください。
Ruff を別の LSP(Pyright など)と併用している場合は、textDocument/hover
のような特定の機能については、関数のs:on_lsp_buffer_enabled()
に次の内容を追加して、その LSP に従うことをお勧めします。:
function! s:on_lsp_buffer_enabled() abort
" add your keybindings here (see https://github.com/prabirshrestha/vim-lsp?tab=readme-ov-file#registering-servers)
let l:capabilities = lsp#get_server_capabilities('ruff')
if !empty(l:capabilities)
let l:capabilities.hoverProvider = v:false
endif
endfunction
Ruff は、coc.nvimのcoc-pyright拡張の一部としても利用できます。
VimまたはNeovim用のALEプラグインを使用します。
Ruffは、efm言語サーバを介してわずか数行で統合することもできます。
以下は、Python ファイルのリンティングとフォーマットに Ruff を使用するための efm の設定例です。:
Neovim用のconform.nvim
プラグインを使用します。
Neovimのnvim-lint
プラグインを使用します。
Helix#
Helix のlanguage configuration fileを開き、次のように言語サーバーを追加します。:
次に、言語サーバを Python で使用するサーバとして登録します。Python で使用する言語サーバがまだ登録されていない場合は、これをlanguages.toml
に追加します。:
または、すでにlanguage-servers
が定義されている場合は、リストに"ruff"
を追加するだけです。たとえば、すでにpylsp
が言語サーバーとして定義されている場合は、言語エントリを次のように変更できます。:
Note
1つの言語に対する複数言語サーバのサポートは、Helixバージョン23.10
以降でのみ利用可能です。
例えば、自動フォーマットを有効にしたい場合は、auto-format = true
を追加します。:
ここで使用できるその他の設定については、Helix documentationを参照してください。
[language-server.ruff.config.settings]
を使用してruff server
に設定を渡すことができます。例::
[language-server.ruff.config.settings]
lineLength = 80
[language-server.ruff.config.settings.lint]
select = ["E4", "E7"]
preview = false
[language-server.ruff.config.settings.format]
preview = true
デフォルトでは、Ruff は Helix に何もログしません。ログを有効にするには、RUFF_TRACE
環境変数をmessages
またはverbose
に設定し、logLevel
設定を使用してログレベルを変更します。:
[language-server.ruff]
command = "ruff"
args = ["server"]
environment = { "RUFF_TRACE" = "messages" }
[language-server.ruff.config.settings]
logLevel = "debug"
logFile
設定を使用して、Ruff のログを別のファイルに転送することもできます。
Note
`RUFF_TRACE=verbose`を設定しても、それ自体ではHelixのverboseモードは有効になりません。verboseログを作成するには、`-v`を指定してHelixを実行する必要があります。
Kate#
- LSP Client pluginを有効にします。
- LSP Client をセットアップしますas desired。
- 最後に、これを
Settings
->Configure Kate
->LSP Client
->User Server Settings
に追加します:
{
"servers": {
"python": {
"command": ["ruff", "server"],
"url": "https://github.com/astral-sh/ruff",
"highlightingModeRegex": "^Python$",
"settings": {}
}
}
}
そこからサーバを設定する方法の詳細については、LSP Client documentationを参照してください。
Important
KateのLSPクライアントプラグインは、同じ言語の複数のサーバをサポートしていません。
Sublime Text#
Sublime Text で Ruff を使用するには、Sublime Text のLSPおよびLSP-ruffパッケージをインストールします。
PyCharm#
Via External Tool#
Ruff は、PyCharm のExternal Toolとしてインストールできます。環境設定ペインを開き、"ツール"、"外部ツール"の順に移動します。そこから、次の設定で新しいツールを追加します。:
Ruff は実行可能なアクションとして表示されます。:
Via third-party plugin#
Ruff は、Ruffプラグインとしても入手できます。
IntelliJ Marketplace(@koxudaxi)。
Emacs#
Ruff は、Emacs のコアにあるEglot
を介して言語サーバとして利用することができます。保存時の自動フォーマットで Ruff を有効にするには、次の設定を使用します。:
(add-hook 'python-mode-hook 'eglot-ensure)
(with-eval-after-load 'eglot
(add-to-list 'eglot-server-programs
'(python-mode . ("ruff" "server")))
(add-hook 'after-save-hook 'eglot-format))
Ruff は、MELPA でflymake-ruff
として入手できます。:
Ruff は、emacs-ruff-format
としても利用できます。:
あるいは、次の設定を行うことで、Apheleiaフォーマッタライブラリを介して使用することもできます。:
;; Replace default (black) to use ruff for sorting import and formatting.
(setf (alist-get 'python-mode apheleia-mode-alist)
'(ruff-isort ruff))
(setf (alist-get 'python-ts-mode apheleia-mode-alist)
'(ruff-isort ruff))
TextMate#
Ruff は、TextMate のtextmate2-ruff-linter
バンドルからも入手できます。
Zed#
Ruff は Zed エディタの拡張機能として利用できます。インストールするには:
Cmd+Shift+P
でコマンドパレットを開きます。- "zed:extensions"を検索します。
- extensions リストで"ruff"を検索し、"Install"をクリックします。
Python ファイルに Ruff 言語サーバを使用するように Zed を設定するには、次の行をsettings.json
ファイルに追加します。:
{
"languages": {
"Python": {
"language_servers": ["ruff"]
// Or, if there are other language servers you want to use with Python
// "language_servers": ["pyright", "ruff"]
}
}
}
言語サーバを設定するには、lsp.ruff.initialization_options.settings
キーの下にserver settingsを指定します。:
{
"lsp": {
"ruff": {
"initialization_options": {
"settings": {
// Ruff server settings goes here
"lineLength": 80,
"lint": {
"extendSelect": ["I"]
}
}
}
}
}
}
Note
特定の言語に対する複数のフォーマッタのサポートは、Zedバージョン0.146.0
以降でのみ利用可能です。
Ruff フォーマッタを登録し、format_on_save
設定を有効にすることで、保存時に Python コードをフォーマットするように Ruff を設定できます。:
{
"languages": {
"Python": {
"format_on_save": "on",
"formatter": [
{
"language_server": {
"name": "ruff"
}
}
]
}
}
}
```
<!-- You can configure Ruff to fix lint violations and/or organize imports on-save by enabling the`source.fixAll.ruff` and `source.organizeImports.ruff` code actions respectively: -->
`source.fixAll.ruff`と`source.organizeImports.ruff`コードアクションをそれぞれ有効にすることで、リント違反を修正したり、保存時にインポートを整理したりするように Ruff を設定できます。:
=== "Zed 0.146.0+"
```json
{
"languages": {
"Python": {
"format_on_save": "on",
"formatter": [
{
"code_actions": {
// Fix all auto-fixable lint violations
"source.fixAll.ruff": true,
// Organize imports
"source.organizeImports.ruff": true
}
}
]
}
}
}
まとめると、次のsettings.json
を使用して、保存時にインポートをフォーマット、修正、整理するように Ruff を設定できます。:
Note
この構成では、コード・アクションとフォーマッタ言語サーバー設定の正しい順序を使用することが重要です。コード・アクションは、フォーマッタの前に定義して、コード・アクションが適用された後に残りのスタイルの問題がフォーマッタによって確実に処理されるようにする必要があります。