【PyCharm】ファイル保存時にlinterとformatterが自動実行されるように設定する
概要
最近、Pythonの開発で使用するエディタをVSCodeからPyCharmに乗り換えたので、PyCharmの設定をしました。
ファイルを保存したときにlinterとformatterが自動実行されるように設定しました。
PyCharmのバージョン
- Community Edition
- バージョン: 2022.2.3
- ビルド: 222.4345.23
使用したツール
ファイル保存時にlinter/formatterを自動で実行
File Watcher is an IntelliJ IDEA tool that allows you to automatically run a command-line tool like compilers, formatters, or linters when you change or save a file in the IDE.
linter / formatter
Your Tool For Style Guide Enforcement
By using Black, you agree to cede control over minutiae of hand-formatting.
isort is a Python utility / library to sort imports alphabetically, and automatically separated into sections and by type.
Mypy is an optional static type checker for Python that aims to combine the benefits of dynamic (or "duck") typing and static typing.
設定手順
ファイル保存時に自動でlinter/formatterが実行されるようにする
ファイルの変更を監視してくれるFile Watcherを使用します。
メニューバーより、PyCharm > Preferencesを選択します。
pluginsを選択し、File Watchersをインストール。
ToolsにFile Watchersが追加されたので、このあとここに各ツールの設定を記述します。
linter/formatterを設定する
Flake8
1. Flake8 - 設定ファイル作成
.flake8を作成し、flake8の設定を記述します。
[flake8]
max-line-length = 100
ignore = W503
2. Flake8 - File Watchers設定
次に、File Wachersの設定を追加して、ファイル保存時にFlake8が実行されるようにします。
メニューバーより、PyCharm > Preferencesを選択します。
Tools > File Watchersを選択して、+ボタンを押します。
File Watchersに以下のように記述します。
3. Flake8 - 動作チェック
ファイルを保存するとflake8が実行されていることがわかります。
Black
1.Black - 設定ファイル
pyproject.tomlを作成し、Blackの設定を記述します。
[tool.black]
line-length = 120
2. Black - File Watchers設定
File Watchersに以下のように記述します。
3. Black - 動作チェック
以下のようにエラーとなるようなコードを書いてみて、
ファイルを保存するとエラーが自動で修正されます。
isort
1. isort - 設定ファイル
pyproject.tomlにisortの設定を追加します。
[tool.isort]
profile = 'black'
2. isort - File Watchers設定
File Watchersに以下のように記述します。
3. isort - 動作チェック
以下のようにimport順が正しくないファイルを書いて、
ファイルを保存するとimport順が自動で修正されます。
mypy
1. mypy - 設定ファイル
pyproject.tomlにmypyの設定を追加します。
[tool.mypy]
warn_unused_configs = True
2. mypy - File Watchers設定
File Watchersに以下のように記述します。
3. mypy - 動作チェック
戻り値がstr
と定義されている関数で、int
を返すようなコードを書くと、
mypyが実行されてエラーが出力されることが確認できました。
Discussion