def configure_checkers_or_reports(self): for config in self.config.configure: if config.count(':') < 2: raise robocop.exceptions.ConfigGeneralError( f"Provided invalid config: '{config}' (general pattern: <rule>:<param>:<value>)") rule_or_report, param, value, *values = config.split(':') if rule_or_report in self.rules: msg, checker = self.rules[rule_or_report] if param == 'severity': self.rules[rule_or_report] = (msg.change_severity(value), checker) else: configurable = msg.get_configurable(param) if configurable is None: available_conf = msg.available_configurables(checker=checker) raise robocop.exceptions.ConfigGeneralError( f"Provided param '{param}' for rule '{rule_or_report}' does not exist. " f"Available configurable(s) for this rule:\n" f" {available_conf}" ) checker.configure(configurable[1], configurable[2](value)) elif rule_or_report in self.reports: self.reports[rule_or_report].configure(param, value, *values) else: similiar = RecommendationFinder().find_similar(rule_or_report, self.rules) raise robocop.exceptions.ConfigGeneralError( f"Provided rule or report '{rule_or_report}' does not exist.{similiar}")
def validate_rule_names(self, rules): # add rule name in form of old_name: new_name deprecated = {} for rule in chain(self.include, self.exclude): if rule in deprecated: # update warning description to specific case print( f"### DEPRECATION WARNING ###\nThe name (or ID) of the rule '{rule}' is " f"renamed to '{deprecated[rule]}'. " f"Update your configuration if you're using old name. " f"This information will disappear in the next version (X.Y.Z)\n\n" ) self.replace_in_set(self.include, rule, deprecated[rule]) self.replace_in_set(self.exclude, rule, deprecated[rule]) elif rule not in rules: similar = RecommendationFinder().find_similar(rule, rules) raise ConfigGeneralError( f"Provided rule '{rule}' does not exist. {similar}")
def validate_rule_names(self, rules): deprecated = { 'setting-name-not-capitalized': 'setting-name-not-in-title-case', 'not-capitalized-keyword-name': 'wrong-case-in-keyword-name', 'missing-doc-testcase': 'missing-doc-test-case' } for rule in chain(self.include, self.exclude): # TODO: Remove in 1.9.0 if rule in deprecated: print(f"### DEPRECATION WARNING: The name of the rule '{rule}' is " f"renamed to '{deprecated[rule]}' starting from Robocop 1.8.0. " f"Update your configuration if you're using old name. ###\n") self.replace_in_set(self.include, rule, deprecated[rule]) self.replace_in_set(self.exclude, rule, deprecated[rule]) elif rule not in rules: similiar = RecommendationFinder().find_similar(rule, rules) raise ConfigGeneralError(f"Provided rule '{rule}' does not exist.{similiar}")
def configure_checkers_or_reports(self): for config in self.config.configure: if config.count(":") < 2: raise robocop.exceptions.ConfigGeneralError( f"Provided invalid config: '{config}' (general pattern: <rule>:<param>:<value>)" ) rule_or_report, param, value = config.split(":", maxsplit=2) if rule_or_report in self.rules: rule = self.rules[rule_or_report] rule.configure(param, value) elif rule_or_report in self.reports: self.reports[rule_or_report].configure(param, value) else: similar = RecommendationFinder().find_similar( rule_or_report, self.rules) raise robocop.exceptions.ConfigGeneralError( f"Provided rule or report '{rule_or_report}' does not exist. {similar}" )
def test_normalize(self, name, normalized): rec = RecommendationFinder() actual = rec.normalize(name) assert actual == normalized
def test_find_similiar(self, name, candidates, similar): rec = RecommendationFinder().find_similar(name, candidates) assert similar == rec