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 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の設定
$ 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