perlnitpick 介紹

作者:   發佈於: ,更新於:   #perl #reviewdog #perlnitpick

perlnitpick 是個對 perl 程式碼提出變更建議的程式,最近才將起 0.01 版給發布了。其雛形其實已經完成一兩年,但一直覺得使用方式不太方便,也一直沒什麼想法,就一直擱置著沒管。直到最近摸索 GitHub Action 時發現能透過 reviewdog 在 PR 中提供變更建議,才又有所推進。

在 2018 年 TPC::Glasgow 研討會上我給了一場演講 How to fix your code by coding the fixer,在演講中我提到在 PR 互評過程中有一些小毛病的修正應是可以讓程式來自動完成的。這想法的源頭是則是來自目前工作上的隊友,由於大家對各種小細節很是挑剔(剛加入時由於各種習慣不同而受了不少「文化衝擊」),才讓人覺得其實有不少部分應該交給機器來幫忙訂正。

書寫慣例與編輯應盡量交給機器去自動解決,而人類的腦力應該用在解題。雖然目標如此,但這主題本身等於是由靜態分析出發,找出與慣例不合的部分,然後自動修改。完全是個不小的題目。總之就是先把做得到的部分做了吧。

perlnitpick 所做的其實只是微小規模的改寫。例如將這段程式碼:

use File::Temp;
use Foobar;
use File::Temp;

... 改寫成這樣:

use File::Temp;
use Foobar;

其中 use File::Temp; 出現了兩次,以 use 的特殊語意而言,是多餘的。

如這般有點像是粗心大意而寫出來的雜音,如果在互評時能由機器先改好,那人類就不必再花心力在盯這類的小毛病,也就能有更多時間去注意解題方法、架構是否適當、所用的各項呼叫是否與系統相合之類的,可能會造成影響深遠的問題。

perlnitpick 能對程式碼檔案進行就地修改。配合 reviewdog ,perlnitpick 所做的修改,就能成為 PR 中的修訂建議。讓原作者能按個「同意」鈕就完成修改,而如果原作者不同意修改,只要無視即可。整體上還算是保留了足夠的彈性。

接下來應該會開始研究 reviewdog 那邊定義出的 rdformat,這樣就能夠直接將理由一併加在修訂建議當中。