Übersicht
clang-tidy
ist ein Werkzeug aus dem llvm Toolkit, welches statische Codeanalyse durchführt. Das bedeutet, dass der Code an sich auf bestimmte Muster oder Eigenarten überprüft wird, ohne diesen auszuführen.
Dokumentation: https://clang.llvm.org/extra/clang-tidy/
clang-tidy
Einführung clang-tidy
ist ein Terminal basiertes Tool, welches grundsätzlich zwei Eingaben benötigt:
- Eine Auflistung an durchzuführenden Checks
- Eine oder mehrere Quellcodedateien, welche überprüft werden sollen
Die Liste an Checks kann dabei entweder als Parameter übergeben werden, oder aber werden aus einer Datei namens .clang-tidy
gelesen, die entweder im Projekt oder in Ihrem Homeverzeichnis liegt.
Einbindung in QtCreator
clang-tidy
kann auch in QtCreator eingebunden werden. Probleme, die durch die statische Codeanalyse ermittelt werden, werden in QtCreator als "gelbe Banner" rechts neben dem Code angezeigt.
Die Einstellungen hierzu finden Sie unter "Settings->Analyzer". Dort lassen sich auch die aktivierten Checks konfigurieren, wahlweise über eine GUI oder aber durch den Button "Prüfungen als Zeichenkette bearbeiten". Bei letzterem kann auch die Konfiguration einer .clang-tidy
Datei importiert werden.
Welche Checks standardmäßig aktiv sind, scheint von Version zu Version von QtCreator zu schwanken.
.clang-tidy
Datei
Beispielhafte Der folgende Code zeigt eine beispielhafte Konfiguration so wie ich sie aktuell verwende. Diese kann entweder in eine .clang-tidy
Datei kopiert werden und/oder in die Analyzer Konfiguration von QtCreator übernommen werden.
-*,bugprone-argument-comment,bugprone-assert-side-effect,bugprone-bad-signal-to-kill-thread,bugprone-bool-pointer-implicit-conversion,bugprone-branch-clone,bugprone-copy-constructor-init,bugprone-dangling-handle,bugprone-dynamic-static-initializers,bugprone-exception-escape,bugprone-fold-init-type,bugprone-forward-declaration-namespace,bugprone-forwarding-reference-overload,bugprone-inaccurate-erase,bugprone-incorrect-roundings,bugprone-infinite-loop,bugprone-integer-division,bugprone-lambda-function-name,bugprone-macro-*,bugprone-misplaced-*,bugprone-move-forwarding-reference,bugprone-multiple-statement-macro,bugprone-narrowing-conversions,bugprone-not-null-terminated-result,bugprone-parent-virtual-call,bugprone-posix-return,bugprone-signed-char-misuse,bugprone-sizeof-*,bugprone-string-*,bugprone-suspicious-*,bugprone-swapped-arguments,bugprone-terminating-continue,bugprone-throw-keyword-missing,bugprone-too-small-loop-variable,bugprone-undefined-memory-manipulation,bugprone-undelegated-constructor,bugprone-unhandled-self-assignment,bugprone-unused-*,bugprone-use-after-move,bugprone-virtual-near-miss,clang-*,cppcoreguidelines-avoid-c-arrays,cppcoreguidelines-avoid-goto,cppcoreguidelines-avoid-non-const-global-variables,cppcoreguidelines-c-copy-assignment-signature,cppcoreguidelines-explicit-virtual-functions,cppcoreguidelines-init-variables,cppcoreguidelines-interfaces-global-init,cppcoreguidelines-macro-usage,cppcoreguidelines-narrowing-conversions,cppcoreguidelines-no-malloc,cppcoreguidelines-prefer-member-initializer,cppcoreguidelines-pro-*,cppcoreguidelines-slicing,cppcoreguidelines-special-member-functions,llvm-else-after-return,llvm-include-order,llvm-namespace-comment,llvm-prefer-*,llvm-qualified-auto,llvm-twine-local,misc-definitions-in-headers,misc-misplaced-const,misc-redundant-expression,misc-unused-parameters,modernize-avoid-*,modernize-concat-nested-namespaces,modernize-deprecated-*,modernize-loop-convert,modernize-make-*,modernize-pass-by-value,modernize-raw-string-literal,modernize-redundant-void-arg,modernize-replace-*,modernize-return-braced-init-list,modernize-shrink-to-fit,modernize-unary-static-assert,modernize-use-auto,modernize-use-bool-literals,modernize-use-default-member-init,modernize-use-emplace,modernize-use-equals-*,modernize-use-nodiscard,modernize-use-nullptr,modernize-use-override,modernize-use-transparent-functors,modernize-use-uncaught-exceptions,modernize-use-using,performance-*,readability-avoid-const-params-in-decls,readability-braces-around-statements,readability-const-return-type,readability-container-size-empty,readability-convert-member-functions-to-static,readability-delete-null-pointer,readability-else-after-return,readability-function-size,readability-identifier-naming,readability-implicit-bool-conversion,readability-inconsistent-declaration-parameter-name,readability-isolate-declaration,readability-make-member-function-const,readability-misleading-indentation,readability-misplaced-array-index,readability-named-parameter,readability-non-const-parameter,readability-redundant-*,readability-simplify-*,readability-static-*,readability-string-compare,readability-uniqueptr-delete-release,readability-uppercase-literal-suffix