@Test public void define_repositories() { assertThat(context.repositories()).isEmpty(); context.createRepository("findbugs", "java").setName("Findbugs").done(); context.createRepository("checkstyle", "java").done(); assertThat(context.repositories()).hasSize(2); RulesDefinition.Repository findbugs = context.repository("findbugs"); assertThat(findbugs).isNotNull(); assertThat(findbugs.key()).isEqualTo("findbugs"); assertThat(findbugs.language()).isEqualTo("java"); assertThat(findbugs.name()).isEqualTo("Findbugs"); assertThat(findbugs.rules()).isEmpty(); RulesDefinition.Repository checkstyle = context.repository("checkstyle"); assertThat(checkstyle).isNotNull(); assertThat(checkstyle.key()).isEqualTo("checkstyle"); assertThat(checkstyle.language()).isEqualTo("java"); // default name is key assertThat(checkstyle.name()).isEqualTo("checkstyle"); assertThat(checkstyle.rules()).isEmpty(); assertThat(context.repository("unknown")).isNull(); // test equals() and hashCode() assertThat(findbugs).isEqualTo(findbugs).isNotEqualTo(checkstyle).isNotEqualTo("findbugs").isNotEqualTo(null); assertThat(findbugs.hashCode()).isEqualTo(findbugs.hashCode()); }
@SafeVarargs private final void createRule(RulesDefinition.Context context, String language, String repositoryKey, String ruleKey, Consumer<NewRule>... consumers) { NewRepository repo = context.createRepository(repositoryKey, language); NewRule newRule = repo.createRule(ruleKey) .setName(ruleKey) .setHtmlDescription("Description of One") .setSeverity(BLOCKER) .setType(RuleType.CODE_SMELL) .setStatus(RuleStatus.BETA); Arrays.stream(consumers).forEach(c -> c.accept(newRule)); repo.done(); }
/** * Loads descriptions of rules and related rule parameters. Existing descriptions * are overridden if English labels exist in bundles. */ public void load(RulesDefinition.NewRepository repo) { for (RulesDefinition.NewRule rule : repo.rules()) { String name = i18n.getName(repo.key(), rule.key()); if (StringUtils.isNotBlank(name)) { rule.setName(name); } String desc = i18n.getDescription(repo.key(), rule.key()); if (StringUtils.isNotBlank(desc)) { rule.setHtmlDescription(desc); } for (RulesDefinition.NewParam param : rule.params()) { String paramDesc = i18n.getParamDescription(repo.key(), rule.key(), param.key()); if (StringUtils.isNotBlank(paramDesc)) { param.setDescription(paramDesc); } } } } }
@Override public void define(Context context) { NewRepository repo = context.createRepository("findbugs", "java"); repo.createRule("rule1") .setName("Rule One") .setHtmlDescription("Description of Rule One"); repo.done(); } }
@Override public void define(Context context) { NewRepository repo = context.createRepository("test", "java"); repo.createRule("rule1") .setName("Rule One") .setHtmlDescription("Description of Rule One") .setTemplate(true); repo.done(); } }
@Override public void define(RulesDefinition.Context context) { RulesDefinition.NewRepository repo = context.createRepository("common-java", "java"); repo.createRule("InsufficientBranchCoverage") .setName("The name as defined by plugin") .setHtmlDescription("The description as defined by plugin"); repo.done(); } }
@Override public void define(RulesDefinition.Context context) { RulesDefinition.NewRepository repo = context.createRepository("common-java", "java"); repo.createRule("InsufficientBranchCoverage") .setName("The name as defined by core") .setHtmlDescription("The description as defined by core"); repo.done(); } }
@Override public void define(Context context) { NewRepository repo = context.createRepository("squid", "java"); repo.setName("Squid"); repo.createRule("DEF") .setName("DEF") .setHtmlDescription("Description of DEF"); repo.done(); } }
private static void defineRulesXoo2(Context context) { NewRepository repo = context.createRepository(XOO2_REPOSITORY, Xoo2.KEY).setName("Xoo2"); NewRule hasTag = repo.createRule(HasTagSensor.RULE_KEY).setName("Has Tag") .setHtmlDescription("Search for a given tag in Xoo files"); NewRule oneIssuePerLine = repo.createRule(OneIssuePerLineSensor.RULE_KEY).setName("One Issue Per Line") .setHtmlDescription("Generate an issue on each line of a file. It requires the metric \"lines\"."); oneIssuePerLine .setDebtRemediationFunction(hasTag.debtRemediationFunctions().linear("1min")) .setGapDescription("It takes about 1 minute to an experienced software craftsman to remove a line of code"); repo.done(); }
private static void defineRulesXooExternal(Context context) { NewRepository repo = context.createExternalRepository(OneExternalIssuePerLineSensor.ENGINE_ID, Xoo.KEY).setName(OneExternalIssuePerLineSensor.ENGINE_ID); repo.createRule(OnePredefinedRuleExternalIssuePerLineSensor.RULE_ID) .setSeverity(OnePredefinedRuleExternalIssuePerLineSensor.SEVERITY) .setType(OnePredefinedRuleExternalIssuePerLineSensor.TYPE) .setScope(RuleScope.ALL) .setHtmlDescription("Generates one external issue in each line") .setName("One external issue per line"); repo.done(); }
@Override public void define(Context context) { NewRepository repo = context.createRepository("findbugs", "java"); repo.setName("Findbugs"); repo.createRule("ABC") .setName("ABC") .setHtmlDescription("Description of ABC"); repo.done(); } }
/** * @since 5.1 */ public void load(RulesDefinition.NewRepository repo, InputStream input, Charset charset) { try (Reader reader = new InputStreamReader(input, charset)) { load(repo, reader); } catch (IOException e) { throw new IllegalStateException("Error while reading XML rules definition for repository " + repo.key(), e); } }
@Override public void define(RulesDefinition.Context context) { for (Language language : languages.all()) { RulesDefinition.NewRepository repo = context.createRepository(commonRepositoryForLang(language.getKey()), language.getKey()); repo.setName("Common " + language.getName()); defineBranchCoverageRule(repo); defineLineCoverageRule(repo); defineCommentDensityRule(repo); defineDuplicatedBlocksRule(repo); defineFailedUnitTestRule(repo); defineSkippedUnitTestRule(repo); repo.done(); } }
context.setCurrentPluginKey(serverPluginRepository.getPluginKey(repository)); if (context.repository(repository.getKey()) == null) { newRepository = context.createRepository(repository.getKey(), repository.getLanguage()); newRepository.setName(repository.getName()); } else { newRepository = context.extendRepository(repository.getKey(), repository.getLanguage()); RulesDefinition.NewRule newRule = newRepository.createRule(rule.getKey()); newRule.setName(ruleName(repository.getKey(), rule)); newRule.setHtmlDescription(ruleDescription(repository.getKey(), rule)); newRule.setInternalKey(rule.getConfigKey()); newRule.setTemplate(rule.isTemplate()); newRule.setSeverity(rule.getSeverity().toString()); newRepository.done();
private void defineRulesXoo(Context context) { NewRepository repo = context.createRepository(XOO_REPOSITORY, Xoo.KEY).setName("Xoo"); NewRule hasTag = repo.createRule(HasTagSensor.RULE_KEY).setName("Has Tag") .setActivatedByDefault(true) .setHtmlDescription("Search for a given tag in Xoo files"); NewRule ruleWithParameters = repo.createRule("RuleWithParameters").setName("Rule with parameters") NewRule oneIssuePerLine = repo.createRule(OneIssuePerLineSensor.RULE_KEY).setName("One Issue Per Line") repo.createRule(OneIssueOnDirPerFileSensor.RULE_KEY).setName("One Issue On Dir Per File") NewRule oneIssuePerFile = repo.createRule(OneIssuePerFileSensor.RULE_KEY).setName("One Issue Per File") NewRule oneIssuePerTestFile = repo.createRule(OneIssuePerTestFileSensor.RULE_KEY).setName("One Issue Per Test File") NewRule oneIssuePerDirectory = repo.createRule(OneIssuePerDirectorySensor.RULE_KEY).setName("One Issue Per Directory") NewRule oneDayDebtPerFile = repo.createRule(OneDayDebtPerFileSensor.RULE_KEY).setName("One Day Debt Per File") NewRule oneIssuePerModule = repo.createRule(OneIssuePerModuleSensor.RULE_KEY).setName("One Issue Per Module") repo.createRule(OneBlockerIssuePerFileSensor.RULE_KEY).setName("One Blocker Issue Per File") repo.createRule(CustomMessageSensor.RULE_KEY).setName("Issue With Custom Message") repo.createRule(RandomAccessSensor.RULE_KEY).setName("One Issue Per File with Random Access") repo.createRule(MultilineIssuesSensor.RULE_KEY).setName("Creates issues with ranges/multiple locations")
RulesDefinition.NewRule rule = repo.createRule(key) .setSeverity(severity) .setName(name) .setInternalKey(internalKey) .setTags(tags.toArray(new String[tags.size()])) .setTemplate(template) fillParams(rule, params); } catch (Exception e) { throw new IllegalStateException(format("Fail to load the rule with key [%s:%s]", repo.key(), key), e);
@Override public void define(Context context) { NewRepository repository = context .createRepository(CheckList.REPOSITORY_KEY, JavaScriptLanguage.KEY) .setName(CheckList.REPOSITORY_NAME); RuleMetadataLoader ruleMetadataLoader = new RuleMetadataLoader(METADATA_LOCATION, SonarWayProfile.PATH_TO_JSON); ruleMetadataLoader.addRulesByAnnotatedClass(repository, CheckList.getChecks()); NewRule commentRegularExpression = repository.rule("CommentRegularExpression"); commentRegularExpression.setTemplate(true); repository.done(); }
@Override public void define(Context context) { NewRepository repository = context.createRepository(Xml.REPOSITORY_KEY, Xml.KEY).setName(Xml.REPOSITORY_NAME); RuleMetadataLoader ruleMetadataLoader = new RuleMetadataLoader(Xml.XML_RESOURCE_PATH, Xml.SONAR_WAY_PATH, sonarRuntime); // add the new checks ruleMetadataLoader.addRulesByAnnotatedClass(repository, CheckList.getCheckClasses()); repository.rule("XPathCheck").setTemplate(true); repository.done(); } }
@Override public void define(Context context) { NewRepository repository = context .createRepository(CheckList.REPOSITORY_KEY, Python.KEY) .setName(REPOSITORY_NAME); getRuleMetadataLoader().addRulesByAnnotatedClass(repository, getCheckClasses()); repository.rules().stream() .filter(rule -> TEMPLATE_RULE_KEYS.contains(rule.key())) .forEach(rule -> rule.setTemplate(true)); repository.done(); }
@Override public void define(Context context) { NewRepository repository = context .createRepository(CheckList.REPOSITORY_KEY, JavaScriptLanguage.KEY) .setName(CheckList.REPOSITORY_NAME); RuleMetadataLoader ruleMetadataLoader = new RuleMetadataLoader(METADATA_LOCATION, SonarWayProfile.PATH_TO_JSON); ruleMetadataLoader.addRulesByAnnotatedClass(repository, CheckList.getChecks()); NewRule commentRegularExpression = repository.rule("CommentRegularExpression"); commentRegularExpression.setTemplate(true); repository.done(); }