def msg_0102_0204():
    return {
        "0102": Rule(rule_id="0102", name="other-message", msg="""this is description""", severity=RuleSeverity.ERROR),
        "0204": Rule(
            rule_id="0204", name="another-message", msg=f"Message with meaning {4}", severity=RuleSeverity.INFO
        ),
    }
def warning_msg():
    return Rule(
        RuleParam(name="param_name", converter=int, default=1, desc=""),
        rule_id="0102",
        name="warning-message",
        msg="Some description",
        severity=RuleSeverity.WARNING,
    )
def valid_msg_with_conf():
    return Rule(
        RuleParam(name="param_name", converter=int, default=1, desc=""),
        rule_id="0101",
        name="some-message",
        msg="Some description",
        severity=RuleSeverity.WARNING,
    )
def error_msg():
    return Rule(
        RuleParam(name="param_name", converter=int, default=1, desc=""),
        rule_id="0101",
        name="error-message",
        msg="Some description",
        severity=RuleSeverity.ERROR,
    )
def msg_0102_0204_config():
    return {
        "0102": Rule(
            RuleParam(name="conf_param1", converter=int, default=0, desc=""),
            rule_id="0102",
            name="other-message",
            msg="""this is description""",
            severity=RuleSeverity.ERROR,
        ),
        "0204": Rule(
            RuleParam(name="conf_param2", converter=int, default=0, desc=""),
            rule_id="0204",
            name="another-message",
            msg=f"Message with meaning {4}",
            severity=RuleSeverity.INFO,
        ),
    }
def info_msg():
    return Rule(
        RuleParam(name="param_name", converter=int, default=1, desc=""),
        rule_id="0103",
        name="info-message",
        msg="Some description",
        severity=RuleSeverity.INFO,
    )
Exemple #7
0
 def test_parse_invalid_configurable(self, configurable):
     msg = ("some-message", "Some description", RuleSeverity.WARNING)
     body = msg + tuple(configurable)
     with pytest.raises(
             robocop.exceptions.InvalidRuleConfigurableError) as err:
         Rule('0101', body)
     assert rf"Fatal error: Rule '0101' has invalid configurable:\n{body}" in str(
         err)
 def test_parse_valid_configurable(self):
     rule = Rule(
         RuleParam(name="Some", default="5", converter=int, desc=""),
         rule_id="0101",
         name="some-message",
         msg="Some description",
         severity=RuleSeverity.WARNING,
     )
     assert rule.config["Some"].value == 5
def msg_0101_config():
    return {
        "0101": Rule(
            RuleParam(name="conf_param", converter=int, default=0, desc=""),
            rule_id="0101",
            name="some-message",
            msg="Some description",
            severity=RuleSeverity.WARNING,
        )
    }
Exemple #10
0
def get_message_with_id_sev(rule_id, sev):
    for severity in RuleSeverity:
        rule_id = rule_id.replace(severity.value, "")
    return Rule(
        RuleParam(name="param_name", converter=int, default=1, desc=""),
        rule_id="0101",
        name=f"some-message-{rule_id}",
        msg="Some description",
        severity=sev,
    )
 def test_parse_invalid_configurable(self):
     with pytest.raises(robocop.exceptions.RuleParamFailedInitError) as err:
         Rule(
             RuleParam(name="Some", default="s", converter=int, desc=""),
             rule_id="0101",
             name="some-message",
             msg="Some description",
             severity=RuleSeverity.WARNING,
         )
     assert (
         rf"Failed to configure param `Some` with value `s`. "
         rf"Received error `invalid literal for int() with base 10: 's'`.\n    Parameter type: <class 'int'>\n"
         in str(err)
     )
 def test_prepare_message_with_jinja(self, kwargs, msg, exp):  # noqa
     node = ast.AST()
     node.lineno = 10
     rule = Rule(rule_id="0101", name="some-message", msg=msg, severity=RuleSeverity.WARNING)
     msg = rule.prepare_message(
         source="file1.robot",
         node=node,
         lineno=None,
         col=None,
         end_lineno=None,
         end_col=None,
         ext_disablers=None,
         **kwargs,
     )
     assert msg.desc == exp
 def test_get_non_existing_param(self):
     checker = ValidChecker()
     checker.rules = {
         "some-message":
         Rule(
             RuleParam(name="param",
                       converter=int,
                       default=5,
                       desc="This is desc"),
             rule_id="0101",
             name="some-message",
             msg="Some description",
             severity=RuleSeverity.WARNING,
         )
     }
     with pytest.raises(robocop.exceptions.RuleParamNotFoundError):
         checker.param("some-message", "param2")
Exemple #14
0
def message():
    rule = Rule(
        RuleParam(name="param_name", converter=int, default=1, desc=""),
        rule_id="1010",
        name="somerule",
        msg="Some description",
        severity=RuleSeverity.WARNING,
    )
    return Message(
        rule=rule,
        msg=rule.get_message(),
        source=None,
        node=None,
        lineno=None,
        col=None,
        end_lineno=None,
        end_col=None,
    )
 def test_get_param_with_non_existing_rule(self, robocop_instance):
     checker = ValidChecker()
     checker.rules = {
         "some-message":
         Rule(
             RuleParam(name="param",
                       converter=int,
                       default=5,
                       desc="This is desc"),
             rule_id="0101",
             name="some-message",
             msg="Some description",
             severity=RuleSeverity.WARNING,
         )
     }
     with pytest.raises(robocop.exceptions.RuleNotFoundError) as err:
         checker.param("idontexist", "param")
     assert "ValidChecker checker does not contain rule `idontexist`. Available rules: some-message" in str(
         err)
