<<: *python_triggering_rules
needs: []
script:
- - vulture --exclude "*ans.py,conftest.py,isctest" --ignore-names "after_servers_start,bootstrap,pytestmark" bin/tests/system/
+ - vulture --exclude "*ans.py,conftest.py,re_compile_checker.py,isctest" --ignore-names "after_servers_start,bootstrap,pytestmark" bin/tests/system/
ci-variables:
<<: *precheck_job
script:
- pylint --rcfile $CI_PROJECT_DIR/.pylintrc $(git ls-files '*.py' | grep -vE '(ans\.py|dangerfile\.py|^bin/tests/system/|^contrib/)')
# Ignore Pylint wrong-import-position error in system test to enable use of pytest.importorskip
- - pylint --rcfile $CI_PROJECT_DIR/.pylintrc --disable=wrong-import-position $(git ls-files 'bin/tests/system/*.py' | grep -vE '(ans\.py|vulture_ignore_list\.py)')
+ - pylint --rcfile $CI_PROJECT_DIR/.pylintrc --load-plugins re_compile_checker --disable=wrong-import-position $(git ls-files 'bin/tests/system/*.py' | grep -vE '(ans\.py|vulture_ignore_list\.py)')
reuse:
<<: *precheck_job
--- /dev/null
+# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
+#
+# SPDX-License-Identifier: MPL-2.0
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, you can obtain one at https://mozilla.org/MPL/2.0/.
+#
+# See the COPYRIGHT file distributed with this work for additional
+# information regarding copyright ownership.
+
+# pylint: disable=unknown-option-value,re-compile-alias
+
+import re
+
+from astroid import nodes
+
+from pylint.checkers import BaseRawFileChecker
+from pylint.lint import PyLinter
+
+
+class ReCompileChecker(BaseRawFileChecker):
+
+ name = "custom_raw"
+ msgs = {
+ "R9901": (
+ "Replace re.compile() with Re() using `from re import compile as Re`",
+ "re-compile-alias",
+ (
+ "Use a Re() alias instead of re.compile() by importing the "
+ "re.compile() function as Re()"
+ ),
+ ),
+ }
+ options = ()
+
+ def process_module(self, node: nodes.Module) -> None:
+ pattern = re.compile(r"re\.compile\(")
+ with node.stream() as stream:
+ for lineno, line in enumerate(stream):
+ if pattern.search(line.decode("utf-8")):
+ self.add_message("re-compile-alias", line=lineno)
+
+
+def register(linter: PyLinter) -> None:
+ linter.register_checker(ReCompileChecker(linter))