mirror of
https://github.com/astral-sh/ruff.git
synced 2025-11-21 04:55:31 +00:00
Fix syntax error false positive on nested alternative patterns (#21104)
## Summary Fixes #21101 by storing the child visitor's names in the parent visitor. This makes sure that `visitor.names` on line 1818 isn't empty after we visit a nested OR pattern. ## Test Plan New inline test cases derived from the issue, [playground](https://play.ruff.rs/7b6439ac-ee8f-4593-9a3e-c2aa34a595d0)
This commit is contained in:
parent
10bda3df00
commit
f0fe6d62fb
3 changed files with 512 additions and 0 deletions
|
|
@ -1841,6 +1841,15 @@ impl<'a, Ctx: SemanticSyntaxContext> MatchPatternVisitor<'a, Ctx> {
|
|||
// case (x, (y | y)): ...
|
||||
// case [a, _] | [a, _]: ...
|
||||
// case [a] | [C(a)]: ...
|
||||
|
||||
// test_ok nested_alternative_patterns
|
||||
// match ruff:
|
||||
// case {"lint": {"select": x} | {"extend-select": x}} | {"select": x}:
|
||||
// ...
|
||||
// match 42:
|
||||
// case [[x] | [x]] | x: ...
|
||||
// match 42:
|
||||
// case [[x | x] | [x]] | x: ...
|
||||
SemanticSyntaxChecker::add_error(
|
||||
self.ctx,
|
||||
SemanticSyntaxErrorKind::DifferentMatchPatternBindings,
|
||||
|
|
@ -1848,6 +1857,7 @@ impl<'a, Ctx: SemanticSyntaxContext> MatchPatternVisitor<'a, Ctx> {
|
|||
);
|
||||
break;
|
||||
}
|
||||
self.names = visitor.names;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue