MicroでPythonで書かれたコードを保存する時に、自動でコードフォーマッターのYAPFとリンターのFlake8が実行するようにしてみます。
※コードフォーマッターがコードを整形し、リンターがコードの書き方の問題点を調べます
google/yapf: A formatter for Python files
Flake8: Your Tool For Style Guide Enforcement — flake8 7.1.0 documentation
最初に上記のライブラリをインストールするためのpipxをインストールします。
pypa/pipx: Install and Run Python Applications in Isolated Environments
$ sudo apt update $ sudo apt install pipx $ pipx --version
1.1.0
pipxのインストールが終了しましたら、今後導入するライブラリ用のパスを設定します。
$ pipx ensurepath $ source ~/.bashrc
※ zshを使用している場合は、.zshenvに
export PATH="$PATH:/home/pi/.local/bin"
を追加した後、
$ source .zshenv
を実行してpipx用のパスを通しておきます。
下記コマンドを実行して、YAPFとFlake8のインストールを行います。
$ pipx install yapf $ yapf --version
yapf 0.43.0
$ pipx install flake8 $ flake8 --version
7.1.1 (mccabe: 0.7.0, pycodestyle: 2.12.1, pyflakes: 3.2.0) CPython 3.11.2 on Linux
MicroでPythonのコードが書かれたファイルを保存した時に自動でYAPFとFlake8を実行するようにします。
$ ~/.config/micro/init.lua
local micro = import("micro") local shell = import("micro/shell") function onSave(bp) if bp.Buf:FileType() == "python" then bp:Save() local _, err = shell.RunCommand("yapf -i " .. bp.Buf.Path) if err ~= nil then micro.InfoBar():Error(err) return end _, err = shell.RunCommand("flake8 " .. bp.Buf.Path) if err ~= nil then micro.InfoBar():Error(err) return end bp.Buf:ReOpen() end end
※ init.luaが既にある場合はコードを適宜修正してください。
補足1
python-lsp-server(pylsp)の設定
$ pipx install python-lsp-server $ pylsp -V
pylsp v1.12.0
$ micro -plugin install lsp $ micro ~/.config/micro/settings.json
{ ... "lsp.autocompleteDetails": true, "lsp.server": "python=pylsp", ... }
※ ...はsettings.jsonで他に追加している設定
※ lsp.autocompleteDetailsをtrueにしておくと、後ほど触れますCtrtl + Space(スペース)の際に表示が見やすくなります。
settings.jsonの編集の後にMicroを起動してみると、~/.config/micro/bindings.jsonに今回のプラグイン用のキーバインドが追加されています。
{ "Alt-d": "command:definition", "Alt-f": "command:format", "Alt-k": "command:hover", "Alt-r": "command:references", "CtrlSpace": "command:lspcompletion", }
Microで.pyの拡張子のファイルを開き、コードの作成途中で、Ctrl + Space(スペース)を押すと、
のような入力補完の機能が使えるようになります。
Ctrl + Spaceで候補を選択肢、Spaceを押すことで決定できます。
関数やメソッドを追加した後にAlt + kを押すと、選択したコードの説明文が出力されるようになります。
補足2
Ctrl + rでPythonのコードを実行できるようにinit.luaを改修します。
local micro = import("micro") local config = import("micro/config") local shell = import("micro/shell") function init() config.TryBindKey("Ctrl-r", "lua:initlua.run", true) end function run(bp) if bp.Buf:FileType() == "python" then shell.RunInteractiveShell("python3 " .. bp.Buf.Path, true, false) end end function onSave(bp) bp:Save() if bp.Buf:FileType() == "python" then local _, err = shell.RunCommand("yapf -i " .. bp.Buf.Path) if err ~= nil then micro.InfoBar():Error(err) return end _, err = shell.RunCommand("flake8 " .. bp.Buf.Path) if err ~= nil then micro.InfoBar():Error(err) return end bp.Buf:ReOpen() end end