summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Bruhin <me@the-compiler.org>2020-07-03 17:44:52 +0200
committerFlorian Bruhin <me@the-compiler.org>2020-07-03 18:56:54 +0200
commitc97203dd624aafeda2359d31d020af80033708d6 (patch)
tree14a762d7db21760f1af84482e9049540d72d23a5
parentae188463d4699253c94b4b176174a0d9e3146bbf (diff)
downloadqutebrowser-c97203dd624aafeda2359d31d020af80033708d6.tar.gz
qutebrowser-c97203dd624aafeda2359d31d020af80033708d6.zip
ci: Change structure in problemmatcher.py again
While trying to simplify the data structure, we didn't consider a case where we want to register multiple matchers with the same severity... Let's simplify things a bit, by having a list of matchers in the data. Also attempt to pass that list to GitHub, because they support doing so, in theory...
-rw-r--r--scripts/dev/ci/problemmatchers.py200
1 files changed, 100 insertions, 100 deletions
diff --git a/scripts/dev/ci/problemmatchers.py b/scripts/dev/ci/problemmatchers.py
index 48173c4ce..13f960c31 100644
--- a/scripts/dev/ci/problemmatchers.py
+++ b/scripts/dev/ci/problemmatchers.py
@@ -34,111 +34,118 @@ import json
MATCHERS = {
# scripts/dev/ci/run.sh:41:39: error: Double quote array expansions to
# avoid re-splitting elements. [SC2068]
- "shellcheck": {
- "pattern": [
- {
- "regexp": r"^(.+):(\d+):(\d+):\s(note|warning|error):\s(.*)\s\[(SC\d+)\]$",
- "file": 1,
- "line": 2,
- "column": 3,
- "severity": 4,
- "message": 5,
- "code": 6,
- },
- ],
- },
+ "shellcheck": [
+ {
+ "pattern": [
+ {
+ "regexp": r"^(.+):(\d+):(\d+):\s(note|warning|error):\s(.*)\s\[(SC\d+)\]$",
+ "file": 1,
+ "line": 2,
+ "column": 3,
+ "severity": 4,
+ "message": 5,
+ "code": 6,
+ },
+ ],
+ },
+ ],
# filename.py:313: unused function 'i_am_never_used' (60% confidence)
- "vulture": {
- "severity": "warning",
- "pattern": [
- {
- "regexp": r"^([^:]+):(\d+): ([^(]+ \(\d+% confidence\))$",
- "file": 1,
- "line": 2,
- "message": 3,
- }
- ]
- },
+ "vulture": [
+ {
+ "severity": "warning",
+ "pattern": [
+ {
+ "regexp": r"^([^:]+):(\d+): ([^(]+ \(\d+% confidence\))$",
+ "file": 1,
+ "line": 2,
+ "message": 3,
+ }
+ ]
+ },
+ ],
# filename.py:1:1: D100 Missing docstring in public module
- "flake8": {
- # "undefined name" is FXXX (i.e. not an error), but e.g. multiple
- # spaces before an operator is EXXX (i.e. an error) - that makes little
- # sense, so let's just treat everything as a warning instead.
- "pattern-warning": [
- {
- "regexp": r"^([^:]+):(\d+):(\d+): ([A-Z]\d{3}) (.*)$",
- "file": 1,
- "line": 2,
- "column": 3,
- "code": 4,
- "message": 5,
- },
- ],
- },
+ "flake8": [
+ {
+ # "undefined name" is FXXX (i.e. not an error), but e.g. multiple
+ # spaces before an operator is EXXX (i.e. an error) - that makes little
+ # sense, so let's just treat everything as a warning instead.
+ "severity": "warning",
+ "pattern": [
+ {
+ "regexp": r"^([^:]+):(\d+):(\d+): ([A-Z]\d{3}) (.*)$",
+ "file": 1,
+ "line": 2,
+ "column": 3,
+ "code": 4,
+ "message": 5,
+ },
+ ],
+ },
+ ],
# filename.py:80: error: Name 'foo' is not defined [name-defined]
- "mypy": {
- "pattern": [
- {
- "regexp": r"^([^:]+):(\d+): ([^:]+): (.*) \[(.*)\]$",
- "file": 1,
- "line": 2,
- "severity": 3,
- "message": 4,
- "code": 5,
- },
- ],
- },
+ "mypy": [
+ {
+ "pattern": [
+ {
+ "regexp": r"^([^:]+):(\d+): ([^:]+): (.*) \[(.*)\]$",
+ "file": 1,
+ "line": 2,
+ "severity": 3,
+ "message": 4,
+ "code": 5,
+ },
+ ],
+ },
+ ],
# For some reason, ANSI color escape codes end up as part of the message
# GitHub gets with colored pylint output - so we have those escape codes
# (e.g. "\033[35m...\033[0m") as part of the regex patterns...
- "pylint": {
- # filename.py:80:10: E0602: Undefined variable 'foo' (undefined-variable)
- "pattern-error": [
- {
- "regexp": r"^([^:]+):(\d+):(\d+): (E\d+): \033\[[\d;]+m([^\033]+).*$",
- "file": 1,
- "line": 2,
- "column": 3,
- "code": 4,
- "message": 5,
- },
- ],
-
- # filename.py:78:14: W0613: Unused argument 'unused' (unused-argument)
- "pattern-warning": [
- {
- "regexp": r"^([^:]+):(\d+):(\d+): ([A-DF-Z]\d+): \033\[[\d;]+m([^\033]+).*$",
- "file": 1,
- "line": 2,
- "column": 3,
- "code": 4,
- "message": 5,
- },
- ],
- },
+ "pylint": [
+ {
+ # filename.py:80:10: E0602: Undefined variable 'foo' (undefined-variable)
+ "severity": "error",
+ "pattern": [
+ {
+ "regexp": r"^([^:]+):(\d+):(\d+): (E\d+): \033\[[\d;]+m([^\033]+).*$",
+ "file": 1,
+ "line": 2,
+ "column": 3,
+ "code": 4,
+ "message": 5,
+ },
+ ],
+ },
+ {
+ # filename.py:78:14: W0613: Unused argument 'unused' (unused-argument)
+ "severity": "warning",
+ "pattern": [
+ {
+ "regexp": r"^([^:]+):(\d+):(\d+): ([A-DF-Z]\d+): \033\[[\d;]+m([^\033]+).*$",
+ "file": 1,
+ "line": 2,
+ "column": 3,
+ "code": 4,
+ "message": 5,
+ },
+ ],
+ },
+ ],
}
-def add_matcher(output_dir, testenv, pattern, severity=None):
- owner = (testenv if severity is None
- else '{}-{}'.format(testenv, severity))
+def add_matcher(output_dir, testenv, data):
- output = {
- 'owner': owner,
- 'pattern': pattern,
- }
- if severity is not None:
- output['severity'] = severity
+ for idx, sub_data in enumerate(data):
+ sub_data['owner'] = '{}-{}'.format(testenv, idx)
+ out_data = {'problemMatcher': data}
- data = {'problemMatcher': [output]}
-
- output_file = output_dir / '{}.json'.format(owner)
+ output_file = output_dir / '{}.json'.format(testenv)
with output_file.open('w', encoding='utf-8') as f:
- json.dump(data, f)
+ json.dump(out_data, f)
print("::add-matcher::{}".format(output_file))
@@ -146,23 +153,16 @@ def add_matcher(output_dir, testenv, pattern, severity=None):
def main():
testenv = sys.argv[1]
if testenv not in MATCHERS:
- return 0
+ return
# We're not deleting the temporary file because this is only running on CI
# anyways, and we're not sure if GitHub has already read the file contents
# at the point this script exits.
output_dir = pathlib.Path(tempfile.mkdtemp(suffix='-ghmatchers'))
- matcher_data = MATCHERS[testenv]
-
- for key, severity in [('pattern', None),
- ('pattern-warning', 'warning'),
- ('pattern-error', 'error')]:
- if key in matcher_data:
- add_matcher(output_dir=output_dir,
- testenv=testenv,
- pattern=matcher_data[key],
- severity=severity)
+ add_matcher(output_dir=output_dir,
+ testenv=testenv,
+ data=MATCHERS[testenv])
if __name__ == '__main__':