pythonのlinter&formatterを設定する

前回neovimに関連したpython環境を見直したが、ついでにlinterやformatterをちゃんと入れておくことにしたのでメモ

linterの設定

vim-lspにて表示するための設定はこちらを参考にして以下のようになった。
https://qiita.com/tk0miya/items/5a5beb2586c63792ce10

[[plugins]]
repo = 'mattn/vim-lsp-settings'
hook_add = '''
  let g:lsp_settings = {
  \  'pylsp-all': {
  \    'workspace_config': {
  \      'pylsp-all': {
  \        'configurationSources': ['flake8'],
  \        'plugins': {
  \          'pylsp_mypy': { 'enabled': 1 }
  \        }
  \      }
  \    }
  \  }
  \}
'''

configurationSourcesの設定を入れることでflake8がデフォルトで見に行く設定ファイルが読まれるようになる。

linterの設定ファイルは setup.cfg を利用。

[pycodestyle]
max-line-length = 119
exclude =
    .git
    __pychache__
    .tox
    venv*

[mypy]
ignore_missing_imports = True

[isort]
profile=black

ちなみに、最初以下のようにflake8が有効になるようplugin設定して動かしたのだが、その状態でもpycodestyleが有効になっておりflake8の設定は反映されなかった。

  \        'plugins': {
  \          'flake8': { 'enabled': 1 },
  \          'pycodestyle': { 'enabled': 0 },
  \        }

もともとflake8を使っていたというわけではないため、そのままpycodestyleを使うことにし、これ自体の原因は追ってない。

formatter導入

pipxを利用して独立した仮想環境に以下の2つを置いておくことにした

  • isort
  • black

pipxはアプリケーションを個別の仮想環境にインストールするためのもの。 ~/.local/pipx/venvs の下に各アプリケーション用の環境が作られ、cli~/.local/bin に置かれるためここのpathを通しておけばすべてを実行できる。
https://github.com/pypa/pipx

vim-lsp-settingsを使っているのでそちらの仮想環境にもisortはデフォルトで入っている。それに対して手動でsymlinkを貼ってもいいが、変更するときなど手間がかかりそうなのでこちらにいれてしまうことに。

また、vim上でこれらを実行しやすくするpluginもあるようだが、手動で実行するとしても

  • コミット前にやるくらいの頻度
    • black . という形で再帰的にすべてのファイルに適用可能
  • vim上から外部コマンド実行で十分
    • !black %

であるため特にpluginは入れなかった。

参考

https://zenn.dev/yhay81/articles/yhay81-202102-pythonlint https://qiita.com/tk0miya/items/5a5beb2586c63792ce10 https://scrapbox.io/vimemo/Vim%E3%81%A7_python%E3%81%AE%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83%E3%82%92%E6%95%B4%E3%81%88%E3%82%8B_vim-lsp_%E4%BD%BF%E7%94%A8