Compare commits
2 Commits
v0.0.250
...
charlie/sc
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
005d3b9525 | ||
|
|
d93c5811ea |
39
crates/ruff/resources/test/fixtures/pyflakes/F821_9.py
vendored
Normal file
39
crates/ruff/resources/test/fixtures/pyflakes/F821_9.py
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
"""Test: match statements."""
|
||||
from dataclasses import dataclass
|
||||
|
||||
|
||||
@dataclass
|
||||
class Car:
|
||||
make: str
|
||||
model: str
|
||||
|
||||
|
||||
def f():
|
||||
match Car("Toyota", "Corolla"):
|
||||
case Car("Toyota", model):
|
||||
print(model)
|
||||
case Car(make, "Corolla"):
|
||||
print(make)
|
||||
case Car(_, _):
|
||||
print(make, model)
|
||||
case _:
|
||||
print("No match")
|
||||
|
||||
|
||||
def f(provided: int) -> int:
|
||||
match provided:
|
||||
case True:
|
||||
return captured # F821
|
||||
case [*_] as captured:
|
||||
return captured
|
||||
case [captured, *_]:
|
||||
return captured
|
||||
case captured:
|
||||
return captured
|
||||
|
||||
|
||||
match 1:
|
||||
case 1:
|
||||
x = 1
|
||||
|
||||
print(x)
|
||||
@@ -119,3 +119,7 @@ def f(x: int):
|
||||
print("A")
|
||||
case [Bar.A, *_]:
|
||||
print("A")
|
||||
case [*_] as y:
|
||||
z = 1
|
||||
case y:
|
||||
pass
|
||||
|
||||
@@ -78,6 +78,7 @@ pub enum ScopeKind<'a> {
|
||||
Generator,
|
||||
Module,
|
||||
Lambda(Lambda<'a>),
|
||||
Case,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
|
||||
@@ -10,7 +10,8 @@ use rustc_hash::{FxHashMap, FxHashSet};
|
||||
use rustpython_common::cformat::{CFormatError, CFormatErrorType};
|
||||
use rustpython_parser::ast::{
|
||||
Arg, Arguments, Comprehension, Constant, Excepthandler, ExcepthandlerKind, Expr, ExprContext,
|
||||
ExprKind, KeywordData, Located, Location, Operator, Stmt, StmtKind, Suite,
|
||||
ExprKind, KeywordData, Located, Location, MatchCase, Operator, Pattern, PatternKind, Stmt,
|
||||
StmtKind, Suite,
|
||||
};
|
||||
use rustpython_parser::parser;
|
||||
use smallvec::smallvec;
|
||||
@@ -28,7 +29,7 @@ use crate::ast::types::{
|
||||
RefEquality, Scope, ScopeKind,
|
||||
};
|
||||
use crate::ast::typing::{match_annotated_subscript, Callable, SubscriptKind};
|
||||
use crate::ast::visitor::{walk_excepthandler, Visitor};
|
||||
use crate::ast::visitor::{walk_excepthandler, walk_match_case, walk_pattern, Visitor};
|
||||
use crate::ast::{branch_detection, cast, helpers, operations, typing, visitor};
|
||||
use crate::docstrings::definition::{Definition, DefinitionKind, Docstring, Documentable};
|
||||
use crate::registry::{Diagnostic, Rule};
|
||||
@@ -3840,6 +3841,36 @@ where
|
||||
}
|
||||
}
|
||||
|
||||
fn visit_match_case(&mut self, match_case: &'b MatchCase) {
|
||||
self.push_scope(Scope::new(ScopeKind::Case));
|
||||
walk_match_case(self, match_case);
|
||||
self.deferred_assignments
|
||||
.push((self.scope_stack.clone(), self.parents.clone()));
|
||||
self.pop_scope();
|
||||
}
|
||||
|
||||
fn visit_pattern(&mut self, pattern: &'b Pattern) {
|
||||
if let PatternKind::MatchAs {
|
||||
name: Some(name), ..
|
||||
} = &pattern.node
|
||||
{
|
||||
self.add_binding(
|
||||
name,
|
||||
Binding {
|
||||
kind: BindingKind::Assignment,
|
||||
runtime_usage: None,
|
||||
synthetic_usage: None,
|
||||
typing_usage: None,
|
||||
range: Range::from_located(pattern),
|
||||
source: Some(self.current_stmt().clone()),
|
||||
context: self.execution_context(),
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
walk_pattern(self, pattern);
|
||||
}
|
||||
|
||||
fn visit_format_spec(&mut self, format_spec: &'b Expr) {
|
||||
match &format_spec.node {
|
||||
ExprKind::JoinedStr { values } => {
|
||||
|
||||
@@ -101,6 +101,7 @@ mod tests {
|
||||
#[test_case(Rule::UndefinedName, Path::new("F821_6.py"); "F821_6")]
|
||||
#[test_case(Rule::UndefinedName, Path::new("F821_7.py"); "F821_7")]
|
||||
#[test_case(Rule::UndefinedName, Path::new("F821_8.pyi"); "F821_8")]
|
||||
#[test_case(Rule::UndefinedName, Path::new("F821_9.py"); "F821_9")]
|
||||
#[test_case(Rule::UndefinedExport, Path::new("F822_0.py"); "F822_0")]
|
||||
#[test_case(Rule::UndefinedExport, Path::new("F822_1.py"); "F822_1")]
|
||||
#[test_case(Rule::UndefinedExport, Path::new("F822_2.py"); "F822_2")]
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
---
|
||||
source: crates/ruff/src/rules/pyflakes/mod.rs
|
||||
expression: diagnostics
|
||||
---
|
||||
- kind:
|
||||
UndefinedName:
|
||||
name: make
|
||||
location:
|
||||
row: 18
|
||||
column: 18
|
||||
end_location:
|
||||
row: 18
|
||||
column: 22
|
||||
fix: ~
|
||||
parent: ~
|
||||
- kind:
|
||||
UndefinedName:
|
||||
name: model
|
||||
location:
|
||||
row: 18
|
||||
column: 24
|
||||
end_location:
|
||||
row: 18
|
||||
column: 29
|
||||
fix: ~
|
||||
parent: ~
|
||||
- kind:
|
||||
UndefinedName:
|
||||
name: captured
|
||||
location:
|
||||
row: 26
|
||||
column: 19
|
||||
end_location:
|
||||
row: 26
|
||||
column: 27
|
||||
fix: ~
|
||||
parent: ~
|
||||
|
||||
@@ -186,4 +186,44 @@ expression: diagnostics
|
||||
row: 115
|
||||
column: 10
|
||||
parent: ~
|
||||
- kind:
|
||||
UnusedVariable:
|
||||
name: y
|
||||
location:
|
||||
row: 122
|
||||
column: 13
|
||||
end_location:
|
||||
row: 122
|
||||
column: 22
|
||||
fix: ~
|
||||
parent: ~
|
||||
- kind:
|
||||
UnusedVariable:
|
||||
name: z
|
||||
location:
|
||||
row: 123
|
||||
column: 12
|
||||
end_location:
|
||||
row: 123
|
||||
column: 13
|
||||
fix:
|
||||
content: pass
|
||||
location:
|
||||
row: 123
|
||||
column: 12
|
||||
end_location:
|
||||
row: 123
|
||||
column: 17
|
||||
parent: ~
|
||||
- kind:
|
||||
UnusedVariable:
|
||||
name: y
|
||||
location:
|
||||
row: 124
|
||||
column: 13
|
||||
end_location:
|
||||
row: 124
|
||||
column: 14
|
||||
fix: ~
|
||||
parent: ~
|
||||
|
||||
|
||||
@@ -222,4 +222,26 @@ expression: diagnostics
|
||||
row: 115
|
||||
column: 10
|
||||
parent: ~
|
||||
- kind:
|
||||
UnusedVariable:
|
||||
name: y
|
||||
location:
|
||||
row: 122
|
||||
column: 13
|
||||
end_location:
|
||||
row: 122
|
||||
column: 22
|
||||
fix: ~
|
||||
parent: ~
|
||||
- kind:
|
||||
UnusedVariable:
|
||||
name: y
|
||||
location:
|
||||
row: 124
|
||||
column: 13
|
||||
end_location:
|
||||
row: 124
|
||||
column: 14
|
||||
fix: ~
|
||||
parent: ~
|
||||
|
||||
|
||||
Reference in New Issue
Block a user