Skip to content
GitLab
Explore
Sign in
Register
Commits on Source (2)
lint: Only apply --interactive lint to testsuite .T files
· dab60c71
Ben Gamari
authored
Jun 12, 2019
dab60c71
gitlab-ci: Lint the linters
· 0d20b215
Ben Gamari
authored
Jun 12, 2019
0d20b215
Hide whitespace changes
Inline
Side-by-side
.gitlab-ci.yml
View file @
0d20b215
...
...
@@ -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
View file @
0d20b215
...
...
@@ -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
View file @
0d20b215
...
...
@@ -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
...
...