投稿

11月, 2018の投稿を表示しています

GO言語のgofmtの-tabオプションは、v1.2以降使えない

イメージ
こんにちは、ASD熊本の菊池です。

最近業務でGO言語を触る機会があったのですが、
インデントは必ずタブでそろえるという慣習に少し苦戦していました。

GO標準フォーマッタであるgofmtは、スペースをタブに変換してくれるのですが、
既にスペースインデントでGitに上げてしまっていた場合は比較が多少面倒...といった具合です。

gofmtにタブを使わないオプションがないか調べたところ、
「gofmtは、-tab=falseオプションを使えばスペースでインデントしてくれる」
という記事を見かけました。しかし...



そんなオプションは知らんとGOに突き返されます。

まさかバグじゃないだろうなと本家のGitHubを覗いてみたところ、
バージョン1.3を境に-tabオプションが削除されていることを確認できました。
更にgofmtのコミットも確認したところ、理由とおぼしき記述が見られました。

私訳:
 これらのフラグを持つことは「gofmtされたはず」のコードとして容認してもいい、と誤解させます。
 組織がgofmtを内部的に異なる設定で使用したい場合、gofmtを簡単に変更することができますが、
 オープンソースのコミュニティが使用する "gofmt"では、この古いスイッチをサポートすべきではありません。
 -commentsフラグも削除します。

 "cmd/gofmt: remove -tabwidth and -tabs flags・golang/go@014f3dc・GitHub"より引用
https://github.com/golang/go/commit/014f3dcc837cb6789076cff4fccaa3bd221f823e

この修正の経緯としては、Git上で"gofmtの-tabs、-tabwidthフラグは削除されるべき"
という旨のIssueが挙げられていたことから始まっていたようです。

意見のいくつかを要約すると...
・-tab,-tabwidthはGO言語の初学者を混乱させる可能性がある。
・-tab,-tabwidthされたコードは、gofmtを通したGO標準のコードとは言い難い。
・この機能を削除したところで、スペース派の心が変わることもないだろう。

 "cmd/gof…