Help! Clang Tidy
-
Hallo!
Ich bin ein kompletter Anfänger und wollte mehr über Code Beautifier und Clang Tidy lernen. Ich habe das noch nie gemacht und brauche Eure Hilfe
Ich habe eine Liste von Formatierungsregeln, die ich gerne abarbeiten möchte.
Ich habe mir 15 Formatierungsregeln überlegt, die ich befolgen möchte:
keine /.../ Stilkommentare verwenden
Beschriftungen gut lesbar machen
konsistente Zeilenenden sicherstellen
Boolesche Ausdrücke sauber layouten
Leerzeichen um binäre Operatoren ausgleichen
kein Leerzeichen nach Nicht-Wort-Präfix-Operatoren
kein Leerzeichen vor Postfix-Operatoren
nicht mehr als 60 Zeilen in einem Block
nicht mehr als 60 Zeichen in einer Kommentarzeile
Vermeiden Sie mehr als 500 bis 1000 Zeilen pro Datei
vermeiden Sie mehr als 140 Zeichen pro Zeile
jede Anweisung oder Deklaration in einer neuen Zeile beginnen
Break, Continue und Return zur tieferen Verschachtelung bevorzugen
identifizieren, um die Verschachtelung und Fortführung von Anweisungen und Deklarationen zu berücksichtigen
Vermeiden Sie mehr als drei Ebenen der Verschachtelung
Raum um geschweifte, geklammerte und eingeklammerte Bereiche ausgleichenWie sind diese Dinge mit ClangTidy möglich?
Könntet ihr mir bitte helfen?
Vielen Dank im Voraus!LG
Shirl
-
Abgesehen davon dir auszudenken was du gerne machen möchtest: was hat du denn schon unternommen um zu deinem Ziel zu kommen? Wo/woran genau bist du gescheitert?
-
Eigentlich benutzt man
clang-format
zum Umformatieren der Datei, also für sowas wie "Leerzeichen um binäre Operatoren ausgleichen", Zeilenlängen etc. Das Tool arbeitet auf den Source-Dateien, hat aber kein vollständiges Verständnis für den Code, liest also z.B. keine Header ein.clang-tidy
dagegen ist für volles Code-Verständnis ausgerichtet und wird verwendet, um im Code nach Problemen zu suchen und ggf. Verbesserungen zu machen. Also sowas wie eine Index-Loop durch eine Range-Loop zu ersetzen. Oder auch Konstrukte zu finden, die z.B. out-of-bound oder anderes UB produzieren. Guckst du hier: https://clang.llvm.org/extra/clang-tidy/checks/list.html - z.B. sowas hier gibt es dort: https://clang.llvm.org/extra/clang-tidy/checks/readability-braces-around-statements.html
-
ihr habt natürlich recht. Ich möchte gerne mit Clang-Format arbeiten.
Hierzu habe ich mir auch schon die Dokumentation durchgelesen und gesichtet und mir ein config-file angelegt.Grundsätzlich scheitert es bei mir allerdings an der Umsetzung, da ich völlig neu in dieser Thematik bin und mir unsicher darin bin, ob die Befehle das verursachen, was sie sollen.
Demnach scheitert es wohl bereits an der Eingabe.Liebe Grüße
-
Wo ist denn das Problem? Ich fange gerne mit nur ein paar Optionen an, also erstelle z.B. folgende
.clang-format
im Wurzelverzeichnis deines C++-Projekts.BasedOnStyle: llvm AllowShortFunctionsOnASingleLine: InlineOnly AlwaysBreakTemplateDeclarations: true BreakBeforeTernaryOperators: true IndentWidth: 4 AccessModifierOffset: -4 ColumnLimit: 95
(wie du hier siehst, bevorzuge ich 4 Zeichen Indent statt 2 (default) und erlaube 95 Zeichen/Zeile (default 79 oder 80?))
Und dann kannst du einfach
clang-format -style=file FILENAME.cpp
ausführen (wobei du natürlich FILENAME.cpp durch deine Datei ersetzen musst). Noch praktischer ist es natürlich, wenn du das über den Editor / die IDE direkt aufrufst.
-
Hi @wob
Ja, ich habe einzelne Befehle wie
BasedOnStyle: LLVM
IndentWidth: 4
UseTab: Never
ColumnLimit: 80
Language: Cpp
Standard: Auto
DerivePointerAlignment: false
PointerAlignment: Left
AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: None
AllowShortLoopsOnASingleLine: false
IndentCaseLabels: true
PenaltyBreakComment: 0
PenaltyBreakString: 0
BreakBeforeBraces: Linuxbereits herausgefunden und angewendet.
Allerdings bin ich mir bei dem Rest unsicher, ob es hierfür geeignete Optionen gibt, die meinen Regeln gerecht werden.
-
@shirl sagte in Help! Clang Tidy:
nicht mehr als 60 Zeilen in einem Block
Naja, sowas wie "nicht mehr als 60 Zeilen in einem Block" wirst du damit wohl nicht lösen können, denn dann müsstest du ja den Code umschreiben - ne Funktion erzeugen usw.
Für zu langen Code in einer Funktion kannst du z.B. https://clang.llvm.org/extra/clang-tidy/checks/readability-function-size.html verwenden. Aber nicht für alle deine Bedingungen wird es fertige Checks geben.
-
Hi @wob!
Vielen Dank für deine Hilfe!