summaryrefslogtreecommitdiff
path: root/.gitlab
diff options
context:
space:
mode:
Diffstat (limited to '.gitlab')
-rwxr-xr-x.gitlab/linters/check-changelogs.sh16
-rwxr-xr-x.gitlab/linters/check-cpp.py42
-rwxr-xr-x.gitlab/linters/check-makefiles.py45
-rwxr-xr-x.gitlab/linters/check-version-number.sh7
-rw-r--r--.gitlab/linters/linter.py130
5 files changed, 0 insertions, 240 deletions
diff --git a/.gitlab/linters/check-changelogs.sh b/.gitlab/linters/check-changelogs.sh
deleted file mode 100755
index 56ac187a90..0000000000
--- a/.gitlab/linters/check-changelogs.sh
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/usr/bin/env bash
-
-set -e
-
-COLOR_RED="\e[31m"
-COLOR_GREEN="\e[32m"
-COLOR_NONE="\e[0m"
-
-grep TBA libraries/*/changelog.md && (
- echo -e "${COLOR_RED}Error: Found \"TBA\"s in changelogs.${COLOR_NONE}"
- exit 1
-) || (
- echo -e "${COLOR_GREEN}changelogs look okay.${COLOR_NONE}"
- exit 0
-)
-
diff --git a/.gitlab/linters/check-cpp.py b/.gitlab/linters/check-cpp.py
deleted file mode 100755
index ffa430e10d..0000000000
--- a/.gitlab/linters/check-cpp.py
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/usr/bin/env python3
-
-# A linter to warn for ASSERT macros which are separated from their argument
-# list by a space, which Clang's CPP barfs on
-
-from pathlib import Path
-from linter import run_linters, RegexpLinter
-
-linters = [
- RegexpLinter(r'WARN\s+\(',
- message='CPP macros should not have a space between the macro name and their argument list'),
- RegexpLinter(r'ASSERT\s+\(',
- message='CPP macros should not have a space between the macro name and their argument list'),
- RegexpLinter(r'ASSERT2\s+\(',
- message='CPP macros should not have a space between the macro name and their argument list'),
- RegexpLinter(r'#ifdef\s+',
- message='`#if defined(x)` is preferred to `#ifdef x`'),
- RegexpLinter(r'#if\s+defined\s+',
- message='`#if defined(x)` is preferred to `#if defined x`'),
- RegexpLinter(r'#ifndef\s+',
- message='`#if !defined(x)` is preferred to `#ifndef x`'),
-]
-
-for l in linters:
- # Need do document rules!
- l.add_path_filter(lambda path: path != Path('docs', 'coding-style.html'))
- l.add_path_filter(lambda path: path != Path('docs', 'users_guide', 'utils.rst'))
- # Don't lint vendored code
- l.add_path_filter(lambda path: not path.name == 'config.guess')
- # Don't lint files from external xxhash projects
- l.add_path_filter(lambda path: path != Path('rts', 'xxhash.h')),
- # Don't lint font files
- l.add_path_filter(lambda path: not path.parent == Path('docs','users_guide',
- 'rtd-theme', 'static', 'fonts'))
- # Don't lint image files
- l.add_path_filter(lambda path: not path.parent == Path('docs','users_guide',
- 'images'))
- # Don't lint core spec
- l.add_path_filter(lambda path: not path.name == 'core-spec.pdf')
-
-if __name__ == '__main__':
- run_linters(linters)
diff --git a/.gitlab/linters/check-makefiles.py b/.gitlab/linters/check-makefiles.py
deleted file mode 100755
index 5a8286c6a7..0000000000
--- a/.gitlab/linters/check-makefiles.py
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/usr/bin/env python3
-
-"""
-Linters for testsuite makefiles
-"""
-
-from linter import run_linters, RegexpLinter
-
-"""
-Warn for use of `--interactive` inside Makefiles (#11468).
-
-Encourage the use of `$(TEST_HC_OPTS_INTERACTIVE)` instead of
-`$(TEST_HC_OPTS) --interactive -ignore-dot-ghci -v0`. It's too easy to
-forget one of those flags when adding a new test.
-"""
-interactive_linter = \
- RegexpLinter(r'--interactive',
- message = "Warning: Use `$(TEST_HC_OPTS_INTERACTIVE)` instead of `--interactive -ignore-dot-ghci -v0`."
- ).add_path_filter(lambda path: path.name == 'Makefile')
-
-test_hc_quotes_linter = \
- RegexpLinter('\t\\$\\(TEST_HC\\)',
- message = "Warning: $(TEST_HC) should be quoted in Makefiles.",
- ).add_path_filter(lambda path: path.name == 'Makefile')
-
-ghc_pkg_quotes_linter = \
- RegexpLinter('\t\\$\\(GHC_PKG\\)',
- message = "Warning: $(GHC_PKG) should be quoted in Makefiles.",
- ).add_path_filter(lambda path: path.name == 'Makefile')
-
-haddock_quotes_linter = \
- RegexpLinter('\t\\$\\(HADDOCK\\)',
- message = "Warning: $(HADDOCK) should be quoted in Makefiles.",
- ).add_path_filter(lambda path: path.name == 'Makefile')
-
-linters = [
- interactive_linter,
- test_hc_quotes_linter,
- ghc_pkg_quotes_linter,
- haddock_quotes_linter
-]
-
-if __name__ == '__main__':
- run_linters(linters,
- subdir='testsuite')
diff --git a/.gitlab/linters/check-version-number.sh b/.gitlab/linters/check-version-number.sh
deleted file mode 100755
index 4f478e487a..0000000000
--- a/.gitlab/linters/check-version-number.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/usr/bin/env bash
-
-set -e
-
-grep -E -q 'RELEASE=NO' configure.ac ||
- grep -E -q '\[[0-9]+\.[0-9]+\.[0-9]+\]' configure.ac ||
- ( echo "error: configure.ac: GHC version number must have three components when RELEASE=YES."; exit 1 )
diff --git a/.gitlab/linters/linter.py b/.gitlab/linters/linter.py
deleted file mode 100644
index 61fe18de33..0000000000
--- a/.gitlab/linters/linter.py
+++ /dev/null
@@ -1,130 +0,0 @@
-"""
-Utilities for linters
-"""
-
-import os
-import sys
-import re
-import textwrap
-import subprocess
-from pathlib import Path
-from typing import List, Optional, Callable, Sequence
-from collections import namedtuple
-
-def lint_failure(file, line_no: int, line_content: str, message: str):
- """ Print a lint failure message. """
- wrapper = textwrap.TextWrapper(initial_indent=' ',
- subsequent_indent=' ')
- body = wrapper.fill(message)
- msg = '''
- {file}:
-
- |
- {line_no:5d} | {line_content}
- |
-
- {body}
- '''.format(file=file, line_no=line_no,
- line_content=line_content,
- body=body)
-
- print(textwrap.dedent(msg))
-
-def get_changed_files(base_commit: str, head_commit: str,
- subdir: str = '.'):
- """ Get the files changed by the given range of commits. """
- cmd = ['git', 'diff', '--name-only',
- base_commit, head_commit, '--', subdir]
- files = subprocess.check_output(cmd)
- return files.decode('UTF-8').split('\n')
-
-Warning = namedtuple('Warning', 'path,line_no,line_content,message')
-
-class Linter(object):
- """
- A :class:`Linter` must implement :func:`lint`, which looks at the
- given path and calls :func:`add_warning` for any lint issues found.
- """
- 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: Path):
- if all(f(path) for f in self.path_filters):
- self.lint(path)
-
- def lint(self, path: Path):
- raise NotImplementedError
-
-class LineLinter(Linter):
- """
- A :class:`LineLinter` must implement :func:`lint_line`, which looks at
- the given line from a file and calls :func:`add_warning` for any lint
- issues found.
- """
- def lint(self, path: Path):
- if path.is_file():
- with path.open('r') as f:
- for line_no, line in enumerate(f):
- self.lint_line(path, line_no+1, line)
-
- def lint_line(self, path: Path, line_no: int, line: str):
- raise NotImplementedError
-
-class RegexpLinter(LineLinter):
- """
- A :class:`RegexpLinter` produces the given warning message for
- all lines matching the given regular expression.
- """
- def __init__(self, regex: str, message: str):
- LineLinter.__init__(self)
- self.re = re.compile(regex)
- self.message = message
-
- def lint_line(self, path: Path, line_no: int, line: str):
- if self.re.search(line):
- w = Warning(path=path, line_no=line_no, line_content=line[:-1],
- message=self.message)
- self.add_warning(w)
-
-def run_linters(linters: Sequence[Linter],
- subdir: str = '.') -> None:
- import argparse
- parser = argparse.ArgumentParser()
- subparsers = parser.add_subparsers()
-
- subparser = subparsers.add_parser('commits', help='Lint a range of commits')
- subparser.add_argument('base', help='Base commit')
- subparser.add_argument('head', help='Head commit')
- subparser.set_defaults(get_linted_files=lambda args:
- get_changed_files(args.base, args.head, subdir))
-
- subparser = subparsers.add_parser('files', help='Lint a range of commits')
- subparser.add_argument('file', nargs='+', help='File to lint')
- subparser.set_defaults(get_linted_files=lambda args: args.file)
-
- args = parser.parse_args()
-
- linted_files = args.get_linted_files(args)
- for path in linted_files:
- if path.startswith('.gitlab/linters'):
- continue
- for linter in linters:
- linter.do_lint(Path(path))
-
- warnings = [warning
- for linter in linters
- for warning in linter.warnings]
- warnings = sorted(warnings, key=lambda x: (x.path, x.line_no))
- for w in warnings:
- lint_failure(w.path, w.line_no, w.line_content, w.message)
-
- if len(warnings) > 0:
- sys.exit(1)