diff --git a/.clang-tidy b/.clang-tidy new file mode 100644 index 000000000..7e9c1b7c7 --- /dev/null +++ b/.clang-tidy @@ -0,0 +1,347 @@ +--- +FormatStyle: "file" +WarningsAsErrors: "*" +HeaderFilterRegex: ".*" +Checks: "google-build-explicit-make-pair, + google-build-namespaces, + google-build-using-namespace, + google-default-arguments, + google-explicit-constructor, + google-global-names-in-headers, + google-objc-avoid-nsobject-new, + google-objc-avoid-throwing-exception, + google-objc-function-naming, + google-objc-global-variable-declaration, + google-readability-avoid-underscore-in-googletest-name, + google-readability-braces-around-statements, + google-readability-casting, + google-readability-function-size, + google-readability-namespace-comments, + google-runtime-int, + google-runtime-operator, + google-upgrade-googletest-case, + clang-analyzer-apiModeling.StdCLibraryFunctions, + clang-analyzer-apiModeling.TrustNonnull, + clang-analyzer-apiModeling.google.GTest, + clang-analyzer-apiModeling.llvm.CastValue, + clang-analyzer-apiModeling.llvm.ReturnValue, + clang-analyzer-core.CallAndMessage, + clang-analyzer-core.CallAndMessageModeling, + clang-analyzer-core.DivideZero, + clang-analyzer-core.DynamicTypePropagation, + clang-analyzer-core.NonNullParamChecker, + clang-analyzer-core.NonnilStringConstants, + clang-analyzer-core.NullDereference, + clang-analyzer-core.StackAddrEscapeBase, + clang-analyzer-core.StackAddressEscape, + clang-analyzer-core.UndefinedBinaryOperatorResult, + clang-analyzer-core.VLASize, + clang-analyzer-core.builtin.BuiltinFunctions, + clang-analyzer-core.builtin.NoReturnFunctions, + clang-analyzer-core.uninitialized.ArraySubscript, + clang-analyzer-core.uninitialized.Assign, + clang-analyzer-core.uninitialized.Branch, + clang-analyzer-core.uninitialized.CapturedBlockVariable, + clang-analyzer-core.uninitialized.UndefReturn, + clang-analyzer-cplusplus.InnerPointer, + clang-analyzer-cplusplus.Move, + clang-analyzer-cplusplus.NewDelete, + clang-analyzer-cplusplus.NewDeleteLeaks, + clang-analyzer-cplusplus.PlacementNew, + clang-analyzer-cplusplus.PureVirtualCall, + clang-analyzer-cplusplus.SelfAssignment, + clang-analyzer-cplusplus.SmartPtrModeling, + clang-analyzer-cplusplus.StringChecker, + clang-analyzer-cplusplus.VirtualCallModeling, + clang-analyzer-deadcode.DeadStores, + clang-analyzer-fuchsia.HandleChecker, + clang-analyzer-nullability.NullPassedToNonnull, + clang-analyzer-nullability.NullReturnedFromNonnull, + clang-analyzer-nullability.NullabilityBase, + clang-analyzer-nullability.NullableDereferenced, + clang-analyzer-nullability.NullablePassedToNonnull, + clang-analyzer-nullability.NullableReturnedFromNonnull, + clang-analyzer-optin.cplusplus.UninitializedObject, + clang-analyzer-optin.cplusplus.VirtualCall, + clang-analyzer-optin.mpi.MPI-Checker, + clang-analyzer-optin.osx.OSObjectCStyleCast, + clang-analyzer-optin.osx.cocoa.localizability.EmptyLocalizationContextChecker, + clang-analyzer-optin.osx.cocoa.localizability.NonLocalizedStringChecker, + clang-analyzer-optin.performance.GCDAntipattern, + clang-analyzer-optin.performance.Padding, + clang-analyzer-optin.portability.UnixAPI, + clang-analyzer-osx.API, + clang-analyzer-osx.MIG, + clang-analyzer-osx.NSOrCFErrorDerefChecker, + clang-analyzer-osx.NumberObjectConversion, + clang-analyzer-osx.OSObjectRetainCount, + clang-analyzer-osx.ObjCProperty, + clang-analyzer-osx.SecKeychainAPI, + clang-analyzer-osx.cocoa.AtSync, + clang-analyzer-osx.cocoa.AutoreleaseWrite, + clang-analyzer-osx.cocoa.ClassRelease, + clang-analyzer-osx.cocoa.Dealloc, + clang-analyzer-osx.cocoa.IncompatibleMethodTypes, + clang-analyzer-osx.cocoa.Loops, + clang-analyzer-osx.cocoa.MissingSuperCall, + clang-analyzer-osx.cocoa.NSAutoreleasePool, + clang-analyzer-osx.cocoa.NSError, + clang-analyzer-osx.cocoa.NilArg, + clang-analyzer-osx.cocoa.NonNilReturnValue, + clang-analyzer-osx.cocoa.ObjCGenerics, + clang-analyzer-osx.cocoa.RetainCount, + clang-analyzer-osx.cocoa.RetainCountBase, + clang-analyzer-osx.cocoa.RunLoopAutoreleaseLeak, + clang-analyzer-osx.cocoa.SelfInit, + clang-analyzer-osx.cocoa.SuperDealloc, + clang-analyzer-osx.cocoa.UnusedIvars, + clang-analyzer-osx.cocoa.VariadicMethodTypes, + clang-analyzer-osx.coreFoundation.CFError, + clang-analyzer-osx.coreFoundation.CFNumber, + clang-analyzer-osx.coreFoundation.CFRetainRelease, + clang-analyzer-osx.coreFoundation.containers.OutOfBounds, + clang-analyzer-osx.coreFoundation.containers.PointerSizedValues, + clang-analyzer-security.FloatLoopCounter, + clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling, + clang-analyzer-security.insecureAPI.SecuritySyntaxChecker, + clang-analyzer-security.insecureAPI.UncheckedReturn, + clang-analyzer-security.insecureAPI.bcmp, + clang-analyzer-security.insecureAPI.bcopy, + clang-analyzer-security.insecureAPI.bzero, + clang-analyzer-security.insecureAPI.decodeValueOfObjCType, + clang-analyzer-security.insecureAPI.getpw, + clang-analyzer-security.insecureAPI.gets, + clang-analyzer-security.insecureAPI.mkstemp, + clang-analyzer-security.insecureAPI.mktemp, + clang-analyzer-security.insecureAPI.rand, + clang-analyzer-security.insecureAPI.strcpy, + clang-analyzer-security.insecureAPI.vfork, + clang-analyzer-unix.API, + clang-analyzer-unix.DynamicMemoryModeling, + clang-analyzer-unix.Malloc, + clang-analyzer-unix.MallocSizeof, + clang-analyzer-unix.MismatchedDeallocator, + clang-analyzer-unix.Vfork, + clang-analyzer-unix.cstring.BadSizeArg, + clang-analyzer-unix.cstring.CStringModeling, + clang-analyzer-unix.cstring.NullArg, + clang-analyzer-valist.CopyToSelf, + clang-analyzer-valist.Uninitialized, + clang-analyzer-valist.Unterminated, + clang-analyzer-valist.ValistBase, + clang-analyzer-webkit.NoUncountedMemberChecker, + clang-analyzer-webkit.RefCntblBaseVirtualDtor, + clang-analyzer-webkit.UncountedLambdaCapturesChecker, + +################################################ Optional checks ################################################ + + #google-readability-todo, + #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-easily-swappable-parameters, + #bugprone-exception-escape, + #bugprone-fold-init-type, + #bugprone-forward-declaration-namespace, + #bugprone-forwarding-reference-overload, + #bugprone-implicit-widening-of-multiplication-result, + #bugprone-inaccurate-erase, + #bugprone-incorrect-roundings, + #bugprone-infinite-loop, + #bugprone-integer-division, + #bugprone-lambda-function-name, + #bugprone-macro-parentheses, + #bugprone-macro-repeated-side-effects, + #bugprone-misplaced-operator-in-strlen-in-alloc, + #bugprone-misplaced-pointer-arithmetic-in-alloc, + #bugprone-misplaced-widening-cast, + #bugprone-move-forwarding-reference, + #bugprone-multiple-statement-macro, + #bugprone-narrowing-conversions, + #bugprone-no-escape, + #bugprone-not-null-terminated-result, + #bugprone-parent-virtual-call, + #bugprone-posix-return, + #bugprone-redundant-branch-condition, + #bugprone-reserved-identifier, + #bugprone-signal-handler, + #bugprone-signed-char-misuse, + #bugprone-sizeof-container, + #bugprone-sizeof-expression, + #bugprone-spuriously-wake-up-functions, + #bugprone-string-constructor, + #bugprone-string-integer-assignment, + #bugprone-string-literal-with-embedded-nul, + #bugprone-stringview-nullptr, + #bugprone-suspicious-enum-usage, + #bugprone-suspicious-include, + #bugprone-suspicious-memory-comparison, + #bugprone-suspicious-memset-usage, + #bugprone-suspicious-missing-comma, + #bugprone-suspicious-semicolon, + #bugprone-suspicious-string-compare, + #bugprone-swapped-arguments, + #bugprone-terminating-continue, + #bugprone-throw-keyword-missing, + #bugprone-too-small-loop-variable, + #bugprone-undefined-memory-manipulation, + #bugprone-undelegated-constructor, + #bugprone-unhandled-exception-at-new, + #bugprone-unhandled-self-assignment, + #bugprone-unused-raii, + #bugprone-unused-return-value, + #bugprone-use-after-move, + #bugprone-virtual-near-miss, + #cppcoreguidelines-avoid-c-arrays, + #cppcoreguidelines-avoid-goto, + #cppcoreguidelines-avoid-magic-numbers, + #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-non-private-member-variables-in-classes, + #cppcoreguidelines-owning-memory, + #cppcoreguidelines-prefer-member-initializer, + #cppcoreguidelines-pro-bounds-array-to-pointer-decay, + #cppcoreguidelines-pro-bounds-constant-array-index, + #cppcoreguidelines-pro-bounds-pointer-arithmetic, + #cppcoreguidelines-pro-type-const-cast, + #cppcoreguidelines-pro-type-cstyle-cast, + #cppcoreguidelines-pro-type-member-init, + #cppcoreguidelines-pro-type-reinterpret-cast, + #cppcoreguidelines-pro-type-static-cast-downcast, + #cppcoreguidelines-pro-type-union-access, + #cppcoreguidelines-pro-type-vararg, + #cppcoreguidelines-slicing, + #cppcoreguidelines-special-member-functions, + #cppcoreguidelines-virtual-class-destructor, + #hicpp-avoid-c-arrays, + #hicpp-avoid-goto, + #hicpp-braces-around-statements, + #hicpp-deprecated-headers, + #hicpp-exception-baseclass, + #hicpp-explicit-conversions, + #hicpp-function-size, + #hicpp-invalid-access-moved, + #hicpp-member-init, + #hicpp-move-const-arg, + #hicpp-multiway-paths-covered, + #hicpp-named-parameter, + #hicpp-new-delete-operators, + #hicpp-no-array-decay, + #hicpp-no-assembler, + #hicpp-no-malloc, + #hicpp-noexcept-move, + #hicpp-signed-bitwise, + #hicpp-special-member-functions, + #hicpp-static-assert, + #hicpp-undelegated-constructor, + #hicpp-uppercase-literal-suffix, + #hicpp-use-auto, + #hicpp-use-emplace, + #hicpp-use-equals-default, + #hicpp-use-equals-delete, + #hicpp-use-noexcept, + #hicpp-use-nullptr, + #hicpp-use-override, + #hicpp-vararg, + #modernize-avoid-bind, + #modernize-avoid-c-arrays, + #modernize-concat-nested-namespaces, + #modernize-deprecated-headers, + #modernize-deprecated-ios-base-aliases, + #modernize-loop-convert, + #modernize-make-shared, + #modernize-make-unique, + #modernize-pass-by-value, + #modernize-raw-string-literal, + #modernize-redundant-void-arg, + #modernize-replace-auto-ptr, + #modernize-replace-disallow-copy-and-assign-macro, + #modernize-replace-random-shuffle, + #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-default, + #modernize-use-equals-delete, + #modernize-use-nodiscard, + #modernize-use-noexcept, + #modernize-use-nullptr, + #modernize-use-override, + #modernize-use-trailing-return-type, + #modernize-use-transparent-functors, + #modernize-use-uncaught-exceptions, + #modernize-use-using, + #performance-faster-string-find, + #performance-for-range-copy, + #performance-implicit-conversion-in-loop, + #performance-inefficient-algorithm, + #performance-inefficient-string-concatenation, + #performance-inefficient-vector-operation, + #performance-move-const-arg, + #performance-move-constructor-init, + #performance-no-automatic-move, + #performance-no-int-to-ptr, + #performance-noexcept-move-constructor, + #performance-trivially-destructible, + #performance-type-promotion-in-math-fn, + #performance-unnecessary-copy-initialization, + #performance-unnecessary-value-param, + #portability-restrict-system-includes, + #portability-simd-intrinsics, + #readability-avoid-const-params-in-decls, + #readability-braces-around-statements, + #readability-const-return-type, + #readability-container-contains, + #readability-container-data-pointer, + #readability-container-size-empty, + #readability-convert-member-functions-to-static, + #readability-delete-null-pointer, + #readability-duplicate-include, + #readability-else-after-return, + #readability-function-cognitive-complexity, + #readability-function-size, + #readability-identifier-length, + #readability-identifier-naming, + #readability-implicit-bool-conversion, + #readability-inconsistent-declaration-parameter-name, + #readability-isolate-declaration, + #readability-magic-numbers, + #readability-make-member-function-const, + #readability-misleading-indentation, + #readability-misplaced-array-index, + #readability-named-parameter, + #readability-non-const-parameter, + #readability-qualified-auto, + #readability-redundant-access-specifiers, + #readability-redundant-control-flow, + #readability-redundant-declaration, + #readability-redundant-function-ptr-dereference, + #readability-redundant-member-init, + #readability-redundant-preprocessor, + #readability-redundant-smartptr-get, + #readability-redundant-string-cstr, + #readability-redundant-string-init, + #readability-simplify-boolean-expr, + #readability-simplify-subscript-expr, + #readability-static-accessed-through-instance, + #readability-static-definition-in-anonymous-namespace, + #readability-string-compare, + #readability-suspicious-call-argument, + #readability-uniqueptr-delete-release, + #readability-uppercase-literal-suffix, + #readability-use-anyofallof + " diff --git a/scripts/clang-tidy-git.sh b/scripts/clang-tidy-git.sh new file mode 100755 index 000000000..65b546605 --- /dev/null +++ b/scripts/clang-tidy-git.sh @@ -0,0 +1 @@ +run-clang-tidy -fix -extra-arg=-std=c++11 -extra-arg=-Wno-unknown-warning-option `git diff --name-only origin/HEAD`