MicroでPHPで書かれたコードを保存する時に、自動でコードフォーマッターのPHP-CS-FixerとPHPに内蔵されているリンターが実行するようにしてみます。
※コードフォーマッターがコードを整形し、リンターがコードの書き方の問題点を調べます
PHP-CS-Fixer/PHP-CS-Fixer: A tool to automatically fix PHP Coding Standards issues
最初に上記のライブラリをインストールするための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
if type(err) ~= "userdata" then
micro.InfoBar():Error(err)
end
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
if type(err) ~= "userdata" then
micro.InfoBar():Error(err)
end
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の設定
$ 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
if type(err) ~= "userdata" then
micro.InfoBar():Error(err)
end
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