前提
- Lazyvimを利用
- Linter/Formatterはruffを使う
- 元々プロジェクトはblack/flake8/isortスタックだったが、これらの設定を頑張るよりruffに乗り換えるほうが建設的だと思い移行した(というか、チームメンバーが移行してくれた)
- typecheckはpyrightを使う
- Python始めたばかりなのでこだわりがない
- 使い込んでいって気になったらmypyとかも試してみたい
- Python始めたばかりなのでこだわりがない
設定
venvの自動読み込み
$ source .venv/bin/activateしてからnvimを起動すればvenvをlspに読み込ませることができるが、毎回やるのも大変なので起動時に自動で読み込ませるようにする。
実際の設定は以下をそのまま使って完璧に動作した。
Pythonプラグインの有効化
lazyvimにはExtraというプラグイン機能(設定のプリセット)がある。
:LazyExtraでプラグインの有効無効を切り替えることができ、今回はPythonを有効にする。
ちょっとわかりづらいのだが公式ドキュメントに書いてあるのはExtraを有効化したときに設定される設定一覧。Extraによってはconfig.lua経由で設定を変更することができる。
basedpyrightの有効化
config.luaを編集してbasedpyrightを有効化する。
vim.g.lazyvim_python_lsp = "pyright"
通常のpyrightではcode actionでautoimportが使えない。 basedpyrightはvscodeのクローズドソースであるpylanceの機能が組み込まれたlspで、これを使うとneovimでもvscode相当の補完機能が使えるようになる。らしい。
余談だがトップページでpyrightメンテナの保守的な姿勢を批判していてなかなか不穏である。
the maintainer of pyright closes valid issues for no reason and lashes out at users
これだけで補完も型チェックもバッチリ効く。 ruffの設定はプロジェクトのpyproject.toml / ruff.tomlが読み込まれて使われるので特にnvim側での設定は不要。ruff自体にlspが内蔵されているらしい(リアルタイムでのconfig変更とかはうまく効いてないが、そんなに問題ではないかな)。