lint: Only apply --interactive lint to testsuite .T files
authorBen Gamari <ben@smart-cactus.org>
Wed, 12 Jun 2019 14:54:48 +0000 (10:54 -0400)
committerMarge Bot <ben+marge-bot@smart-cactus.org>
Sat, 15 Jun 2019 03:10:08 +0000 (23:10 -0400)
.gitlab/linters/check-makefiles.py
.gitlab/linters/linter.py

index 0a82a99..b647f6c 100755 (executable)
@@ -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')
index a5cdd17..c176ca2 100644 (file)
@@ -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