--- target: obj-x86_64-pc-linux-gnu # It is used by 'mach static-analysis' and 'phabricator static-analysis bot' # in order to have consistency across the used checkers. # All the clang checks used by the static-analysis tools. # # To add a new checker, say `new-checker`: # 1. Configure a static analyzer build, using # `./mach configure --disable-unified-build --enable-debug --disable-tests` # 2. Check that build with your new check, using # `./mach static-analysis check --checks='-*, # new-checker' --output=clang-tidy.json --format=json` # 3. Fix all issues found in `clang-tidy.json`. Running the above with # `--fix` may help, depending on the confidence you have in the checker. # Eventually use // NOLINT(new-checker) # 4. Add it in this file # platforms: - linux64 - macosx64 - win32 - win64 # Minimum clang-tidy version that is required for all the following checkers # to work properly. # This is also used by 'mach lint -l clang-format' package_version: "22.1.8" # Header file that are platform dependant, not used to declare functions and # codes, not self-contained or generate false positive. # We don't want to analyze them. header_skiplist: - dom/canvas/WebGLInternalFormatsTable.h - dom/indexedDB/IndexedDatabaseInlines.h - dom/media/platforms/ffmpeg/FFmpegVulkanVideoDecoder.h - dom/media/webrtc/libwebrtc_overrides/rtc_base/trace_event.h - dom/media/webrtc/transport/sigslot.h - dom/onnx/onnxruntime_ep_c_api.h - dom/quota/DirectoryLockInlines.h - gfx/gl/GLContextProviderImpl.h - gfx/pixman/pixman/pixman/loongson-mmintrin.h - gfx/pixman/pixman/pixman/pixman-edge-imp.h - gfx/pixman/pixman/pixman/pixman-version.h - hal/HalInternal.h - intl/components/src/FormatBuffer.h - js/src/jit/MacroAssembler.h - js/src/jit/MIR.h - layout/style/ServoStyleConstsForwards.h - memory/build/malloc_decls.h - memory/mozalloc/cxxalloc.h - memory/mozalloc/mozalloc.h - modules/libpref/init/StaticPrefListBegin.h - modules/libpref/init/StaticPrefListEnd.h - mozglue/baseprofiler/public/BaseProfilerMarkersDetail.h - netwerk/socket/neqo_glue/NeqoHttp3Conn.h - parser/html/nsHtml5TokenizerCppSupplement.h - parser/html/nsHtml5TokenizerHSupplement.h - parser/html/nsHtml5TreeBuilderCppSupplement.h - parser/html/nsHtml5TreeBuilderHSupplement.h - parser/html/nsHtml5UTF16BufferCppSupplement.h - parser/html/nsHtml5UTF16BufferHSupplement.h - parser/htmlaccel/htmlaccel.h - security/sandbox/linux/SandboxProfilerParent.h - storage/Variant_inl.h - storage/variantToSQLiteT_impl.h - tools/profiler/public/ProfilerMarkersDetail.h # those wayland headers are not self-contained (at all) - widget/gtk/mozwayland/mozwayland.h - widget/gtk/wayland/color-management-v1-client-protocol.h - widget/gtk/wayland/color-representation-v1-client-protocol.h - widget/gtk/wayland/fractional-scale-v1-client-protocol.h - widget/gtk/wayland/gtk-primary-selection-client-protocol.h - widget/gtk/wayland/idle-inhibit-unstable-v1-client-protocol.h - widget/gtk/wayland/kde-appmenu-client-protocol.h - widget/gtk/wayland/linux-dmabuf-unstable-v1-client-protocol.h - widget/gtk/wayland/pointer-constraints-unstable-v1-client-protocol.h - widget/gtk/wayland/pointer-gestures-unstable-v1-client-protocol.h - widget/gtk/wayland/primary-selection-unstable-v1-client-protocol.h - widget/gtk/wayland/relative-pointer-unstable-v1-client-protocol.h - widget/gtk/wayland/viewporter-client-protocol.h - widget/gtk/wayland/xdg-activation-v1-client-protocol.h - widget/gtk/wayland/xdg-output-unstable-v1-client-protocol.h - widget/gtk/wayland/xdg-session-management-v1-client-protocol.h - widget/gtk/wayland/xdg-shell-client-protocol.h - widget/gtk/wayland/xx-fractional-scale-v2-client-protocol.h - widget/gtk/wayland/xx-pip-v1-client-protocol.h clang_checkers: - name: -* publish: !!bool no - name: modernize-use-equals-default reliability: high - name: modernize-use-equals-delete reliability: high - name: modernize-use-transparent-functors reliability: high - name: readability-redundant-string-cstr reliability: high - name: readability-redundant-string-init reliability: high - name: modernize-loop-convert reliability: high config: - key: MinConfidence value: safe - key: UseCxx20ReverseRanges value: false - name: modernize-type-traits reliability: high - name: modernize-use-bool-literals reliability: high - name: modernize-use-std-numbers reliability: high config: - key: DiffThreshold value: 0.0000001 - name: bugprone-forwarding-reference-overload reliability: high - name: bugprone-move-forwarding-reference reliability: high - name: bugprone-redundant-branch-condition reliability: high - name: bugprone-bitwise-pointer-cast reliability: high - name: misc-definitions-in-headers reliability: high - name: performance-for-range-copy reliability: high config: - key: AllowedTypes value: (mozilla::)?RefPtr - name: performance-unnecessary-copy-initialization reliability: high config: - key: AllowedTypes value: (mozilla::)?(nsCOM|Ref)Ptr - name: performance-inefficient-string-concatenation reliability: high - name: performance-inefficient-vector-operation reliability: high - name: performance-trivially-destructible reliability: high - name: modernize-use-nullptr reliability: high # clang_checkers: # - name: -* # publish: !!bool no # - name: bugprone-argument-comment # reliability: high # - name: bugprone-assert-side-effect # reliability: high # - name: bugprone-bool-pointer-implicit-conversion # reliability: low # - name: bugprone-forward-declaration-namespace # reliability: high # - name: bugprone-incorrect-roundings # reliability: high # - name: bugprone-integer-division # reliability: high # - name: bugprone-macro-parentheses # reliability: medium # - name: bugprone-macro-repeated-side-effects # reliability: high # - name: bugprone-misplaced-widening-cast # reliability: high # - name: bugprone-use-after-move # reliability: high # - name: bugprone-multiple-statement-macro # # Incompatible with our code base, see bug 1496379. # publish: !!bool no # reliability: high # - name: bugprone-sizeof-expression # reliability: high # - name: bugprone-string-constructor # reliability: high # - name: bugprone-string-integer-assignment # reliability: high # - name: bugprone-suspicious-memset-usage # reliability: high # - name: bugprone-suspicious-missing-comma # reliability: high # - name: bugprone-suspicious-semicolon # reliability: high # - name: bugprone-suspicious-string-compare # reliability: high # - name: bugprone-swapped-arguments # reliability: high # - name: bugprone-switch-missing-default-case # reliability: high # - name: bugprone-too-small-loop-variable # reliability: high # - name: bugprone-unused-raii # reliability: high # - name: bugprone-use-after-move # reliability: high # - name: clang-analyzer-core.CallAndMessage # reliability: medium # - name: clang-analyzer-core.DivideZero # reliability: high # - name: clang-analyzer-core.NonNullParamChecker # reliability: high # - name: clang-analyzer-core.NullDereference # reliability: medium # - name: clang-analyzer-core.UndefinedBinaryOperatorResult # reliability: medium # - name: clang-analyzer-core.uninitialized.Assign # reliability: medium # - name: clang-analyzer-core.uninitialized.Branch # reliability: medium # - name: clang-analyzer-cplusplus.Move # reliability: high # - name: clang-analyzer-cplusplus.NewDelete # reliability: medium # - name: clang-analyzer-cplusplus.NewDeleteLeaks # reliability: medium # - name: clang-analyzer-deadcode.DeadStores # reliability: high # - name: clang-analyzer-optin.performance.Padding # reliability: high # config: # - key: AllowedPad # value: 2 # - name: clang-analyzer-security.FloatLoopCounter # reliability: high # - name: clang-analyzer-security.insecureAPI.bcmp # reliability: high # - name: clang-analyzer-security.insecureAPI.bcopy # reliability: high # - name: clang-analyzer-security.insecureAPI.bzero # reliability: high # - name: clang-analyzer-security.insecureAPI.getpw # reliability: high # # Don't add clang-analyzer-security.insecureAPI.gets here; it's deprecated. # - name: clang-analyzer-security.insecureAPI.mkstemp # reliability: high # - name: clang-analyzer-security.insecureAPI.mktemp # reliability: high # - name: clang-analyzer-security.insecureAPI.rand # reliability: low # # C checker, outdated and doesn't check for the new std::rand calls. # publish: !!bool no # - name: clang-analyzer-security.insecureAPI.strcpy # reliability: low # # The functions that should be used differ on POSIX and Windows, and there # # isn't a consensus on how we should approach this. # publish: !!bool no # - name: clang-analyzer-security.insecureAPI.UncheckedReturn # reliability: low # - name: clang-analyzer-security.insecureAPI.vfork # reliability: medium # - name: clang-analyzer-unix.Malloc # reliability: high # - name: clang-analyzer-unix.cstring.BadSizeArg # reliability: high # - name: clang-analyzer-unix.cstring.NullArg # reliability: high # - name: cppcoreguidelines-narrowing-conversions # reliability: high # - name: cppcoreguidelines-pro-type-member-init # reliability: medium # - name: misc-include-cleaner # # Disable this checker until we move to before/after # reliability: high # publish: !!bool no # - name: misc-non-copyable-objects # reliability: high # - name: misc-redundant-expression # reliability: medium # - name: misc-unused-alias-decls # reliability: high # - name: misc-unused-using-decls # reliability: high # - name: modernize-avoid-bind # restricted-platforms: # - win32 # - win64 # reliability: medium # - name: modernize-concat-nested-namespaces # reliability: high # - name: modernize-deprecated-ios-base-aliases # reliability: high # - name: modernize-loop-convert # reliability: high # - name: modernize-raw-string-literal # reliability: high # - name: modernize-redundant-void-arg # reliability: high # # We still have some old C code that is built with a C compiler, so this # # might break the build. # publish: !!bool no # - name: modernize-shrink-to-fit # reliability: high # - name: modernize-use-auto # reliability: high # # Controversial, see bug 1371052. # publish: !!bool no # - name: modernize-use-bool-literals # reliability: high # - name: modernize-use-equals-default # reliability: high # - name: modernize-use-equals-delete # reliability: high # - name: modernize-use-nullptr # reliability: high # - name: modernize-use-override # reliability: low # # Too noisy because of how we implement NS_IMETHOD. See Bug 1420366. # publish: !!bool no # - name: modernize-use-using # reliability: high # - name: mozilla-* # reliability: high # - name: performance-avoid-endl # reliability: high # # enable from clang 18 # # - name: performance-enum-size # # reliability: high # - name: performance-faster-string-find # reliability: high # - name: performance-for-range-copy # reliability: high # - name: performance-implicit-conversion-in-loop # reliability: high # - name: performance-inefficient-algorithm # restricted-platforms: # - linux64 # - macosx64 # reliability: high # - name: performance-inefficient-string-concatenation # reliability: high # - name: performance-inefficient-vector-operation # reliability: high # - name: performance-move-const-arg # reliability: high # config: # - key: CheckTriviallyCopyableMove # # As per Bug 1558359 - disable detection of trivially copyable types # # that do not have a move constructor. # value: 0 # - name: performance-move-constructor-init # reliability: high # - name: performance-noexcept-move-constructor # reliability: high # - name: performance-type-promotion-in-math-fn # reliability: high # - name: performance-unnecessary-copy-initialization # reliability: high # - name: performance-unnecessary-value-param # reliability: high # config: # - key: AllowedTypes # # Allow EnumSet because it only has a non-trivial copy constructor # # in debug builds. # # Allow Range because it only has more than two pointer-sized members # # in debug (or fuzzing) builds. # value: ::mozilla::(EnumSet|Range) # - name: readability-braces-around-statements # reliability: high # config: # - key: ShortStatementLines # # Allow `if (foo) return;` without braces # # Still warns on `if (foo)\n return;` # value: 1 # - name: readability-const-return-type # reliability: high # # Note: this can be loosened up by using the ShortStatementLines option # - name: readability-container-size-empty # reliability: high # - name: readability-delete-null-pointer # reliability: high # - name: readability-else-after-return # reliability: high # config: # - key: WarnOnConditionVariables # # Disable as we don't mind this kind of behavior # value: 0 # - name: readability-implicit-bool-conversion # reliability: low # # On automation the config flags act strange. Please see Bug 1500241. # publish: !!bool no # config: # - key: AllowIntegerConditions # # The check will allow conditional integer conversions. # value: 1 # - key: AllowPointerConditions # # The check will allow conditional pointer conversions. # value: 1 # - name: readability-inconsistent-declaration-parameter-name # reliability: high # - name: readability-isolate-declaration # # As per bug 1558987 - we don't want to have this enabled # publish: !!bool no # reliability: high # - name: readability-magic-numbers # # Bug 1553495 - we must see first its impact on our code. # publish: !!bool no # reliability: high # - name: readability-misleading-indentation # reliability: high # - name: readability-non-const-parameter # reliability: high # - name: readability-qualified-auto # reliability: high # - name: readability-redundant-control-flow # reliability: high # - name: readability-redundant-member-init # reliability: high # - name: readability-redundant-preprocessor # reliability: high # - name: readability-redundant-smartptr-get # reliability: high # - name: readability-redundant-string-cstr # reliability: high # - name: readability-redundant-string-init # reliability: high # - name: readability-static-accessed-through-instance # reliability: high # - name: readability-simplify-boolean-expr # reliability: high # config: # - key: SimplifyDeMorgan # # Don't want to enable DeMorgan expressions because of MOZ_ASSERT() # # See Bug 1804160 # value: 0 # - name: readability-uniqueptr-delete-release # reliability: high # # Don't publish the google checkers since we are interested in only having # # a general idea how code complies with the rules added by these checkers. # - name: google-build-explicit-make-pair # reliability: low # publish: !!bool no # - name: google-build-namespaces # reliability: low # publish: !!bool no # - name: google-build-using-namespace # reliability: low # publish: !!bool no # - name: google-default-arguments # reliability: low # publish: !!bool no # - name: google-explicit-constructor # reliability: low # publish: !!bool no # - name: google-global-names-in-headers # reliability: low # publish: !!bool no # - name: google-readability-casting # reliability: low # publish: !!bool no # - name: google-readability-function-size # reliability: low # publish: !!bool no # - name: google-readability-namespace-comments # reliability: low # publish: !!bool no # - name: google-readability-todo # reliability: low # publish: !!bool no # - name: google-runtime-int # reliability: low # publish: !!bool no # - name: google-runtime-operator # reliability: low # publish: !!bool no # - name: google-runtime-references # reliability: low # publish: !!bool no