New check
Adding a new check to CLOMonitor involves a number of steps. This document tries to summarize the process by providing some information about each of those steps.
NOTE: if you are unsure if the new check is aligned with CLOMonitor’s goals you may want to file an issue first. The issue can detail the new check and you can get feedback from the maintainers prior to starting to work on it.
The check’s file, which must be located in clomonitor-core/src/linter/checks, must declare the following information:
ID
: check identifierWEIGHT
: weight of this check, used to calculate scoresCHECK_SETS
: check sets this new check belongs to
The entrypoint for the check must be a function named check
, with the following signature:
- Sync check:
pub(crate) fn check(input: &CheckInput) -> Result<CheckOutput<T>>
- Async check:
pub(crate) async fn check(input: &CheckInput<'_>) -> Result<CheckOutput<T>>
In the clomonitor-core/src/linter/checks/util directory, there are some helpers that can be useful when writing new checks.
The new check must be registered in the checks module file: its module must be declared and the register_check!
macro called, passing to it the module name.
A field for the new check must be added to the corresponding report section structure (documentation, license, best practices, security or legal) in the clomonitor-core/src/linter/report.rs file. The new check’s module should also be added to the corresponding section_impl!
macro call in the same file.
The report struct is used in a few places across the codebase, so after adding the new check’s field we’ll need to include it in a few places, including some tests (cargo check
may be of help guiding you in this process). One of those places will be the clomonitor-core/src/linter/mod.rs, where the new check is called when building the report.
The linter CLI tools supports displaying a report as a table. When adding a new check, a new row must be added to the output table and the display.golden test file must be updated accordingly.
The report’s markdown version is generated from a template that needs to be updated with the new check.
The following database functions (and their corresponding tests) must be updated to include the new check:
The new check must also be registered in the UI so that we can display it in reports and other views. This involves:
- Register it in the web/src/types.ts file (in
ReportOption
). - Define some information about the check and include it in the corresponding section in
CHECKS_PER_CATEGORY
in the web/src/data.tsx file. This includes picking up an icon for it, which should come from React Icons.
The new check must be documented in the checks.md file. This includes adding a new entry in the documentation section of the file, as well as listing the new check in the corresponding check sets.