ifdef::env-github[]
:tip-caption: :bulb:
:note-caption: :information_source:
endif::[]
= Rule Metadata

This document describes how `+metadata.json+` should be structured.

== `title`, `type`, `tags`, `remediation`, and `defaultSeverity`

These fields are described in the https://docs.sonarqube.org/latest/extension-guide/adding-coding-rules/#coding-rule-guidelines[SonarQube documentation].

== `quickfix` field

Every active rule that is not a security hotspot must specify the availability of a quick fix for its issues.
`metadata.json` must feature a `quickfix` field with one of the following values:

* `unknown`: the feasibility of producing a quick fix is not evaluated.
* `infeasible`: it is not feasible to propose a quick fix for any of the issues, for whatever reason.
* `targeted`: it is possible to implement quick fixes for this rule, but none are implemented right now.
* `partial`: some of the issues produced by the rule propose a quick fix, but not all.
* `covered`: all the issues produced by the rule propose a quick fix.

[NOTE]
====
A `covered` rule is still not guaranteed to provide a quick fix for a particular issue (for instance, if a fix location would be inside a macro expansion or in a different file from the issue location). The rule is said to have a `partial` quick fix only if there exists a family of issues that cannot have a quick fix.

For instance, on one hand, if a rule detects two functions that are dangerous to use, `A` and `B`, and `A` has an obvious replacement (and therefore a quick fix) while `B` does not, the field should be set to `partial`.

On the other hand, if a quick fix could be easily proposed for both `A` and `B`, but the fix location might be inside a macro expansion, or in a different file from the issue location (and hence not feasible given the current SonarLint capabilities), this should not prevent the rule from being tagged as `covered`.
====

[TIP]
====
You can update the quickfix field using this GitHub Workflow: https://github.com/SonarSource/rspec/actions/workflows/update_quickfix_status.yml
====


== `code` field

The code field is an object that contains information related to the clean code taxonomy. It is an object with two required properties:

* `impacts`: A nested object that is treated as a mapping from a software quality to a level (`"INFO"`, `"LOW"`, `"MEDIUM"`, `"HIGH"` or `"BLOCKER"`). Note that at least one software quality has to be specified. The current list of allowed software qualities is `"MAINTAINABILITY"`, `"RELIABILITY"` and `"SECURITY"`.

* `attribute`: A single clean code attribute that the rule aims to achieve. This has to be one of the following values: `"FORMATTED"`, `"CONVENTIONAL"`, `"IDENTIFIABLE"`, `"CLEAR"`, `"LOGICAL"`, `"COMPLETE"`, `"EFFICIENT"`, `"FOCUSED"`, `"DISTINCT"`, `"MODULAR"`, `"TESTED"`, `"LAWFUL"`, `"TRUSTWORTHY"`, `"RESPECTFUL"`.
