# 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))