ament_clang_tidy

Checks the code style of C / C++ source files using Clang-Tidy. Files with the following extensions are considered: .c, .cc, .cpp, .cxx, .h, .hh, .hpp, .hxx.

How to run the check from the command line?

Prerequisites: clang-tidy-6.0, clang-tools-6.0, and python-yaml packages should have already been installed. compile_commands.json files should have already been generated (e.g.: workspace built with colcon build --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON).

ament_clang_tidy [-h] [--config path] [--explain-config]
                 [--export-fixes EXPORT_FIXES] [--fix-errors]
                 [--header-filter HEADER_FILTER] [--quiet]
                 [--system-headers] [--jobs N]
                 [--packages-select [PKG_NAME [PKG_NAME ...]]]
                 [--xunit-file XUNIT_FILE]
                 [paths [paths ...]]

If <paths> is a directory, it will be recursively searched for “compile_commands.json” files (this is usually the build directory of a colcon workspace). If <paths> is a file, it will be treated as a “compile_commands.json” file.

The --config allows you to set the path to the .clang-tidy file to use.

The --explain-config option will explain the origin of the enabled configuration checks.

The --header-filter option will accept a regex and display errors from the specified non-system header files. To display errors from all non-system header, use --header-filter='.*'.

The --quiet option will suppress printing statistics about ignored warnings and warnings treated as errors.

The --export-fixes option will generate a DAT file of the recorded fixes when supplied with a file name.

When using the option --fix-errors the proposed changes are applied in place.

The --system-headers option will display errors from all system header files.

The --jobs option will control the number of clang-tidy jobs to run in parallel.

The --packages-select option will filter the “compile_commands.json” files to just those generated by specific ROS packages.

The --xunit-file option will generate a xunit compliant XML file when supplied with a file name.

How to run the check from within a CMake ament package as part of the tests?

The CMake integration is provided by the package ament_cmake_clang_tidy.