/** * 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); } } } } }
public void load(NewRepository repository) { InputStream stream = getClass().getResourceAsStream("/rules/"+repository.key().toLowerCase()+".css"); if(stream!=null) { try { String css = IOUtils.toString(stream); for(NewRule rule : repository.rules()) { rule.setHtmlDescription("<style>"+css+"</style><div id=\""+containerNodeId+"\">"+RuleUtil.getHtmlDescription(rule)+"</div>"); LOG.debug("Adding custom CSS for HTML description for rule "+repository.key()+":"+rule.key()); } } catch (IOException e) { LOG.error("failed to load CSS file for repository "+repository.key()); } catch (RuleDefinitionException e) { LOG.error("failed to add CSS file for repository "+repository.key()); } } else { LOG.info("No CSS file for repository "+repository.key()); } } }
public static void loadNames(NewRepository repository, InputStream stream) { Properties properties = new Properties(); try { properties.load(stream); } catch (IOException e) { throw new IllegalArgumentException("Could not read names from properties", e); } for (NewRule rule : repository.rules()) { String baseKey = "rule." + repository.key() + "." + rule.key(); String nameKey = baseKey + ".name"; String ruleName = properties.getProperty(nameKey); if (ruleName != null) { rule.setName(ruleName); } for (NewParam param : rule.params()) { String paramDescriptionKey = baseKey + ".param." + param.key(); String paramDescription = properties.getProperty(paramDescriptionKey); if (paramDescription != null) { param.setDescription(paramDescription); } } } }
@SuppressWarnings("rawtypes") @Override public void define(final Context context) { final NewRepository repository = context.createRepository(REPOSITORY_KEY, Java.KEY) .setName(REPOSITORY_NAME); final List<Class> checkClasses = ImmutableList.<Class> builder() .addAll(SmellChecksRegistrar.checkClasses()) .build(); new AnnotationBasedRulesDefinition(repository, Java.KEY).addRuleClasses(false, checkClasses); for (final NewRule rule : repository.rules()) { final String metadataKey = rule.key(); // Setting internal key is essential for rule templates (see SONAR-6162), and it is not done by AnnotationBasedRulesDefinition from // sslr-squid-bridge version 2.5.1: rule.setInternalKey(metadataKey); rule.setHtmlDescription(readRuleDefinitionResource(metadataKey + ".html")); addMetadata(rule, metadataKey); } repository.done(); }
public void load(NewRepository repository) { Collection<NewRule> rules = repository.rules(); for(NewRule rule : rules) { InputStream stream = getClass().getResourceAsStream("/rules/"+repository.key().toLowerCase()+"/"+sanitize(rule.key())+".html"); if(stream!=null) { try { LOG.debug("Adding HTML description for rule "+repository.key()+":"+rule.key()); String description = IOUtils.toString(stream); rule.setHtmlDescription("<p>"+RuleUtil.getHtmlDescription(rule)+"</p><div class=\""+htmlDescriptionClass+"\">"+description+"</div>"); } catch (IOException e) { LOG.error("failed to load HTML description for rule "+rule.key()); } catch (RuleDefinitionException e) { LOG.error("failed to read current HTML description for rule "+rule.key()); } } else { LOG.debug("No HTML description for rule "+rule.key()+" for repository "+repository.key()); } } }
@Override public void define(Context context) { NewRepository repository = context .createRepository(REPOSITORY_KEY, Java.KEY) .setName("Finger Java Custom Rules"); new AnnotationBasedRulesDefinition(repository, Java.KEY) .addRuleClasses(/* don't fail if no SQALE annotations */ false, RulesList.getChecks()); for (NewRule rule : repository.rules()) { String metadataKey = rule.key(); System.out.println(metadataKey); // Setting internal key is essential for rule templates (see SONAR-6162), and it is not done by AnnotationBasedRulesDefinition from // sslr-squid-bridge version 2.5.1: rule.setInternalKey(metadataKey); rule.setHtmlDescription(readRuleDefinitionResource(metadataKey + ".html")); addMetadata(rule, metadataKey); } repository.done(); }
@Override public void define(Context context) { NewRepository repository = context.createRepository(CheckRepository.REPOSITORY_KEY, YamlLanguage.KEY).setName(CheckRepository.REPOSITORY_NAME); RuleMetadataLoader metadataLoader = new RuleMetadataLoader(RULES_DEFINITION_FOLDER); List<Class> allCheckClasses = new ArrayList<>(CheckRepository.getCheckClasses()); metadataLoader.addRulesByAnnotatedClass(repository, allCheckClasses); // Declare rule templates for(NewRule rule : repository.rules()) { if (CheckRepository.getTemplateRuleKeys().contains(rule.key())) { rule.setTemplate(true); } } repository.done(); } }
@Override public void define(Context context) { NewRepository repository = context .createRepository(REPOSITORY_KEY, HtmlConstants.LANGUAGE_KEY) .setName(REPOSITORY_NAME); RuleMetadataLoader ruleMetadataLoader = new RuleMetadataLoader(RESOURCE_BASE_PATH, SonarWayProfile.JSON_PROFILE_PATH); ruleMetadataLoader.addRulesByAnnotatedClass(repository, CheckClasses.getCheckClasses()); for (NewRule rule : repository.rules()) { if (TEMPLATE_RULE_KEYS.contains(rule.key())) { rule.setTemplate(true); } } repository.done(); } }
public void load(NewRepository repository) { Collection<NewRule> rules = repository.rules(); for (NewRule rule : rules) { InputStream stream = getClass().getResourceAsStream("/rules/" + repository.key().toLowerCase() + "/" + sanitize(rule.key()) + ".md"); if (stream != null) { try { String description = IOUtils.toString(stream); rule.setMarkdownDescription(description); } catch (IOException e) { LOG.error("failed to load markdown description for rule " + rule.key()); } } else { LOG.debug("No markdown description for rule " + rule.key() + " for repository " + repository.key()); } } }
private void defineRulesForLanguage(Context context, String repositoryKey, String repositoryName, String languageKey) { NewRepository repository = context.createRepository(repositoryKey, languageKey).setName(repositoryName); try(InputStream rulesXml = this.getClass().getResourceAsStream(rulesDefinitionFilePath())) { if (rulesXml != null) { RulesDefinitionXmlLoader rulesLoader = new RulesDefinitionXmlLoader(); rulesLoader.load(repository, rulesXml, StandardCharsets.UTF_8.name()); addRemediationCost(repository.rules()); } } catch (IOException e) { throw MessageException.of("Unable to load rules defintion", e); } repository.done(); }
@Override public void define(Context context) { NewRepository repository = context .createRepository(CheckList.REPOSITORY_KEY, Java.KEY) .setName("SonarQube"); AnnotationBasedRulesDefinition.load(repository, Java.KEY, CheckList.getChecks()); for (NewRule rule : repository.rules()) { //FIXME: set internal key to key to ensure rule templates works properly : should be removed when SONAR-6162 is fixed. rule.setInternalKey(rule.key()); } repository.done(); } }
private void defineRulesForLanguage(Context context, String repositoryKey, String repositoryName, String languageKey) { NewRepository repository = context.createRepository(repositoryKey, languageKey).setName(repositoryName); LOGGER.debug("Repository " + repositoryName + " created with the key " + repositoryKey + " " + repository); InputStream rulesXml = this.getClass().getResourceAsStream(rulesDefinitionFilePath()); if (rulesXml != null) { RulesDefinitionXmlLoader rulesLoader = new RulesDefinitionXmlLoader(); rulesLoader.load(repository, rulesXml, StandardCharsets.UTF_8.name()); } else { LOGGER.warn("Cannot load the rules file " + PATH_TO_RULES_XML); } repository.done(); LOGGER.debug("Repository " + repositoryName + " done: " + repository.rules() + " " + repository.rules().size()); }
@Override public void define(Context context) { NewRepository repository = context.createRepository(repositoryKey(), "php").setName("MyCompany Custom Repository"); // Load rule meta data from annotations RulesDefinitionAnnotationLoader annotationLoader = new RulesDefinitionAnnotationLoader(); checkClasses().forEach(ruleClass -> annotationLoader.load(repository, ruleClass)); // Optionally override html description from annotation with content from html files repository.rules().forEach(rule -> rule.setHtmlDescription(loadResource("/org/sonar/l10n/php/rules/custom/" + rule.key() + ".html"))); // Optionally define remediation costs Map<String, String> remediationCosts = new HashMap<>(); remediationCosts.put(ForbiddenFunctionUseCheck.KEY, "5min"); remediationCosts.put(OtherForbiddenFunctionUseCheck.KEY, "5min"); repository.rules().forEach(rule -> rule.setDebtRemediationFunction( rule.debtRemediationFunctions().constantPerIssue(remediationCosts.get(rule.key())))); repository.done(); }
public static void loadHtmlDescriptions(RulesDefinition.NewRepository repository, String languageKey) { ExternalDescriptionLoader loader = new ExternalDescriptionLoader(languageKey); for (RulesDefinition.NewRule newRule : repository.rules()) { loader.addHtmlDescription(newRule); } }
@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(); }
private static void defineRemediationFunction(NewRepository repository) { Map<String, String> remediationCostMap = loadRemediationCostMap(); for (NewRule rule : repository.rules()) { String gap = remediationCostMap.get(rule.key()); if (gap == null) { throw new IllegalStateException("Missing remediation cost for rule " + rule.key()); } else if (!gap.equals("null")) { rule.setDebtRemediationFunction(rule.debtRemediationFunctions().linear(gap)); } } }
private static void defineRemediationFunction(NewRepository repository) { Map<String, String> remediationCostMap = loadRemediationCostMap(); for (NewRule rule : repository.rules()) { String gap = remediationCostMap.get(rule.key()); if (gap == null) { throw new IllegalStateException("Missing remediation cost for rule " + rule.key()); } else if (!gap.equals("null")) { rule.setDebtRemediationFunction(rule.debtRemediationFunctions().linear(gap)); } } }
@Override public void define(Context context) { NewRepository repository = context .createRepository(REPOSITORY_KEY, Groovy.KEY) .setName(REPOSITORY_NAME); RulesDefinitionXmlLoader ruleLoader = new RulesDefinitionXmlLoader(); ruleLoader.load(repository, CodeNarcRulesDefinition.class.getResourceAsStream("/org/sonar/plugins/groovy/rules.xml"), "UTF-8"); addRemediationCost(repository.rules()); 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(); }
public static void loadHtmlDescriptions(NewRepository repository, String languageKey) { ExternalDescriptionLoader loader = new ExternalDescriptionLoader(repository, languageKey); for (NewRule newRule : repository.rules()) { loader.addHtmlDescription(newRule); } }