summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Gamari <ben@smart-cactus.org>2019-06-12 10:54:48 -0400
committerMarge Bot <ben+marge-bot@smart-cactus.org>2019-06-14 23:10:08 -0400
commitb5ea9323a3a39a005a41580228a4722131d417b2 (patch)
tree38161b0c2c13acaaae036d080cea779787f53407
parent503e830c3d01edc9db4e49e73841e45a20675a1e (diff)
downloadhaskell-b5ea9323a3a39a005a41580228a4722131d417b2.tar.gz
lint: Only apply --interactive lint to testsuite .T files
-rwxr-xr-x.gitlab/linters/check-makefiles.py7
-rw-r--r--.gitlab/linters/linter.py18
2 files changed, 18 insertions, 7 deletions
diff --git a/.gitlab/linters/check-makefiles.py b/.gitlab/linters/check-makefiles.py
index 0a82a99d41..b647f6c1c5 100755
--- a/.gitlab/linters/check-makefiles.py
+++ b/.gitlab/linters/check-makefiles.py
@@ -12,9 +12,10 @@ from linter import run_linters, RegexpLinter
linters = [
RegexpLinter(r'--interactive',
- message = "Warning: Use `$(TEST_HC_OPTS_INTERACTIVE)` instead of `--interactive -ignore-dot-ghci -v0`.",
- path_filter = lambda path: path == 'Makefile')
+ message = "Warning: Use `$(TEST_HC_OPTS_INTERACTIVE)` instead of `--interactive -ignore-dot-ghci -v0`."
+ ).add_path_filter(lambda path: path.suffix == '.T')
]
if __name__ == '__main__':
- run_linters(linters, subdir='testsuite')
+ run_linters(linters,
+ subdir='testsuite')
diff --git a/.gitlab/linters/linter.py b/.gitlab/linters/linter.py
index a5cdd179b7..c176ca20a4 100644
--- a/.gitlab/linters/linter.py
+++ b/.gitlab/linters/linter.py
@@ -7,7 +7,8 @@ import sys
import re
import textwrap
import subprocess
-from typing import List, Optional
+from pathlib import Path
+from typing import List, Optional, Callable
from collections import namedtuple
def lint_failure(file, line_no, line_content, message):
@@ -46,12 +47,21 @@ class Linter(object):
"""
def __init__(self):
self.warnings = [] # type: List[Warning]
+ self.path_filters = [] # type: List[Callable[[Path], bool]]
def add_warning(self, w: Warning):
self.warnings.append(w)
+ def add_path_filter(self, f: Callable[[Path], bool]) -> "Linter":
+ self.path_filters.append(f)
+ return self
+
+ def do_lint(self, path):
+ if all(f(path) for f in self.path_filters):
+ self.lint(path)
+
def lint(self, path):
- pass
+ raise NotImplementedError
class LineLinter(Linter):
"""
@@ -66,7 +76,7 @@ class LineLinter(Linter):
self.lint_line(path, line_no+1, line)
def lint_line(self, path, line_no, line):
- pass
+ raise NotImplementedError
class RegexpLinter(LineLinter):
"""
@@ -97,7 +107,7 @@ def run_linters(linters: List[Linter],
if path.startswith('.gitlab/linters'):
continue
for linter in linters:
- linter.lint(path)
+ linter.do_lint(path)
warnings = [warning
for linter in linters