Die Datei, die Formatierungsdiskussionen beendet

Die Datei, die Formatierungsdiskussionen beendet

- Matt

Jedes Team hat diese Diskussion einmal geführt, manche jedes halbe Jahr erneut. Tabs oder Leerzeichen, var oder ausgeschriebener Typ, geschweifte Klammer in dieselbe Zeile oder darunter. Am Ende entscheidet nicht das bessere Argument, sondern wer zuletzt gespeichert hat.

Eine .editorconfig im Wurzelverzeichnis beendet das, weil die Regel dann im Projekt steht und nicht in den Einstellungen einzelner Leute.

root = true

[*]
charset = utf-8
end_of_line = crlf
insert_final_newline = true
trim_trailing_whitespace = true

[*.cs]
indent_style = space
indent_size = 4

dotnet_sort_system_directives_first = true
csharp_new_line_before_open_brace = all
csharp_style_var_when_type_is_apparent = true:suggestion

[*.{xml,csproj,props,targets}]
indent_size = 2

Das Interessante ist der Teil hinter dem Doppelpunkt. suggestion, warning oder error bestimmen, wie ernst ein Verstoß genommen wird. Damit lässt sich ein Stil einführen, ohne dass am ersten Tag zweihundert Fehler im Build stehen: erst suggestion, nach dem Aufräumen warning.

Bestehenden Code angleichen

dotnet format

Das formatiert die ganze Projektmappe nach den Regeln und erzeugt dabei einen riesigen Commit, der praktisch jede Datei anfasst. Damit macht er git blame unbrauchbar, denn plötzlich steht überall derselbe Name und dasselbe Datum.

Deshalb sollte dieser Commit allein stehen und danach ausgeklammert werden. Seine Prüfsumme kommt in eine Datei .git-blame-ignore-revs, dann noch:

git config blame.ignoreRevsFile .git-blame-ignore-revs

Ab da überspringt git blame den Formatierungs-Commit und zeigt weiterhin, wer den Inhalt geschrieben hat, statt wer ihn umformatiert hat. Das ist die Zeile, die am häufigsten vergessen wird, und man merkt es erst Monate später, wenn man wissen will, warum eine Stelle so aussieht.

Die Grenze

Eine .editorconfig regelt Formatierung, keine Architektur. Sie verhindert keine 400-Zeilen-Methode und kein ViewModel, das die Datenbank kennt. Was sie erledigt, ist die Klasse von Diskussionen, die keinen Erkenntnisgewinn bringt. Genau deshalb lohnt sie sich.