ament_lint_auto
The package simplifies using multiple linters as part of the CMake tests. It reduces the amount of CMake code to a bare minimum.
CMakeLists.txt
:
# this must happen before the invocation of ament_package()
if(BUILD_TESTING)
find_package(ament_lint_auto REQUIRED)
ament_lint_auto_find_test_dependencies()
endif()
The set of linters to be used is then only specified in the package manifest as test dependencies.
package.xml
:
<test_depend>ament_lint_auto</test_depend>
<!-- add test dependencies on any linter, e.g. -->
<test_depend>ament_cmake_clang_format</test_depend>
<test_depend>ament_cmake_cppcheck</test_depend>
<test_depend>ament_cmake_pycodestyle</test_depend>
Since recursive dependencies are also being used a single test dependency is sufficient to test with a set of common linters.
package.xml
:
<test_depend>ament_lint_auto</test_depend>
<!-- this recursively depends on a set of common linters -->
<test_depend>ament_lint_common</test_depend>
The documentation of the package ament_cmake_test provides more information on testing in CMake ament packages.
How to exclude files with ament_lint_auto?
Linter hooks conform to the ament_lint_auto convention of excluding files specified in the CMake list variable AMENT_LINT_AUTO_FILE_EXCLUDE. As such, the CMake snippet from above can be modified to exclude files across all linters with one addition.
CMakeLists.txt
:
# this must happen before the invocation of ament_package()
if(BUILD_TESTING)
find_package(ament_lint_auto REQUIRED)
set(AMENT_LINT_AUTO_FILE_EXCLUDE /path/to/ignored_file ...)
ament_lint_auto_find_test_dependencies()
endif()