catkin_lint - check catkin packages for common errors
catkin_lint [--config FILE] [--quiet |
--no-quiet]
[--severity-level LEVEL]
[--notice ID] [--warning ID] [--error
ID]
[--ignore ID] [--show-ignored]
[--strict | --no-strict]
[--pkg PKG] [--skip-pkg PKG]
[--package-path PATH] [--skip-path MATCH]
[--rosdistro DISTRO] [--offline] [--no-offline]
[--resolve-env | --no-resolve-env]
[--output FORMAT | --text | --explain |
--xml | --json]
[--color MODE]
[PATH [PATH ...]]
catkin_lint checks package configurations for the
catkin build system of ROS. It runs a static analysis of the
"package.xml" and
"CMakeLists.txt" files in your package,
and it will detect and report a number of common problems.
All diagnosed problems come in one of three possible
severities:
Errors are severe enough to break the build and/or produce
unintended side effects. Usually, they violate the rules outlined in the
catkin manual.
Warnings are potential errors which may indicate a bug in
your package but may be justified for reasons catkin_lint cannot
discern. Constructs which trigger a warning can usually be modified in a way
that is functionally equivalent but more robust.
Notices are issues which are not objectionable from a
technical view point but should be addressed to improve the quality of the
package. Many notices highlight violations of the recommendations and best
practises from the catkin manual.
- --config
FILE
- Read configuration settings from FILE. This option can be used
multiple times. See "CONFIGURATION FILE FORMAT" for
details.
- --quiet,
-q
- Suppress all outputs expect for the detected problems, in particular, do
not show the summary at the end.
- --no-quiet
- Show a summary of the findings at the end. This is the default
setting.
- --severity-level
LEVEL, -W LEVEL
- Choose the severity level for diagnostic output. Level 0 displays errors
only, level 1 displays errors and warnings, and level 2 displays
everything. The default setting is -W1.
- --notice ID,
--warning ID, --error ID
- Override the default severity of certain problems. See "PROBLEM
IDS" for details on the available IDs.
- --ignore
ID
- Ignore a problem. This is mostly useful to work around a known bug in
catkin_lint, because problems tend to not go away if you ignore
them. See "PROBLEM IDS" for details on the available IDs.
- --show-ignored
- Show all problems you ignored. Use this if an ignored problem did not go
away, but you forgot which one.
- --strict
- Treat any reported problem as a fatal error. Some people use the option to
enforce that warnings get fixed, too. You can also combine this with
-W2 to turn even notices into errors, if you are exceptionally
pedantic and/or have a high pain tolerance.
- --no-strict
- This will undo the effects of your rash decision to put
"strict=yes" in your configuration file.
This is also the default setting.
- --pkg PKG
- Check the package PKG for problems. The package must be in the
ROS package search path.
- --skip-pkg
PKG
- Skip the package PKG when processing a package subtree. The package
will not be linted, but it will be treated as a known package for
dependency resolutions.
- --package-path
PATH[:PATH[...]]
- Add one or more additional locations to the ROS package search
path. Separate multiple locations with
":". catkin_lint will use this
path list and the ROS_PACKAGE_PATH environment variable to resolve
the --pkg option and dependencies of linted packages.
- --skip-path
MATCH
- Skip packages if their location contains MATCH. No wildcards or
pattern matching allowed, only proper substrings are recognized.
- --rosdistro
DISTRO
- Assume that all packages are supposed to work with the ROS
distribution DISTRO. By default, this value is taken from the
ROS_DISTRO environment variable. catkin_lint will use this
to query the ROS database for packages which are not locally
installed.
- --offline
- Forbid metadata queries to the ROS package index. This will disable
certain diagnostics which rely on knowing details about all package
dependencies. Metadata queries are not needed for packages which can be
found locally through the ROS package search path.
- --no-offline
- Allow metadata queries to the ROS package index. This is the
default.
- --resolve-env
- Resolve environment variables
$ENV{} in CMake scripts. By
default, catkin_lint will treat all environment variables like
empty strings and issue a warning.
- --no-resolve-env
- Do not resolve environment variables
$ENV{} in CMake scripts and
issue a warning if they are used. This is the default.
- --output
FORMAT
- Select the output format for the diagnosed problems. Valid output formats
are text, explain, json, and xml. See
"OUTPUT FORMATS" for more details.
- --text,
--explain, --json, --xml
- These are deprecated aliases for --output FORMAT.
- --color
MODE
- Configure the colorization of the text and explain output
formats. The default mode is auto, which will use ANSI colors if
catkin_lint detects a terminal as output. The modes always
and never will override the detection and output ANSI colors always
or never, respectively.
catkin_lint supports a variety of output formats as
argument for the --output option:
- text
- This is the default format, which outputs a short, human-readable
description of all problems.
- explain
- This is an extended text format, which will show an additional
explanation when a problem type occurs for the first time. It will also
mention the message ID which you need to change the severity or ignore a
problem.
- json
- Outputs all problems in JSON format.
- xml
- Outputs all problems in XML format.
catkin_lint uses ROS_PACKAGE_PATH to find locally
available packages and ROS_DISTRO to determine the installed
ROS distribution when querying the ROS package index or the
rosdep database. All other environment variables will be ignored,
unless catkin_lint is instructed to resolve them in CMake scripts by
--resolve-env.
- 0
- All packages were linted successfully and no errors occurred.
- 1
- An error occurred.
- 66
- No packages found.
catkin_lint will look for configuration options in the
following files:
- Files explicitly specified using --config
- .catkin_lint files in all locations from
ROS_PACKAGE_PATH
- $XDG_CONFIG_HOME/catkin_lint
- ~/.config/catkin_lint if XDG_CONFIG_HOME is unset or
empty
- ~/.catkin_lint
catkin_lint will read all available configuration files and
merge them into a single configuration. Earlier entries in the above list
will take precedence if conflicting options are found. Command line
arguments will override any configuration file setting. Configuration files
are in an INI-style format with one or more sections in it.
The main section is called
"[catkin_lint]" and will take the
following catkin_lint specific options:
- color =
auto | never | always
- Determine output colorization mode. The default setting auto will
enable colorization if and only if standard output is connected to
terminal. The modes always and never will override the
detection and output ANSI colors always or never, respectively.
- offline =
no | yes
- Allow or forbid metadata queries to the ROS package index. This
will disable certain diagnostics which rely on knowing details about all
package dependencies. Metadata queries are not needed for packages which
can be found locally through the ROS package search path. The
default setting is no.
- output =
text | explain | json | xml
- Select the output format for problem reports. See "OUTPUT
FORMATS" for details. The default setting is text.
- package_path
= PATH[:PATH[...]]
- Prepend the specified PATHs to ROS_PACKAGE_PATH in order to
find locally available packages and/or package dependencies.
- quiet = no
| yes
- Select output verbosity. The default setting no allows
catkin_lint to print some additional information to standard error,
such as a final summary of all detected problems.
- resolve_env
= no | yes
- Allow or forbid resolution of environment variables. The default setting
no lets catkin_lint ignore environment variables and issue a
warning whenever a CMake command references the environment using
$ENV{}.
- rosdistro
= DISTRO
- Assume that all packages are supposed to work with the ROS
distribution DISTRO. By default, this value is taken from the
ROS_DISTRO environment variable. catkin_lint will use this
to query the ROS database for packages which are not locally
installed.
- severity_level
= 0 | 1 | 2
- Choose the severity level for diagnostic output. Level 0 displays errors
only, level 1 displays errors and warnings, and level 2 displays
everything. The default setting is 1.
- strict =
no | yes
- In strict mode, catkin_lint will treat every reported problem as
error and return with exit code 1 (see "RETURN VALUES"). By
default, warnings and notices are informational only. This setting is
mostly interesting for automated test runs, where the exit code is
evaluated. Note that ignored problems and everything hidden by the chosen
severity_level will not be considered failures.
All section names besides
"[catkin_lint]" are interpreted as package
names and will override the reported severities of problems. As a special
case, the section "[*]" will apply to all
packages. The overrides are specified in the format
"ID = Severity", where the severity can be
one of ignore, error, warning, notice, or
default. See "PROBLEM IDS" for details on the available
IDs.
Unlike --strict, this gives you very fine-grained control
over which problems are supposed to be fatal, so you are encouraged to
integrate catkin_lint into your CI test pipeline and tune the
settings in a way that fits your project.
You can run catkin_lint --help-problem to get a list of all
problem IDs, and catkin_lint --help-problem ID
for a more detailed explanation of each problem.
The following configuration file will instruct catkin_lint
to output its results in JSON format, ignore any problems with unknown
packages (except in the package foo), and elevate the notice about unsorted
lists to a warning for all packages (including foo):
[catkin_lint]
output = json
quiet = yes
[*]
unknown_package = ignore
unsorted_list = warning
[foo]
unknown_package = default
<https://fkie.github.io/catkin_lint/>