## 経緯 [[Ruff]]が話題に上がっていて良さそうなのでいじってみたくなった。 <div class="link-card-v2"> <div class="link-card-v2-site"> <img class="link-card-v2-site-icon" src="https://github.githubassets.com/favicons/favicon.svg" /> <span class="link-card-v2-site-name">GitHub</span> </div> <div class="link-card-v2-title"> GitHub - astral-sh/ruff: An extremely fast Python linter and code formatter, written in Rust. </div> <div class="link-card-v2-content"> An extremely fast Python linter and code formatter, written in Rust. - astral-sh/ruff </div> <img class="link-card-v2-image" src="https://opengraph.githubassets.com/3caba2fccc86b30754d5e72c89bbf3055e1221db2b8ab24e678cc47d40823689/astral-sh/ruff" /> <a href="https://github.com/astral-sh/ruff"></a> </div> ## 環境 - [[Windows 11]] - [[Python 3.12]] ## インストール 仮想環境を作ってインストールする。 ```console python -m venv .venv .venv/Scripts/activate pip install ruff ``` ## main.pyの作成 公式のサンプルコードで`main.py`を作成しておく。 ```python from typing import Iterable import os def sum_even_numbers(numbers: Iterable[int]) -> int: """Given an iterable of integers, return the sum of all even numbers in the iterable.""" return sum( num for num in numbers if num % 2 == 0 ) ``` ここからはエディタごとに設定してみる。 ## [[Neovim]] 公式を参考に。 <div class="link-card-v2"> <div class="link-card-v2-site"> <img class="link-card-v2-site-icon" src="https://docs.astral.sh/static/favicon-32x32.png" /> <span class="link-card-v2-site-name">docs.astral.sh</span> </div> <div class="link-card-v2-title"> Integrations | Ruff </div> <div class="link-card-v2-content"> An extremely fast Python linter and code formatter, written in Rust. </div> <a href="https://docs.astral.sh/ruff/integrations/#vim-neovim"></a> </div> > Ruff is also available as part of the coc-pyright extension for coc.nvim. とあるので[[coc.nvim]]でも[[coc-pyright]]が入っていれば使えそう。[[coc-settings.json]]を修正する。 ```diff - "python.formatting.provider": "black", + "python.formatting.provider": "ruff", + "python.linting.ruffEnabled": true, ``` > [!caution] > [[coc-pyright]]で[[Ruff]]対応されたのは最近のため、最新にアップデートしておくこと。 ちゃんと動作していそうだったが、quickfixしようとするとエラーに。 ```error [coc.nvim] Error on applyEdits Error: Change of c:%5CUsers%5Csyoum%5Ctmp%5Cruff-sandbox%5Cmain.py not supported ``` これは[[coc-pyright]]側の問題かな? [[Ubuntu]]で試すとエラーにはならなかったものの、quick fixの修正結果にゴミが混じってエラーになっていた。ここはもう少し安定するまで時間が必要かも。 ### [[🦉OwlMixin]]を使ってみる せっかくなので[[🦉OwlMixin]]を使ってみる。 ```console pip install owlmixin ``` import補完には[[rope]]が必要だった... ```console pip install rope ``` import補完は[[rope]]をインストールすれば動いた。他のquick fixはできないけど。 ```python from owlmixin import OwlMixin, TList class Human(OwlMixin): id: int name: str def main(): tatsuwo = Human.from_dict({"id": 15, "name": "タツヲ"}) mimizou = Human.from_dict({"id": 33, "name": "みみぞう"}) shiroo = Human.from_dict({"id": -1, "name": ""}) message = ( TList([tatsuwo, mimizou, shiroo]) .to_iterator() .filter(lambda x: x.id > 0) .map(lambda x: x.name) .join("\n") ) print(message) if __name__ == "__main__": main() ``` ## [[VSCode]] [[Ruff(VSCode)]]を使う。バージョンは0.1.0。 <div class="link-card-v2"> <div class="link-card-v2-site"> <img class="link-card-v2-site-icon" src="https://marketplace.visualstudio.com/favicon.ico" /> <span class="link-card-v2-site-name">marketplace.visualstudio.com</span> </div> <div class="link-card-v2-title"> Ruff - Visual Studio Marketplace </div> <div class="link-card-v2-content"> Extension for Visual Studio Code - A Visual Studio Code extension with support for the Ruff linter and formatter ... </div> <img class="link-card-v2-image" src="https://charliermarsh.gallerycdn.vsassets.io/extensions/charliermarsh/ruff/2025.22.0/1742565386909/Microsoft.VisualStudio.Services.Icons.Default" /> <a href="https://marketplace.visualstudio.com/items?itemName=charliermarsh.ruff"></a> </div> [[settings.json]]を変更。`pytho.formatting.provider`は非推奨なのでこの機会に削除。 ```diff - "python.formatting.provider": "black", "[python]": { "editor.formatOnType": true, + "editor.defaultFormatter": "charliermarsh.ruff" }, ``` 流石、[[Ruff]]公式の[[VSCode Extension]]なのでしっかり動く。 ## [[IntelliJ IDEA]] 非公式の[[📒IntelliJプラグイン]]はあるらしい。 <div class="link-card-v2"> <div class="link-card-v2-site"> <img class="link-card-v2-site-icon" src="https://docs.astral.sh/static/favicon-32x32.png" /> <span class="link-card-v2-site-name">docs.astral.sh</span> </div> <div class="link-card-v2-title"> Integrations | Ruff </div> <div class="link-card-v2-content"> An extremely fast Python linter and code formatter, written in Rust. </div> <a href="https://docs.astral.sh/ruff/integrations/#pycharm-unofficial"></a> </div> [[Ruff(IntelliJ)]]をインストールする。バージョンは0.0.24。[[IntelliJ IDEA]]のバージョンは2023.2。 まずは[[BlackConnect]]を無効化。競合するので。 [[Ruff(IntelliJ)]]の設定は赤枠部分をデフォルトから変更。 ![[Pasted image 20231029141600.png]] ただ、`Run ruff when the python file is saved`は保存時にフォーマットされなそう... <div class="link-card-v2"> <div class="link-card-v2-site"> <img class="link-card-v2-site-icon" src="https://github.githubassets.com/favicons/favicon.svg" /> <span class="link-card-v2-site-name">GitHub</span> </div> <div class="link-card-v2-title"> Files are not formatted on save · Issue #297 · koxudaxi/ruff-pycharm-plugin </div> <div class="link-card-v2-content"> Describe the bug I've enabled Run ruff when the python file saved setting, however it does not format (as in ruf ... </div> <img class="link-card-v2-image" src="https://opengraph.githubassets.com/80c46174929b64d589ae632d6ae395ac2773cff1628903a5818c8578b64df8bc/koxudaxi/ruff-pycharm-plugin/issues/297" /> <a href="https://github.com/koxudaxi/ruff-pycharm-plugin/issues/297"></a> </div> また、`Use ruff-lsp (Experimental) for PyCharm Pro/IDEA Ultimate`はREADMEにも記載のとおり、quick fixまでは適応してくれない。不要importとか。 以上から、現時点での設定は以下が望ましい。 ![[Pasted image 20231029143833.png]] [[Actions on Save]]の設定で、ファイルを保存したときに自動フォーマットできるようにすればOK。 ![[Pasted image 20231029144301.png]]