Helper class to load
RulesDefinition
extension point from a XML file.
Example
public class MyRules implements RulesDefinition {
private final RulesDefinitionXmlLoader xmlLoader;
public MyRules(RulesDefinitionXmlLoader xmlLoader) {
this.xmlLoader = xmlLoader;
}
@Override
public void define(Context context) {
NewRepository repository = context.createRepository("my-repo", "my-lang");
xmlLoader.load(repository, getClass().getResourceAsStream("/my-rules.xml"), StandardCharsets.UTF_8.name());
repository.done();
}
}
XML Format
<rules>
<rule>
<key>the-required-rule-key</key>*
<name>The required purpose of the rule</name>
<description>
<![CDATA[Required HTML description]]>
</description>
<!-- Optional key for configuration of some rule engines -->
<internalKey>Checker/TreeWalker/LocalVariableName</internalKey>
<!-- Default severity when enabling the rule in a Quality profile. -->
<!-- Possible values are INFO, MINOR, MAJOR (default), CRITICAL, BLOCKER. -->
<severity>BLOCKER</severity>
<!-- Possible values are SINGLE (default) and MULTIPLE for template rules -->
<cardinality>SINGLE</cardinality>
<!-- Status displayed in rules console. Possible values are BETA, READY (default), DEPRECATED. -->
<status>BETA</status>
<!-- Optional tags. See org.sonar.api.server.rule.RuleTagFormat. -->
<tag>style</tag>
<tag>security</tag>
<param>
<key>the-param-key</key>
<description>
<![CDATA[the optional param description]]>
</description>
<!-- Optional field to define the default value used when enabling the rule in a Quality profile -->
<defaultValue>42</defaultValue>
</param>
<param>
<key>another-param</key>
</param>
<!-- Deprecated field, replaced by "internalKey" -->
<configKey>Checker/TreeWalker/LocalVariableName</configKey>
<!-- Deprecated field, replaced by "severity" -->
<priority>BLOCKER</priority>
</rule>
</rules>