Exemple #16
0
def message():
    msg = ("somerule", "Some description", RuleSeverity.WARNING)
    return Rule('1010', msg)
Exemple #17
0
def message():
    msg = ("some-message", "Some description", RuleSeverity.WARNING,
           ('param_name', 'param_priv_name', int))
    return Rule('0101', msg)
from collections import Counter

from robot.api import Token
from robot.parsing.model.blocks import Keyword, TestCase
from robot.parsing.model.statements import Comment, EmptyLine
from robot.parsing.model.visitor import ModelVisitor

from robocop.checkers import RawFileChecker, VisitorChecker
from robocop.rules import Rule, RuleParam, RuleSeverity
from robocop.utils import get_errors, get_section_name, token_col

rules = {
    "1001":
    Rule(
        rule_id="1001",
        name="trailing-whitespace",
        msg="Trailing whitespace at the end of line",
        severity=RuleSeverity.WARNING,
    ),
    "1002":
    Rule(
        rule_id="1002",
        name="missing-trailing-blank-line",
        msg="Missing trailing blank line at the end of file",
        severity=RuleSeverity.WARNING,
    ),
    "1003":
    Rule(
        RuleParam(
            name="empty_lines",
            default=2,
            converter=int,
 def register_rules(self, rules):
     for key, value in rules.items():
         rule = Rule(key, value)
         if rule.name in self.rules_map:
             raise DuplicatedRuleError('name', rule.name, self, self)
         self.rules_map[rule.name] = rule
from robocop.checkers import VisitorChecker
from robocop.rules import Rule, RuleSeverity

rules = {
    "1102":
    Rule(rule_id="1102",
         name="smth2",
         msg="Keyword call after [Return] statement",
         severity=RuleSeverity.ERROR)
}


class SmthChecker(VisitorChecker):
    """Checker for keyword calls after [Return] statement."""

    reports = ("smth2", )

    def visit_Keyword(self, node):  # noqa
        self.report("smth", node=node)
    token_col,
)

rules = {
    "0301":
    Rule(
        RuleParam(
            name="pattern",
            default=re.compile(r"[\.\?]"),
            converter=pattern_type,
            desc="pattern defining characters (not) allowed in a name",
        ),
        rule_id="0301",
        name="not-allowed-char-in-name",
        msg=
        "Not allowed character '{{ character }}' found in {{ block_name }} name",
        severity=RuleSeverity.WARNING,
        docs="""
        Reports not allowed pattern found in Test Case or Keyword names. By default it's dot (`.`). You can
        configure what patterns are reported by calling::

             robocop --configure not-allowed-char-in-name:pattern:regex_pattern

        `regex_pattern` should define regex pattern not allowed in names. For example `[@\[]` pattern
        reports any occurrence of `@[` characters.
        """,
    ),
    "0302":
    Rule(
        RuleParam(
            name="convention",
            default="each_word_capitalized",
def valid_msg():
    return Rule(rule_id="0101", name="some-message", msg="Some description", severity=RuleSeverity.WARNING)
Exemple #23
0
def get_message_with_id(rule_id):
    rule_id = Config.replace_severity_values(rule_id)
    return Rule(rule_id=rule_id, name=f"some-message-{rule_id}", msg="Some description", severity=RuleSeverity.WARNING)
def get_message_with_id(rule_id):
    for char in RuleSeverity:
        rule_id = rule_id.replace(char.value, '')
    msg = (f"some-message-{rule_id}", "Some description", RuleSeverity.WARNING)
    return Rule(rule_id, msg)
def msg_0101():
    return {"0101": Rule(rule_id="0101", name="some-message", msg="Some description", severity=RuleSeverity.WARNING)}
def msg_disabled_for_4():
    return {
        "9999": Rule(
            rule_id="9999", name="disabled-in-four", msg="This is desc", severity=RuleSeverity.WARNING, version="<4.0"
        )
    }
Exemple #27
0
def valid_msg():
    msg = ("some-message", "Some description", RuleSeverity.WARNING)
    return Rule('0101', msg)
Exemple #28
0
 def test_parse_invalid_body(self, msg):
     with pytest.raises(robocop.exceptions.InvalidRuleBodyError) as err:
         Rule('0101', msg)
     assert rf"Fatal error: Rule '0101' has invalid body:\n{msg}" in str(
         err)
from robot.parsing.model.blocks import CommentSection, TestCase
from robot.parsing.model.statements import Arguments, Comment, EmptyLine, KeywordCall

from robocop.checkers import RawFileChecker, VisitorChecker
from robocop.rules import Rule, RuleParam, RuleSeverity
from robocop.utils import get_section_name, last_non_empty_line, normalize_robot_name, pattern_type

rules = {
    "0501":
    Rule(
        RuleParam(name="max_len",
                  default=40,
                  converter=int,
                  desc="number of lines allowed in a keyword"),
        rule_id="0501",
        name="too-long-keyword",
        msg=
        "Keyword '{{ keyword_name }}' is too long ({{ keyword_length }}/{{ allowed_length}})",
        severity=RuleSeverity.WARNING,
    ),
    "0502":
    Rule(
        RuleParam(name="min_calls",
                  default=1,
                  converter=int,
                  desc="number of keyword calls required in a keyword"),
        rule_id="0502",
        name="too-few-calls-in-keyword",
        msg=
        "Keyword '{{ keyword_name }}' has too few keywords inside ({{ keyword_count }}/{{ min_allowed_count }})",
Exemple #30
0
 def test_parse_valid_configurable(self, configurable):
     msg = ("some-message", "Some description", RuleSeverity.WARNING)
     body = msg + tuple(configurable)
     rule = Rule('0101', body)
     assert rule.configurable == configurable