[Git][ghc/ghc][wip/lint-testsuite] 2 commits: lint: Only apply --interactive lint to testsuite .T files
Ben Gamari
gitlab at gitlab.haskell.org
Wed Jun 12 15:14:17 UTC 2019
Ben Gamari pushed to branch wip/lint-testsuite at Glasgow Haskell Compiler / GHC
Commits:
dab60c71 by Ben Gamari at 2019-06-12T15:14:12Z
lint: Only apply --interactive lint to testsuite .T files
- - - - -
0d20b215 by Ben Gamari at 2019-06-12T15:14:12Z
gitlab-ci: Lint the linters
- - - - -
3 changed files:
- .gitlab-ci.yml
- .gitlab/linters/check-makefiles.py
- .gitlab/linters/linter.py
Changes:
=====================================
.gitlab-ci.yml
=====================================
@@ -70,6 +70,15 @@ ghc-linters:
refs:
- merge_requests
+lint-linters:
+ stage: lint
+ image: "nixos/nix"
+ script:
+ - nix run nixpkgs.python3Packages.mypy -c mypy .gitlab/linters/*.py
+ dependencies: []
+ tags:
+ - lint
+
lint-testsuite:
stage: lint
image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb9:$DOCKER_REV"
=====================================
.gitlab/linters/check-makefiles.py
=====================================
@@ -12,8 +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`.")
+ 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')
=====================================
.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, Sequence
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):
"""
@@ -84,7 +94,7 @@ class RegexpLinter(LineLinter):
message=self.message)
self.add_warning(w)
-def run_linters(linters: List[Linter],
+def run_linters(linters: Sequence[Linter],
subdir: str = '.') -> None:
import argparse
parser = argparse.ArgumentParser()
@@ -96,7 +106,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
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/compare/e6f8160a268563622cf8aafaf8f27abcbb657bc6...0d20b215e72cd0f4cae0709564af027846d4f8bf
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/compare/e6f8160a268563622cf8aafaf8f27abcbb657bc6...0d20b215e72cd0f4cae0709564af027846d4f8bf
You're receiving this email because of your account on gitlab.haskell.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-commits/attachments/20190612/9166b70f/attachment-0001.html>
More information about the ghc-commits
mailing list