つくった
これのPHP版が欲しいhttps://t.co/vP8dXWbeBc
— 今日も誰かのにちようび(おいしい鮭親子丼) (@o0h_) 2023年8月11日
Google先生が0.43 秒で見つけてくれましたhttps://t.co/TsSGEJqwxs
— 今日も誰かのにちようび(おいしい鮭親子丼) (@o0h_) 2023年8月11日
なんで
ってことで、試し書き程度にやってみたのでした。
(ちゃんと動くのかな・・・?そんなにしっかり確かめてない。なんとなく行けるのかな、って所まで作ったので晒す)
(ちなみに、関数のPHPDocは全部AI Assistantさんがやってくれました)
人に説明や証明する事が面倒くさくてぇ、受け取った側も億劫でぇ・・・みたいなものが世の中にあると、
「説明や証明をしなくて済めばいいのに!あるいは、どっかの誰かが代わりにやってくれれば良いのに!」って思いますよね。
いちいち、そういう”くだらなさ”で仕事の場面やらでストレス溜めたくないなぁ〜って思いつつ、
でも「ガガッと気になったところをぶち潰して行きたい衝動に駆られることはある」のも自分にとっては真なので、
サボるための道具を作って遊んでみるか?というアレです。
モノタロウさんの記事、初めて見た時にメチャクチャ衝撃を受けて。「いいなぁ!あれ、俺も欲しい!!」という感じで。
「コメントとかインデントとか改行とかを変えましたよ!!」みたいな、PHP-CS-Fixerなどでガガーっとやるような変更について、どうでもいいからLGTMくれよーーーって交渉や説得・説明が面倒くさすぎます。
で、「何かASTとかそういうの触れてみたい、遊んでみたい!」とも思っていたので再発明でございます。
どんな感じの
といっても、ツイートで触れている記事で紹介されている actionsを見ながら、写経したようなもんです。 github.com
変えたところとしては
- 「OKか否か」だけでなく
- php-astのutil.phpへの依存を外したいな、外部ファイルを使わなくて済むようにしたいな
- php-ast/util.php at master · nikic/php-ast · GitHub を見て、劣化したロジックを直接埋め込むようにした
- GItの連携を前提にしているから、gitの操作もPHPに埋め込んじゃおうかな
- そういう場合はどんな感じにしていく?ってなった時に
- まずは「そういえばComposerはGitDownloader使っているよな」と思って眺めたり composer/src/Composer/Downloader/GitDownloader.php at main · composer/composer · GitHub
- たまたま動画を観ていたnazonohito51さんで「Gitを使うことで〜」という言及があったので、コードも眺めたり sandbox/src/PHPStan/Git/Repository.php at master · nazonohito51/sandbox · GitHub
とかとかやりました。
比較したいブランチ名やコミットハッシュを2つ渡してあげる〜みたいな使い方をします。
2つ目は、省略したらHEAD
を利用します。
$ php prototype.php main tmp # Check diff between main...tmp | main | tmp | | ---- | ---- | | 48261f6f838b529b003fa3a26eb770ea2b7bf06c wip | 6c0c3b15f07051277993e24b7ce876e0a5baa3c4 Create README | ## Diff ### non-PHP Files | filename | status | | ---- | ---- | | README | A | ### PHP Files | filename | status | BASE | HEAD | ast-changed | | ---- | ---- | ---- | ---- | ---- | | hello.php | M | b9b45a8d7d4608bce4541443e0db1ec7 | b9b45a8d7d4608bce4541443e0db1ec7 | NO CHANGE | | prototype.php | M | 39bfc6a9f6632f1723bc13d5b234c396 | 3278e5a8d39c10c4cb30b3232af507d7 | | | src/Command/EchoHashCommand.php | D | f5612c756ba27d3be6a479387ee97dcd | | | | src/Parser/Parser.php | D | db232594d101bc1a7e4f40e67e6dc54c | | | | src/Parser/Validation.php | D | 69850a9556020ed7d4234cc13f1d1c57 | | |