From fd03096bd3f704fe8b6b5d9a440ed2d9cd2856e9 Mon Sep 17 00:00:00 2001 From: Jens Troeger Date: Wed, 3 Jan 2024 08:45:57 +1000 Subject: [PATCH 1/2] Migrate to pylint v3 --- perflint/comprehension_checker.py | 5 +---- perflint/for_loop_checker.py | 25 ++++++++++--------------- perflint/list_checker.py | 7 ++----- pyproject.toml | 2 +- 4 files changed, 14 insertions(+), 25 deletions(-) diff --git a/perflint/comprehension_checker.py b/perflint/comprehension_checker.py index 9ae4b84..f7ebd8c 100644 --- a/perflint/comprehension_checker.py +++ b/perflint/comprehension_checker.py @@ -1,7 +1,6 @@ from astroid import nodes from pylint.checkers import BaseChecker from pylint.checkers import utils as checker_utils -from pylint.interfaces import IAstroidChecker from astroid.helpers import safe_infer @@ -10,8 +9,6 @@ class ComprehensionChecker(BaseChecker): Check for comprehension usage """ - __implements__ = IAstroidChecker - name = "comprehension-checker" priority = -1 msgs = { @@ -35,7 +32,7 @@ class ComprehensionChecker(BaseChecker): def visit_for(self, node: nodes.For): pass - @checker_utils.check_messages( + @checker_utils.only_required_for_messages( "use-list-comprehension", "use-dict-comprehension", "use-list-copy" ) def leave_for(self, node: nodes.For): diff --git a/perflint/for_loop_checker.py b/perflint/for_loop_checker.py index c17d4a8..f1f97f8 100644 --- a/perflint/for_loop_checker.py +++ b/perflint/for_loop_checker.py @@ -3,7 +3,6 @@ from astroid.helpers import safe_infer from pylint.checkers import BaseChecker from pylint.checkers import utils as checker_utils -from pylint.interfaces import IAstroidChecker iterable_types = ( nodes.Tuple, @@ -52,8 +51,6 @@ class ForLoopChecker(BaseChecker): Check for poor for-loop usage. """ - __implements__ = IAstroidChecker - name = "for-loop-checker" priority = -1 msgs = { @@ -69,7 +66,7 @@ class ForLoopChecker(BaseChecker): ), } - @checker_utils.check_messages( + @checker_utils.only_required_for_messages( "unnecessary-list-cast", "incorrect-dictionary-iterator" ) def visit_for(self, node: nodes.For) -> None: @@ -130,8 +127,6 @@ class LoopInvariantChecker(BaseChecker): Check for poor for-loop usage. """ - __implements__ = IAstroidChecker - name = "loop-invariant-checker" priority = -1 msgs = { @@ -170,7 +165,7 @@ def __init__(self, linter=None): self._loop_consts: List[List[nodes.Const]] = [] self._ignore: List[nodes.NodeNG] = [] - @checker_utils.check_messages("loop-invariant-statement") + @checker_utils.only_required_for_messages("loop-invariant-statement") def visit_for(self, node: nodes.For) -> None: """Visit for loop bodies.""" self._loop_level += 1 @@ -184,7 +179,7 @@ def visit_for(self, node: nodes.For) -> None: self._loop_consts.append([]) self._ignore.append(node.iter) - @checker_utils.check_messages("loop-invariant-statement") + @checker_utils.only_required_for_messages("loop-invariant-statement") def visit_while(self, node: nodes.While) -> None: """Visit while loop bodies.""" self._loop_level += 1 @@ -214,11 +209,11 @@ def visit_dict(self, node: nodes.Dict) -> None: ): self._ignore.append(node) - @checker_utils.check_messages("loop-invariant-statement") + @checker_utils.only_required_for_messages("loop-invariant-statement") def leave_for(self, node: nodes.For) -> None: self._leave_loop(node) - @checker_utils.check_messages("loop-invariant-statement") + @checker_utils.only_required_for_messages("loop-invariant-statement") def leave_while(self, node: nodes.While) -> None: self._leave_loop(node) @@ -303,7 +298,7 @@ def visit_augassign(self, node: nodes.AugAssign) -> None: if isinstance(node.target, nodes.AssignName): self._loop_assignments[-1].add(node.target.name) - @checker_utils.check_messages("loop-global-usage") + @checker_utils.only_required_for_messages("loop-global-usage") def visit_name(self, node: nodes.Name) -> None: """Look for global names""" if self._loop_names: @@ -338,12 +333,12 @@ def visit_call(self, node: nodes.Call) -> None: if isinstance(node.func.expr, nodes.Name): self._loop_assignments[-1].add(node.func.expr.name) - @checker_utils.check_messages("loop-try-except-usage") - def visit_tryexcept(self, node: nodes.TryExcept) -> None: + @checker_utils.only_required_for_messages("loop-try-except-usage") + def visit_tryexcept(self, node: nodes.Try) -> None: if self._loop_level > 0: self.add_message("loop-try-except-usage", node=node) - @checker_utils.check_messages("memoryview-over-bytes") + @checker_utils.only_required_for_messages("memoryview-over-bytes") def visit_subscript(self, node: nodes.Subscript) -> None: if self._loop_level == 0: return @@ -360,7 +355,7 @@ def visit_subscript(self, node: nodes.Subscript) -> None: ): self.add_message("memoryview-over-bytes", node=node) - @checker_utils.check_messages("dotted-import-in-loop") + @checker_utils.only_required_for_messages("dotted-import-in-loop") def visit_attribute(self, node: nodes.Attribute) -> None: if self._loop_level == 0: return diff --git a/perflint/list_checker.py b/perflint/list_checker.py index 681ed51..9ded539 100644 --- a/perflint/list_checker.py +++ b/perflint/list_checker.py @@ -2,7 +2,6 @@ from astroid import nodes from pylint.checkers import BaseChecker from pylint.checkers import utils as checker_utils -from pylint.interfaces import IAstroidChecker class ListChecker(BaseChecker): @@ -10,8 +9,6 @@ class ListChecker(BaseChecker): Check for inefficient list usage """ - __implements__ = IAstroidChecker - name = 'list-checker' priority = -1 msgs = { @@ -42,14 +39,14 @@ def _raise_for_scope(self): for _assignment in _lists.values(): self.add_message("use-tuple-over-list", node=_assignment.parent.value) - @checker_utils.check_messages("use-tuple-over-list") + @checker_utils.only_required_for_messages("use-tuple-over-list") def leave_module(self, node: nodes.Module): self._raise_for_scope() def visit_functiondef(self, node: nodes.FunctionDef): self._lists_to_watch.append({}) - @checker_utils.check_messages("use-tuple-over-list") + @checker_utils.only_required_for_messages("use-tuple-over-list") def leave_functiondef(self, node: nodes.FunctionDef): self._raise_for_scope() diff --git a/pyproject.toml b/pyproject.toml index a7ca680..386adc1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,7 +8,7 @@ authors = [{name = "Anthony Shaw"}] readme = "README.md" classifiers = ["License :: OSI Approved :: MIT License"] dynamic = ["version", "description"] -dependencies = ["pylint >= 2.12.0, < 3.0"] +dependencies = ["pylint >=3.0.0,<4.0.0"] [project.urls] Home = "https://github.com/tonybaloney/perflint" From 2ee0a12ea8249f9ea385a5d6473e65225f0d588c Mon Sep 17 00:00:00 2001 From: Anthony Shaw Date: Wed, 10 Jan 2024 16:46:51 +1100 Subject: [PATCH 2/2] Drop Python 3.7 support --- .github/workflows/python-app.yml | 2 +- pyproject.toml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/python-app.yml b/.github/workflows/python-app.yml index f61826e..f554362 100644 --- a/.github/workflows/python-app.yml +++ b/.github/workflows/python-app.yml @@ -18,7 +18,7 @@ jobs: fail-fast: false matrix: os: ["macos-11", ubuntu-20.04, "windows-latest"] - python_version: ["3.7", "3.8", "3.9", "3.10", "3.11-dev"] + python_version: ["3.8", "3.9", "3.10", "3.11", "3.12"] steps: - uses: actions/checkout@v2 - name: Setup python diff --git a/pyproject.toml b/pyproject.toml index 386adc1..7402ed6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,6 +9,7 @@ readme = "README.md" classifiers = ["License :: OSI Approved :: MIT License"] dynamic = ["version", "description"] dependencies = ["pylint >=3.0.0,<4.0.0"] +requires-python = ">=3.8" [project.urls] Home = "https://github.com/tonybaloney/perflint"