Completed
Pull Request — master (#1109)
by Abdeali
01:32
created

bears.python.PyLintBear._get_groupdict()   A

Complexity

Conditions 3

Size

Total Lines 12

Duplication

Lines 0
Ratio 0 %
Metric Value
cc 3
dl 0
loc 12
rs 9.4286
1
import sys
2
import re
3
4
from coalib.bearlib.abstractions.Lint import Lint
5
from coalib.bears.LocalBear import LocalBear
6
from coalib.settings.Setting import typed_list
7
from coalib.results.RESULT_SEVERITY import RESULT_SEVERITY
8
9
10
# We omit this case in our tests for technical reasons
11
if sys.version_info < (3, 3):  # pragma: no cover
12
    raise ImportError("PyLint does not support python3 < 3.3")
13
14
15
class PyLintBear(LocalBear, Lint):
16
    executable = 'pylint'
17
    arguments = ('--reports=n --persistent=n --msg-template='
18
                 '"{line}.{column}|{C}: {msg_id} - {msg}"')
19
    output_regex = re.compile(r'(?P<line>\d+)\.(?P<column>\d+)'
20
                    r'\|(?P<severity>[WFECRI]): (?P<message>.*)')
21
22
    @staticmethod
23
    def _get_groupdict(match):
24
        groups = Lint._get_groupdict(match)
25
26
        if groups["severity"] in "FE":
27
            groups["severity"] = RESULT_SEVERITY.MAJOR
28
        elif groups["severity"] in "CRI":
29
            groups["severity"] = RESULT_SEVERITY.INFO
30
        else:
31
            groups["severity"] = RESULT_SEVERITY.NORMAL
32
33
        return groups
34
35
    def run(self,
36
            filename,
37
            file,
38
            pylint_disable: typed_list(str)=("fixme"),
39
            pylint_enable: typed_list(str)=None,
40
            pylint_cli_options: str=""):
41
        '''
42
        Checks the code with pylint. This will run pylint over each file
43
        separately.
44
45
        :param pylint_disable:     Disable the message, report, category or
46
                                   checker with the given id(s).
47
        :param pylint_enable:      Enable the message, report, category or
48
                                   checker with the given id(s).
49
        :param pylint_cli_options: Any command line options you wish to be
50
                                   passed to pylint.
51
        '''
52
        if pylint_disable:
53
            self.arguments += " --disable=" + ",".join(pylint_disable)
54
        if pylint_enable:
55
            self.arguments += " --enable=" + ",".join(pylint_enable)
56
        if pylint_cli_options:
57
            self.arguments += " " + pylint_cli_options
58
59
        return self.lint(filename)
60