]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Add pylint check for re.compile() alias
authorNicki Křížek <nicki@isc.org>
Tue, 21 Oct 2025 16:58:26 +0000 (18:58 +0200)
committerNicki Křížek <nicki@isc.org>
Mon, 8 Dec 2025 13:57:47 +0000 (14:57 +0100)
Ensure that Re() is used consistently across our code base.

.gitlab-ci.yml
bin/tests/system/re_compile_checker.py [new file with mode: 0644]

index 9a0c47b7b1e460bbaf4fde0b6c2f3be638f9426f..89463e5f6f2a2dc36b878c1dced23e51d0902b65 100644 (file)
@@ -671,7 +671,7 @@ vulture:
   <<: *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
@@ -780,7 +780,7 @@ pylint:
   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
diff --git a/bin/tests/system/re_compile_checker.py b/bin/tests/system/re_compile_checker.py
new file mode 100644 (file)
index 0000000..efa0e9a
--- /dev/null
@@ -0,0 +1,46 @@
+# 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))