# clang-tidy checks and fixing remaining checks

**URL:** https://discourse.kitware.com/t/clang-tidy-checks-and-fixing-remaining-checks/360
**Category:** Software Process
**Created:** [December 10, 2019, 10:24pm UTC](https://discourse.kitware.com/t/clang-tidy-checks-and-fixing-remaining-checks/360 "2019-12-10T22:24:42Z")
**Posts on this page:** 1
**Page:** 1

<div class="post-metadata">

### Author: ![ben.boeckel](https://discourse.kitware.com/letter_avatar_proxy/v4/letter/b/ea5d25/32.png) [@ben.boeckel](https://discourse.kitware.com/u/ben.boeckel)
#### Post date: [December 10, 2019, 10:24pm UTC](https://discourse.kitware.com/t/clang-tidy-checks-and-fixing-remaining-checks/360/1 "2019-12-10T22:24:42Z")

</div>

`clang-tidy` is now being run on `master` for SMTK and CMB. The CI build will fail if any warnings are made from it.

You can run it locally by doing `-DCMAKE_{C,CXX}_CLANG_TIDY=$(which clang-tidy)` on the command line to tell CMake to build your code with `clang-tidy` as well. Note that third party code is masked from this, so it will not use `clang-tidy` (you can unmask it by removing the lines in `thirdparty/CMakeLists.txt` if you’re interested). If you’d like to fix things locally, I recommend uncommenting the `WarningsAsErrors` line in the `.clang-tidy` file in the source tree, remove the masking check in the list and then build until it is clean. Without the `WarningsAsErrors` line, you’ll need to `make clean` to get the `clang-tidy` output again (since the `.clang-tidy` file changing doesn’t trigger a rebuild). Adding `;-fix` to the value will have `clang-tidy` edit your code when it builds it (not everything is automatically fixable though).

The list of checks currently masked are:

Should investigate and fix or add a `NOLINT` comment:

- bugprone-branch-clone
- bugprone-exception-escape
- bugprone-inaccurate-erase
- bugprone-incorrect-roundings
- bugprone-integer-division
- bugprone-misplaced-widening-cast
- bugprone-narrowing-conversions
- bugprone-sizeof-expression
- bugprone-string-integer-assignment
- bugprone-unhandled-self-assignment
- clang-analyzer-deadcode.DeadStores
- clang-analyzer-optin.cplusplus.VirtualCall
- clang-analyzer-security.FloatLoopCounter
- clang-analyzer-security.insecureAPI.strcpy
- misc-redundant-expression
- misc-throw-by-value-catch-by-reference
- modernize-avoid-c-arrays
- modernize-loop-convert
- modernize-raw-string-literal
- modernize-return-braced-init-list
- modernize-use-auto
- modernize-use-using
- performance-inefficient-string-concatenation
- performance-move-const-arg
- readability-braces-around-statements
- readability-else-after-return
- readability-inconsistent-declaration-parameter-name
- readability-isolate-declaration
- readability-redundant-control-flow

Probably affects APIs:

- misc-non-private-member-variables-in-classes
- modernize-pass-by-value
- performance-unnecessary-value-param
- readability-const-return-type
- readability-convert-member-functions-to-static
- readability-non-const-parameter

Of interest, but probably not largely of interest to SMTK/CMB code:

- performance-type-promotion-in-math-fn
- readability-implicit-bool-conversion
- readability-magic-numbers
- readability-uppercase-literal-suffix

Should be fixed, but may be hard (needs more detailed analysis):

- clang-analyzer-core.CallAndMessage
- clang-analyzer-core.DivideZero
- clang-analyzer-core.NonNullParamChecker
- clang-analyzer-core.NullDereference
- clang-analyzer-core.UndefinedBinaryOperatorResult
- clang-analyzer-core.uninitialized.Assign
- clang-analyzer-core.uninitialized.Branch
- clang-analyzer-cplusplus.NewDelete
- clang-analyzer-cplusplus.NewDeleteLeaks
- clang-analyzer-optin.cplusplus.UninitializedObject

Unlikely to ever be fixed, but may be of interest:

- cert-\*
- cppcoreguidelines-\*
- google-readability-casting
- hicpp-\*
- modernize-use-trailing-return-type

Masked due to generated code (updating VTK and/or ParaView necessary to unmask these):

- readability-named-parameter
