@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()); }
@Test public void add_rules_to_existing_repository() { RulesDefinition.NewRepository newFindbugs = context.createRepository("findbugs", "java").setName("Findbugs"); newFindbugs.createRule("NPE").setName("NPE").setHtmlDescription("NPE"); newFindbugs.done(); RulesDefinition.NewRepository newFbContrib = context.createRepository("findbugs", "java"); newFbContrib.createRule("VULNERABILITY").setName("Vulnerability").setMarkdownDescription("Detect vulnerability"); newFbContrib.done(); assertThat(context.repositories()).hasSize(1); RulesDefinition.Repository findbugs = context.repository("findbugs"); assertThat(findbugs.key()).isEqualTo("findbugs"); assertThat(findbugs.language()).isEqualTo("java"); assertThat(findbugs.name()).isEqualTo("Findbugs"); assertThat(findbugs.rules()).extracting("key").containsOnly("NPE", "VULNERABILITY"); }
@Test public void cant_set_blank_repository_name() { context.createRepository("findbugs", "java").setName(null).done(); assertThat(context.repository("findbugs").name()).isEqualTo("findbugs"); }
@Override public void define(Context context) { NewRepository repo = context.createRepository(repositoryKey(), "less").setName(repositoryName()); new AnnotationBasedRulesDefinition(repo, "less").addRuleClasses(false, ImmutableList.copyOf(checkClasses())); repo.done(); }
/** * Defines rule repository with check metadata from check classes' annotations. * This method should be overridden if check metadata are provided via another format, * e.g: XMl, JSON. */ @Override public void define(RulesDefinition.Context context) { RulesDefinition.NewRepository repo = context.createRepository(repositoryKey(), "js").setName(repositoryName()); // Load metadata from check classes' annotations new AnnotationBasedRulesDefinition(repo, "javascript").addRuleClasses(false, ImmutableList.copyOf(checkClasses())); repo.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(); }
@Override public void define(Context context) { NewRepository repository = context .createRepository(REPOSITORY_KEY, Python.KEY) .setName(REPOSITORY_NAME); xmlLoader.load(repository, getClass().getResourceAsStream(RULES_FILE), UTF_8.name()); defineRemediationFunction(repository); repository.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 repository = context .createRepository(fxCopConf.repositoryKey(), fxCopConf.languageKey()) .setName(REPOSITORY_NAME); RulesDefinitionXmlLoader loader = new RulesDefinitionXmlLoader(); loader.load(repository, new InputStreamReader(getClass().getResourceAsStream("/org/sonar/plugins/fxcop/" + fxCopConf.languageKey() + "-rules.xml"), Charsets.UTF_8)); sqaleLoader.loadSqale(repository); repository.done(); }
@Override public void define(Context context) { NewRepository repo = context.createRepository(repositoryKey(), "css").setName(repositoryName()); new AnnotationBasedRulesDefinition(repo, "css").addRuleClasses(false, ImmutableList.copyOf(checkClasses())); repo.done(); }
@Override public void define(Context context) { NewRepository repository = context.createRepository(REPOSITORY_KEY, ObjectiveC.KEY).setName(REPOSITORY_NAME); try(BufferedReader reader = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream(RULES_FILE), Charset.forName("UTF-8")))){ List<String> lines = reader.lines().collect(Collectors.toList()); addRules(repository,lines); } catch (IOException e) { LOGGER.error("Failed to load OCLint rules", e); } SqaleXmlLoader.load(repository, "/com/sonar/sqale/oclint-model.xml"); repository.done(); }
@Override public void define(Context context) { NewRepository repo = context.createRepository(REPOSITORY_KEY, "java"); repo.setName(REPOSITORY_KEY); RulesDefinitionAnnotationLoader annotationLoader = new RulesDefinitionAnnotationLoader(); annotationLoader.load(repo, JavaDebuggingPluginCheckRegistrar.checkClasses()); annotationLoader.load(repo, JavaDebuggingPluginCheckRegistrar.testCheckClasses()); repo.done(); } }
private void defineRulesXoo(Context context) { NewRepository repo = context.createRepository(XOO_REPOSITORY, Xoo.KEY).setName("Xoo");
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());
/** * This is temporarily accepted only for the support of the common-rules that are still declared * by plugins. It could be removed in 7.0 * @since 5.2 */ @Test public void allow_to_replace_an_existing_common_rule() { RulesDefinition.NewRepository newCommonJava1 = context.createRepository("common-java", "java").setName("Common Java"); newCommonJava1.createRule("coverage").setName("Lack of coverage").setHtmlDescription("Coverage must be high"); newCommonJava1.done(); RulesDefinition.NewRepository newCommonJava2 = context.createRepository("common-java", "java"); newCommonJava2.createRule("coverage").setName("Lack of coverage (V2)").setMarkdownDescription("Coverage must be high (V2)"); newCommonJava2.done(); RulesDefinition.Repository commonJava = context.repository("common-java"); assertThat(commonJava.rules()).hasSize(1); RulesDefinition.Rule rule = commonJava.rule("coverage"); assertThat(rule.name()).isEqualTo("Lack of coverage (V2)"); // replacement but not merge -> keep only the v2 (which has markdown but not html description) assertThat(rule.markdownDescription()).isEqualTo("Coverage must be high (V2)"); assertThat(rule.htmlDescription()).isNull(); // do not log warning assertThat(logTester.logs()).isEmpty(); }
@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(); } }
@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(); }
@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(); } }
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(); }