@Test public void define_external_rules() { RulesDefinition.NewRepository newRepo = context.createExternalRepository("eslint", "js"); newRepo.createRule("NPE") .setName("Detect NPE")
@Test public void rule_previously_created_as_adhoc_becomes_none_adhoc() { RuleDefinitionDto rule = db.rules().insert(r -> r.setRepositoryKey("external_fake").setIsExternal(true).setIsAdHoc(true)); when(system.now()).thenReturn(DATE2.getTime()); execute((RulesDefinition) context -> { NewRepository repo = context.createExternalRepository("fake", rule.getLanguage()); repo.createRule(rule.getRuleKey()) .setName(rule.getName()) .setHtmlDescription(rule.getDescription()); repo.done(); }); RuleDto reloaded = dbClient.ruleDao().selectByKey(db.getSession(), defaultOrganization, rule.getKey()).get(); assertThat(reloaded.isAdHoc()).isFalse(); }
public static void createExternalRuleRepository(Context context, String linterId, String linterName) { NewRepository externalRepo = context.createExternalRepository(linterId, GoLanguage.KEY).setName(linterName); String pathToRulesMeta = "org/sonar/l10n/go/rules/" + linterId + "/rules.json"; try (InputStreamReader inputStreamReader = new InputStreamReader(AbstractReportSensor.class.getClassLoader().getResourceAsStream(pathToRulesMeta), StandardCharsets.UTF_8)) { ExternalRule[] rules = new Gson().fromJson(inputStreamReader, ExternalRule[].class); for (ExternalRule rule : rules) { NewRule newRule = externalRepo.createRule(rule.key).setName(rule.name); newRule.setHtmlDescription(rule.description); newRule.setDebtRemediationFunction(newRule.debtRemediationFunctions().constantPerIssue(DEFAULT_REMEDIATION_COST + "min")); if (linterId.equals(GoVetReportSensor.LINTER_ID)) { newRule.setType(RuleType.BUG); } } } catch (IOException e) { throw new IllegalStateException("Can't read resource: " + pathToRulesMeta, e); } externalRepo.done(); }
/** * IMPORTANT This method should not be used when SonarQube runtime version is less than 7.2 * because it would trigger calls to {@link org.sonar.api.server.rule.RulesDefinition.Context#createExternalRepository} * which was added in SonarQube 7.2. */ public void createExternalRuleRepository(org.sonar.api.server.rule.RulesDefinition.Context context) { NewRepository externalRepo = context.createExternalRepository(linterKey, languageKey).setName(linterName); for (ExternalRule rule : rulesMap.values()) { NewRule newRule = externalRepo.createRule(rule.key).setName(rule.name); newRule.setHtmlDescription(rule.getDescription(linterKey, linterName)); newRule.setDebtRemediationFunction(newRule.debtRemediationFunctions().constantPerIssue(rule.constantDebtMinutes + "min")); newRule.setType(rule.type); if (rule.tags != null) { newRule.setTags(rule.tags); } if (rule.severity != null) { newRule.setSeverity(rule.severity); } } externalRepo.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.createExternalRepository("eslint", "js"); repo.createRule(RULE_KEY1.rule()) .setName("One") .setHtmlDescription("Description of One") .setSeverity(BLOCKER) .setInternalKey("config1") .setTags("tag1", "tag2", "tag3") .setScope(RuleScope.ALL) .setType(RuleType.CODE_SMELL) .setStatus(RuleStatus.BETA); repo.createRule(EXTERNAL_HOTSPOT_RULE_KEY.rule()) .setName("Hotspot") .setHtmlDescription("Minimal hotspot") .setType(RuleType.SECURITY_HOTSPOT) .addOwaspTop10(OwaspTop10.A1, OwaspTop10.A3) .addCwe(1, 123, 863); 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(); }