diff --git a/doc/whatsnew/fragments/10647.false_positive b/doc/whatsnew/fragments/10647.false_positive new file mode 100644 index 0000000000..97fb536a7c --- /dev/null +++ b/doc/whatsnew/fragments/10647.false_positive @@ -0,0 +1,3 @@ +Fix false-positive for ``bare-name-capture-pattern`` if a case guard is used. + +Closes #10647 diff --git a/pylint/checkers/match_statements_checker.py b/pylint/checkers/match_statements_checker.py index 011fb3235a..c7f75708c6 100644 --- a/pylint/checkers/match_statements_checker.py +++ b/pylint/checkers/match_statements_checker.py @@ -105,8 +105,13 @@ def visit_match(self, node: nodes.Match) -> None: reached. """ for idx, case in enumerate(node.cases): - match case.pattern: - case nodes.MatchAs(pattern=None, name=nodes.AssignName(name=name)) if ( + match case: + case nodes.MatchCase( + pattern=nodes.MatchAs( + pattern=None, name=nodes.AssignName(name=name) + ), + guard=None, + ) if ( idx < len(node.cases) - 1 ): self.add_message( diff --git a/tests/functional/b/bare_name_capture_pattern.py b/tests/functional/b/bare_name_capture_pattern.py index 504e1ff5b2..989cbd1eed 100644 --- a/tests/functional/b/bare_name_capture_pattern.py +++ b/tests/functional/b/bare_name_capture_pattern.py @@ -11,6 +11,8 @@ pass case b: # [bare-name-capture-pattern] pass + case c if c == "Hello": + pass case "a" as some_name: pass case s: