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

MicroでPHPで書かれたコードを保存する時に、自動でコードフォーマッターのPHP-CS-FixerとPHPに内蔵されているリンターが実行するようにしてみます。

※コードフォーマッターがコードを整形し、リンターがコードの書き方の問題点を調べます

PHP-CS-Fixer/PHP-CS-Fixer: A tool to automatically fix PHP Coding Standards issues


最初に上記のライブラリをインストールするためのComposerをインストールします。

Composer


当記事執筆時のComposerの最新版のバージョンは2.8.6でして、下記のコマンドでComposerをインストールします。

$ cd ~
$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
$ php -r "if (hash_file('sha384', 'composer-setup.php') === 'dac665fdc30fdd8ec78b38b9800061b4150413ff2e3b6f88543c636f7cd84f6db9189d43a81e5503cda447da73c7e5b6') { echo 'Installer verified'.PHP_EOL; } else { echo 'Installer corrupt'.PHP_EOL; unlink('composer-setup.php'); exit(1); }"
$ php composer-setup.php
$ php -r "unlink('composer-setup.php');"
$ sudo mv composer.phar /usr/local/bin/composer
$ composer -V
Composer version 2.8.6 2025-02-25 13:03:50
PHP version 8.2.26 (/usr/bin/php8.2)
Run the "diagnose" command to get more detailed diagnostics output.

Composer経由でインストールしたライブラリを簡単に使えるようにパスを通しておきます。

$ micro ~/.profile
export PATH=$PATH:$HOME/vendor/bin
$ source ~/.profile



下記コマンドを実行して、PHP-CS-Fixerのインストールを行います。

composer require --dev friendsofphp/php-cs-fixer
$ php-cs-fixer --version
PHP CS Fixer 3.72.0 Persian Successor by Fabien Potencier, Dariusz Ruminski and contributors.
PHP runtime: 8.2.26

Microでコードを保存した時にPHP-CS-Fixerが自動で実行するようにします。

$ ~/.config/micro/init.lua
local micro = import("micro")
local shell = import("micro/shell")

function onSave(bp)
	if bp.Buf:FileType() == "php" then
		bp:Save()
		local _, err = shell.RunCommand("php-cs-fixer fix " .. bp.Buf.Path)
		if err ~= nil then
			micro.InfoBar():Error(err)
			return
		end

		bp.Buf:ReOpen()
	end
end

動作確認の為に、Microを起動して下記のPHPのコードを用意します。

$ micro ~/hoge.php
<?php
$i = 0;
if ($i == 0) {
echo "hoge";
}

Micro上で上記のコードを保存したら、

<?php

$i = 0;
if ($i == 0) {
    echo "hoge";
}

のようにコードが自動で整形されます。




Microでコードを保存した時にPHPのリンターが自動で実行するようにします。

$ ~/.config/micro/init.lua
local micro = import("micro")
local shell = import("micro/shell")

function onSave(bp)
	if bp.Buf:FileType() == "html" or bp.Buf:FileType() == "javascript" then
		bp:Save()
		local _, err = shell.RunCommand("prettier " .. bp.Buf.Path .. " --write")
		if err ~= nil then
			micro.InfoBar():Error(err)
			return
		end

		local output, _ = shell.RunCommand("php -l " .. bp.Buf.Path)
		local strings = import("strings")
		if strings.Index(output, "No syntax errors") < 0 then
			micro.TermMessage(output)
			return
		end

		bp.Buf:ReOpen()
	end
end

動作確認の為に、Microを起動して下記のPHPのコードを用意します。

$ micro ~/hoge.php
<?php
$i = 0;
if ($i == 0) {
echo "hoge";

Micro上で上記のコードを保存したら、

PHP Parse error:  Unclosed '{' on line 4 in hoge.php on line 7
Errors parsing hoge.php

のような内容が出力されました。




補足1

Intelephenseの設定

Intelephense

$ npm install -g intelephense
$ micro -plugin install lsp
$ micro ~/.config/micro/settings.json
{
	...
	"lsp.autocompleteDetails": true,
	"lsp.server": "php=intelephense --stdin",
	...
}

※ ...はsettings.jsonで他に追加している設定

※ lsp.autocompleteDetailsをtrueにしておくと、後ほど触れますCtrtl + Space(スペース)の際に表示が見やすくなります。

※ @ToDO 操作方法が不明


補足2

Ctrl + rでPHPのコードを実行できるようにinit.luaを改修します。

$ ~/.config/micro/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() == "php" then
		shell.RunInteractiveShell("php " .. bp.Buf.Path, true, false)
	end
end

function onSave(bp)
	if bp.Buf:FileType() == "php" then
		bp:Save()
		local _, err = shell.RunCommand("php-cs-fixer fix " .. bp.Buf.Path)
		if err ~= nil then
			micro.InfoBar():Error(err)
			return
		end

		local output, _ = shell.RunCommand("php -l " .. bp.Buf.Path)
		local strings = import("strings")
		if strings.Index(output, "No syntax errors") < 0 then
			micro.TermMessage(output)
			return
		end

		bp.Buf:ReOpen()
	end
end
同じカテゴリーの記事
マインクラフト用ビジュアルエディタを開発しています。
詳しくはinunosinsi/mcws_blockly - githubをご覧ください。