MicroでPythonのコードフォーマッターを使えるようにする

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が既にある場合はコードを適宜修正してください。

Microのinit.luaを試す


補足1

python-lsp-server(pylsp)の設定

python-lsp/python-lsp-server: Fork of the python-language-server project, maintained by the Spyder IDE team and the community

$ 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
同じカテゴリーの記事
マインクラフト用ビジュアルエディタを開発しています。
詳しくはinunosinsi/mcws_blockly - githubをご覧ください。