-
Notifications
You must be signed in to change notification settings - Fork 168
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ソースファイル末尾の空行を一括削除する #1170
ソースファイル末尾の空行を一括削除する #1170
Conversation
PR作成時に叩いたコマンド $array = Get-ChildItem . -File -Include *.h -Recurs -Name
foreach($file in $array) {
(Get-Content -Path $file -Encoding UTF8BOM | out-string).Trim() | Set-Content -Path $file -Encoding UTF8BOM
}
$array = Get-ChildItem . -File -Include *.cpp -Recurs -Name
foreach($file in $array) {
(Get-Content -Path $file -Encoding UTF8BOM | out-string).Trim() | Set-Content -Path $file -Encoding UTF8BOM
} |
具体的にどの git クライアントのどの設定なんでしょうか? |
✅ Build sakura 1.0.2563 completed (commit 172893753e by @berryzplus) |
標準のgitコマンドで、差分を表示するときに
( |
世の中にはたくさんのGUIツールが存在しますが、 Git の doc book にぼんやりとした説明がありました。
実際どういう動きになるか試していませんが、 調べてみた感じ、主に git diff -check で問題が出る話のような印象を受けました。 ファイル内の改行については2つの考え方があるっぽいです。
サクラエディタ内部は、基本的にEOL方式なんだけど、 このPRでその辺の技術仕様を整理したいかというとそうではないので、 |
確認方法ありがとうございます。自分の方でも確認しました。 確認に使用した git クライアント
その設定について調べてみました。 下記の6つの設定が有ります。
先頭の3つは初期状態で有効で、後半の3つは初期状態では有効になっていません。 Windowsで普段テキストファイルを作成すると改行コードがCRLFの事が多いですが、 さて、ソースファイル末尾の空行に関連している設定ですが、 |
自分は普段 TortoiseGit 経由で使う事が多いんですが、これは Git for Windows の git.exe を使ってるみたいですね。libgit2 を出来るだけ使わせる
設定の説明読んでるだけだと挙動がよくわからないので実際に確認してみました。
ファイル末尾の改行ですが1行は余白が有った方が良いという人もいなくも無いのか、1行だけの改行であればデフォルトで有効になっている CLI の git は軽くて良いんですが出力内容があまり視覚的にリッチではないので、最近は必要に迫られない限り普段使っていません。この警告の存在に今まで気づいてませんでした。まぁ個人的にはぶっちゃけどうでもいい問題な気がしますが、そんな事を言うとこだわりの塊のような人に |
技術的根拠は「ついで」です。 メインの主張は「意味があるかどうか分からないファイル末尾の空行を削除すれば、空行に込められた意図を邪推する必要がなくなる結果、コードを分かりやすくできるんじゃないか」ということです。
あと、これですが、今日検証してみた結果、キャンセルになりそうです。 |
POSIX的には行は
GitHub上だと、代わりに |
berryzplus さんの説明にも有りましたが、行が ファイル末尾が改行コードで終わっていない問題の方がよりメジャーですね、たまにファイルの最終行に改行入れない人がたまにいて…。gcc は警告出してくれますね。ファイル終端が改行で終わっていないとCプリプロセッサで #include する時の繋がり方に影響出そうな気がするので必要だね…と自分は理解してました。 なお、最終行が改行コード付きの空行で終わっている場合でも、 \n
#include <stdio.h>\n
\n
int main(int argc, char* argv[])\n
{\n
return 0;\n
}\n
\n k-takata さんの説明だとこれも警告が出るような認識に見えますが少なくとも自分の環境では出ないですね。。おま環なんでしょうか…。 そして最終行とその前の行も改行コードだけの空行の場合だと \n
#include <stdio.h>\n
\n
int main(int argc, char* argv[])\n
{\n
return 0;\n
}\n
\n
\n これまぁ…連続する改行コードは |
ファイル末尾の余分な装飾とか改行、とかは別に調整されても実害は無いので良いと思いますが、インデントのスタイルを統一とかの方向性まで走らないといいなぁと思います。人の好みは千差万別だし、自動フォーマッタは出来が悪いし、こういう事に意識を振り向けるのってまるで孫正義の前髪のような空虚さを感じます。 過去に sakura-editor/management-forum#29 で色々コメントが出て意見が別れました。まぁ他の人がやりたいなら止められません…。 |
自分のところだと出ますね。 |
自分のところでも出せるようになりました。
下記のような場合に警告が出る事を確認しました。
|
なんだろな・・・。 「この場合は付ける」、「この場合は付けない」みたいにルール細分化するより、 ただ、色々整理してきた中で今回出したPRの対応ってPOSIX方式じゃないなって気付いて「う~む」となってる感じです。 POSIX方式のファイル末尾
このPRのファイル末尾
少し考えたいので、 |
|
違います。それだと警告が出ます。 |
あ、本当ですね。
|
了解です。 |
違いを気にする人はルール決めて統一したくなるんでしょうね。 スペース派 vs タブ派 のように有る意味どうでも良い事で論争が生まれるのはよくありますね。人によっては未だに1行80文字じゃないと嫌だと主張してくる事もあり窮屈な世の中だなと感じます。 |
誤解はしてないと思いますが、やりたかったのは根拠不明なレガシーの排除です。 新規で入れるものに対して制約をかける内容じゃないし、 たとえばCLangに対応しようとしたら空行1個ないとダメだった(事実無根)とか、 あるかも知れない主張の根拠 末尾改行の有無の話とは異なり、 リモートホストにターミナルで入って作業する場合には、 なので、こういう話をちゃんと理解してる人が言う、 初めてコンピューター触ったときから時間が止まってるおっさんの言う、 ただの妄信と、一定の根拠に基づいた選択は、違うと思っています。 自分のポリシーが「ただの妄信」なのか、違うのか、 |
うーん、C++ で書かれてるソースコードが1行80桁とか結構無理がある気がするんですけど…。 |
まぁ、状況により、です。 C++ソースコードをターミナル経由で編集してビルドする機会はめったにない・・・ C++ソースコードは 1行あたり80桁 収めるべきだ! 理由があるならそれを吟味するし、理由がないならそれは放置するだけっす。 |
意見が分かれる場合にどう折り合いを付けるか的な話にもなりますが、自分とは意見が一致しない相手がいた場合、その人はその人で多分ちゃんとした理由があるとは思うんですよね。それが相手に伝わるようにちゃんと表現しているかはコミュニケーションの話なのでおいておいて。 で、仮に誰かが |
…empty_lines_at_the_end_of_file ソースファイル末尾の空行を一括削除する
PR の目的
ソースファイル末尾の空行を一括削除します。
削除することにより、空行に込められた意図を邪推する余地がなくなるので、「結果としてソースコードが分かりやすくなる」と考えています。
Gitクライアントには、ファイル末尾の空行を検知して警告する機能がついています。
オプション設定なので「有効にしなきゃいいだけ」ではありますが、警告が出るようなファイルをリポジトリに入れとくのもキモいので一括で対応してしまいたいと思います。(追記:デフォルトで有効なオプションで、
git diff -check
すると警告が出るようです。)カテゴリ
PR の背景
#1168 (comment)
↓
↓
↓
PR のメリット
自明なので略。
PR のデメリット (トレードオフとかあれば)
あとで必要になるかも知れないものも含めて、hとcppのすべての末尾空行を削除します。
⇒ 必要になったときに増やせばいい、ってことで特に問題はないと思っています。
PR の影響範囲
関連チケット
#1168
#1169
参考資料
https://qiita.com/sgyt/items/a3151ec01815f9151de5