From 34d3ad71c9cf9d29cc2ee91531b0b9b101a999d7 Mon Sep 17 00:00:00 2001 From: Jacob Walls Date: Sun, 23 Apr 2023 14:15:34 -0400 Subject: Optimize `is_trailing_comma()` (#8606) Skip is_trailing_comma() call unless `trailing-comma-tuple` enabled --- doc/whatsnew/fragments/1954.performance | 3 ++- pylint/checkers/refactoring/refactoring_checker.py | 9 +++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/doc/whatsnew/fragments/1954.performance b/doc/whatsnew/fragments/1954.performance index 846b38e2c..aa065f0d1 100644 --- a/doc/whatsnew/fragments/1954.performance +++ b/doc/whatsnew/fragments/1954.performance @@ -1,3 +1,4 @@ -Cache `class_is_abstract()`. +- Optimize `is_trailing_comma()`. +- Cache `class_is_abstract()`. Refs #1954 diff --git a/pylint/checkers/refactoring/refactoring_checker.py b/pylint/checkers/refactoring/refactoring_checker.py index f8d0bc7bc..890b0e64d 100644 --- a/pylint/checkers/refactoring/refactoring_checker.py +++ b/pylint/checkers/refactoring/refactoring_checker.py @@ -98,7 +98,7 @@ def _is_trailing_comma(tokens: list[tokenize.TokenInfo], index: int) -> bool: if token.exact_type != tokenize.COMMA: return False # Must have remaining tokens on the same line such as NEWLINE - left_tokens = list(itertools.islice(tokens, index + 1, None)) + left_tokens = itertools.islice(tokens, index + 1, None) more_tokens_on_line = False for remaining_token in left_tokens: @@ -644,9 +644,10 @@ class RefactoringChecker(checkers.BaseTokenChecker): # token[2] is the actual position and also is # reported by IronPython. self._elifs.extend([token[2], tokens[index + 1][2]]) - elif _is_trailing_comma(tokens, index): - if self.linter.is_message_enabled("trailing-comma-tuple"): - self.add_message("trailing-comma-tuple", line=token.start[0]) + elif self.linter.is_message_enabled( + "trailing-comma-tuple" + ) and _is_trailing_comma(tokens, index): + self.add_message("trailing-comma-tuple", line=token.start[0]) @utils.only_required_for_messages("consider-using-with") def leave_module(self, _: nodes.Module) -> None: -- cgit v1.2.1