mirror of https://github.com/astral-sh/ruff
Parse assignment annotations prior to targets
This commit is contained in:
parent
994f12050d
commit
b0ab14aab3
|
|
@ -1,6 +1,7 @@
|
||||||
from __future__ import all_feature_names
|
from __future__ import all_feature_names
|
||||||
import os
|
import os
|
||||||
import functools
|
import functools
|
||||||
|
from datetime import datetime
|
||||||
from collections import (
|
from collections import (
|
||||||
Counter,
|
Counter,
|
||||||
OrderedDict,
|
OrderedDict,
|
||||||
|
|
@ -15,6 +16,8 @@ from blah import ClassA, ClassB, ClassC
|
||||||
|
|
||||||
|
|
||||||
class X:
|
class X:
|
||||||
|
datetime: datetime
|
||||||
|
|
||||||
def a(self) -> "namedtuple":
|
def a(self) -> "namedtuple":
|
||||||
x = os.environ["1"]
|
x = os.environ["1"]
|
||||||
y = Counter()
|
y = Counter()
|
||||||
|
|
|
||||||
|
|
@ -316,12 +316,12 @@ mod tests {
|
||||||
},
|
},
|
||||||
Check {
|
Check {
|
||||||
kind: CheckKind::UnusedImport("collections.OrderedDict".to_string()),
|
kind: CheckKind::UnusedImport("collections.OrderedDict".to_string()),
|
||||||
location: Location::new(4, 1),
|
location: Location::new(5, 1),
|
||||||
fix: None,
|
fix: None,
|
||||||
},
|
},
|
||||||
Check {
|
Check {
|
||||||
kind: CheckKind::UnusedImport("logging.handlers".to_string()),
|
kind: CheckKind::UnusedImport("logging.handlers".to_string()),
|
||||||
location: Location::new(12, 1),
|
location: Location::new(13, 1),
|
||||||
fix: None,
|
fix: None,
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
|
||||||
|
|
@ -72,13 +72,13 @@ pub fn walk_stmt<'a, V: Visitor<'a> + ?Sized>(visitor: &mut V, stmt: &'a Stmt) {
|
||||||
} => {
|
} => {
|
||||||
visitor.visit_arguments(args);
|
visitor.visit_arguments(args);
|
||||||
for expr in decorator_list {
|
for expr in decorator_list {
|
||||||
visitor.visit_expr(expr)
|
visitor.visit_expr(expr);
|
||||||
}
|
}
|
||||||
for expr in returns {
|
for expr in returns {
|
||||||
visitor.visit_annotation(expr);
|
visitor.visit_annotation(expr);
|
||||||
}
|
}
|
||||||
for stmt in body {
|
for stmt in body {
|
||||||
visitor.visit_stmt(stmt)
|
visitor.visit_stmt(stmt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
StmtKind::AsyncFunctionDef {
|
StmtKind::AsyncFunctionDef {
|
||||||
|
|
@ -90,13 +90,13 @@ pub fn walk_stmt<'a, V: Visitor<'a> + ?Sized>(visitor: &mut V, stmt: &'a Stmt) {
|
||||||
} => {
|
} => {
|
||||||
visitor.visit_arguments(args);
|
visitor.visit_arguments(args);
|
||||||
for expr in decorator_list {
|
for expr in decorator_list {
|
||||||
visitor.visit_expr(expr)
|
visitor.visit_expr(expr);
|
||||||
}
|
}
|
||||||
for expr in returns {
|
for expr in returns {
|
||||||
visitor.visit_annotation(expr);
|
visitor.visit_annotation(expr);
|
||||||
}
|
}
|
||||||
for stmt in body {
|
for stmt in body {
|
||||||
visitor.visit_stmt(stmt)
|
visitor.visit_stmt(stmt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
StmtKind::ClassDef {
|
StmtKind::ClassDef {
|
||||||
|
|
@ -107,33 +107,33 @@ pub fn walk_stmt<'a, V: Visitor<'a> + ?Sized>(visitor: &mut V, stmt: &'a Stmt) {
|
||||||
..
|
..
|
||||||
} => {
|
} => {
|
||||||
for expr in bases {
|
for expr in bases {
|
||||||
visitor.visit_expr(expr)
|
visitor.visit_expr(expr);
|
||||||
}
|
}
|
||||||
for keyword in keywords {
|
for keyword in keywords {
|
||||||
visitor.visit_keyword(keyword)
|
visitor.visit_keyword(keyword);
|
||||||
}
|
}
|
||||||
for expr in decorator_list {
|
for expr in decorator_list {
|
||||||
visitor.visit_expr(expr)
|
visitor.visit_expr(expr);
|
||||||
}
|
}
|
||||||
for stmt in body {
|
for stmt in body {
|
||||||
visitor.visit_stmt(stmt)
|
visitor.visit_stmt(stmt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
StmtKind::Return { value } => {
|
StmtKind::Return { value } => {
|
||||||
if let Some(expr) = value {
|
if let Some(expr) = value {
|
||||||
visitor.visit_expr(expr)
|
visitor.visit_expr(expr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
StmtKind::Delete { targets } => {
|
StmtKind::Delete { targets } => {
|
||||||
for expr in targets {
|
for expr in targets {
|
||||||
visitor.visit_expr(expr)
|
visitor.visit_expr(expr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
StmtKind::Assign { targets, value, .. } => {
|
StmtKind::Assign { targets, value, .. } => {
|
||||||
|
visitor.visit_expr(value);
|
||||||
for expr in targets {
|
for expr in targets {
|
||||||
visitor.visit_expr(expr)
|
visitor.visit_expr(expr);
|
||||||
}
|
}
|
||||||
visitor.visit_expr(value)
|
|
||||||
}
|
}
|
||||||
StmtKind::AugAssign { target, op, value } => {
|
StmtKind::AugAssign { target, op, value } => {
|
||||||
visitor.visit_expr(target);
|
visitor.visit_expr(target);
|
||||||
|
|
@ -146,11 +146,11 @@ pub fn walk_stmt<'a, V: Visitor<'a> + ?Sized>(visitor: &mut V, stmt: &'a Stmt) {
|
||||||
value,
|
value,
|
||||||
..
|
..
|
||||||
} => {
|
} => {
|
||||||
visitor.visit_expr(target);
|
|
||||||
visitor.visit_annotation(annotation);
|
visitor.visit_annotation(annotation);
|
||||||
if let Some(expr) = value {
|
if let Some(expr) = value {
|
||||||
visitor.visit_expr(expr)
|
visitor.visit_expr(expr);
|
||||||
}
|
}
|
||||||
|
visitor.visit_expr(target);
|
||||||
}
|
}
|
||||||
StmtKind::For {
|
StmtKind::For {
|
||||||
target,
|
target,
|
||||||
|
|
@ -162,10 +162,10 @@ pub fn walk_stmt<'a, V: Visitor<'a> + ?Sized>(visitor: &mut V, stmt: &'a Stmt) {
|
||||||
visitor.visit_expr(target);
|
visitor.visit_expr(target);
|
||||||
visitor.visit_expr(iter);
|
visitor.visit_expr(iter);
|
||||||
for stmt in body {
|
for stmt in body {
|
||||||
visitor.visit_stmt(stmt)
|
visitor.visit_stmt(stmt);
|
||||||
}
|
}
|
||||||
for stmt in orelse {
|
for stmt in orelse {
|
||||||
visitor.visit_stmt(stmt)
|
visitor.visit_stmt(stmt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
StmtKind::AsyncFor {
|
StmtKind::AsyncFor {
|
||||||
|
|
@ -178,28 +178,28 @@ pub fn walk_stmt<'a, V: Visitor<'a> + ?Sized>(visitor: &mut V, stmt: &'a Stmt) {
|
||||||
visitor.visit_expr(target);
|
visitor.visit_expr(target);
|
||||||
visitor.visit_expr(iter);
|
visitor.visit_expr(iter);
|
||||||
for stmt in body {
|
for stmt in body {
|
||||||
visitor.visit_stmt(stmt)
|
visitor.visit_stmt(stmt);
|
||||||
}
|
}
|
||||||
for stmt in orelse {
|
for stmt in orelse {
|
||||||
visitor.visit_stmt(stmt)
|
visitor.visit_stmt(stmt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
StmtKind::While { test, body, orelse } => {
|
StmtKind::While { test, body, orelse } => {
|
||||||
visitor.visit_expr(test);
|
visitor.visit_expr(test);
|
||||||
for stmt in body {
|
for stmt in body {
|
||||||
visitor.visit_stmt(stmt)
|
visitor.visit_stmt(stmt);
|
||||||
}
|
}
|
||||||
for stmt in orelse {
|
for stmt in orelse {
|
||||||
visitor.visit_stmt(stmt)
|
visitor.visit_stmt(stmt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
StmtKind::If { test, body, orelse } => {
|
StmtKind::If { test, body, orelse } => {
|
||||||
visitor.visit_expr(test);
|
visitor.visit_expr(test);
|
||||||
for stmt in body {
|
for stmt in body {
|
||||||
visitor.visit_stmt(stmt)
|
visitor.visit_stmt(stmt);
|
||||||
}
|
}
|
||||||
for stmt in orelse {
|
for stmt in orelse {
|
||||||
visitor.visit_stmt(stmt)
|
visitor.visit_stmt(stmt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
StmtKind::With { items, body, .. } => {
|
StmtKind::With { items, body, .. } => {
|
||||||
|
|
@ -207,7 +207,7 @@ pub fn walk_stmt<'a, V: Visitor<'a> + ?Sized>(visitor: &mut V, stmt: &'a Stmt) {
|
||||||
visitor.visit_withitem(withitem);
|
visitor.visit_withitem(withitem);
|
||||||
}
|
}
|
||||||
for stmt in body {
|
for stmt in body {
|
||||||
visitor.visit_stmt(stmt)
|
visitor.visit_stmt(stmt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
StmtKind::AsyncWith { items, body, .. } => {
|
StmtKind::AsyncWith { items, body, .. } => {
|
||||||
|
|
@ -215,7 +215,7 @@ pub fn walk_stmt<'a, V: Visitor<'a> + ?Sized>(visitor: &mut V, stmt: &'a Stmt) {
|
||||||
visitor.visit_withitem(withitem);
|
visitor.visit_withitem(withitem);
|
||||||
}
|
}
|
||||||
for stmt in body {
|
for stmt in body {
|
||||||
visitor.visit_stmt(stmt)
|
visitor.visit_stmt(stmt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
StmtKind::Match { subject, cases } => {
|
StmtKind::Match { subject, cases } => {
|
||||||
|
|
@ -227,10 +227,10 @@ pub fn walk_stmt<'a, V: Visitor<'a> + ?Sized>(visitor: &mut V, stmt: &'a Stmt) {
|
||||||
}
|
}
|
||||||
StmtKind::Raise { exc, cause } => {
|
StmtKind::Raise { exc, cause } => {
|
||||||
if let Some(expr) = exc {
|
if let Some(expr) = exc {
|
||||||
visitor.visit_expr(expr)
|
visitor.visit_expr(expr);
|
||||||
};
|
};
|
||||||
if let Some(expr) = cause {
|
if let Some(expr) = cause {
|
||||||
visitor.visit_expr(expr)
|
visitor.visit_expr(expr);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
StmtKind::Try {
|
StmtKind::Try {
|
||||||
|
|
@ -240,22 +240,22 @@ pub fn walk_stmt<'a, V: Visitor<'a> + ?Sized>(visitor: &mut V, stmt: &'a Stmt) {
|
||||||
finalbody,
|
finalbody,
|
||||||
} => {
|
} => {
|
||||||
for stmt in body {
|
for stmt in body {
|
||||||
visitor.visit_stmt(stmt)
|
visitor.visit_stmt(stmt);
|
||||||
}
|
}
|
||||||
for excepthandler in handlers {
|
for excepthandler in handlers {
|
||||||
visitor.visit_excepthandler(excepthandler)
|
visitor.visit_excepthandler(excepthandler)
|
||||||
}
|
}
|
||||||
for stmt in orelse {
|
for stmt in orelse {
|
||||||
visitor.visit_stmt(stmt)
|
visitor.visit_stmt(stmt);
|
||||||
}
|
}
|
||||||
for stmt in finalbody {
|
for stmt in finalbody {
|
||||||
visitor.visit_stmt(stmt)
|
visitor.visit_stmt(stmt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
StmtKind::Assert { test, msg } => {
|
StmtKind::Assert { test, msg } => {
|
||||||
visitor.visit_expr(test);
|
visitor.visit_expr(test);
|
||||||
if let Some(expr) = msg {
|
if let Some(expr) = msg {
|
||||||
visitor.visit_expr(expr)
|
visitor.visit_expr(expr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
StmtKind::Import { names } => {
|
StmtKind::Import { names } => {
|
||||||
|
|
@ -282,7 +282,7 @@ pub fn walk_expr<'a, V: Visitor<'a> + ?Sized>(visitor: &mut V, expr: &'a Expr) {
|
||||||
ExprKind::BoolOp { op, values } => {
|
ExprKind::BoolOp { op, values } => {
|
||||||
visitor.visit_boolop(op);
|
visitor.visit_boolop(op);
|
||||||
for expr in values {
|
for expr in values {
|
||||||
visitor.visit_expr(expr)
|
visitor.visit_expr(expr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ExprKind::NamedExpr { target, value } => {
|
ExprKind::NamedExpr { target, value } => {
|
||||||
|
|
@ -309,26 +309,26 @@ pub fn walk_expr<'a, V: Visitor<'a> + ?Sized>(visitor: &mut V, expr: &'a Expr) {
|
||||||
}
|
}
|
||||||
ExprKind::Dict { keys, values } => {
|
ExprKind::Dict { keys, values } => {
|
||||||
for expr in keys {
|
for expr in keys {
|
||||||
visitor.visit_expr(expr)
|
visitor.visit_expr(expr);
|
||||||
}
|
}
|
||||||
for expr in values {
|
for expr in values {
|
||||||
visitor.visit_expr(expr)
|
visitor.visit_expr(expr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ExprKind::Set { elts } => {
|
ExprKind::Set { elts } => {
|
||||||
for expr in elts {
|
for expr in elts {
|
||||||
visitor.visit_expr(expr)
|
visitor.visit_expr(expr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ExprKind::ListComp { elt, generators } => {
|
ExprKind::ListComp { elt, generators } => {
|
||||||
for comprehension in generators {
|
for comprehension in generators {
|
||||||
visitor.visit_comprehension(comprehension)
|
visitor.visit_comprehension(comprehension);
|
||||||
}
|
}
|
||||||
visitor.visit_expr(elt);
|
visitor.visit_expr(elt);
|
||||||
}
|
}
|
||||||
ExprKind::SetComp { elt, generators } => {
|
ExprKind::SetComp { elt, generators } => {
|
||||||
for comprehension in generators {
|
for comprehension in generators {
|
||||||
visitor.visit_comprehension(comprehension)
|
visitor.visit_comprehension(comprehension);
|
||||||
}
|
}
|
||||||
visitor.visit_expr(elt);
|
visitor.visit_expr(elt);
|
||||||
}
|
}
|
||||||
|
|
@ -338,21 +338,21 @@ pub fn walk_expr<'a, V: Visitor<'a> + ?Sized>(visitor: &mut V, expr: &'a Expr) {
|
||||||
generators,
|
generators,
|
||||||
} => {
|
} => {
|
||||||
for comprehension in generators {
|
for comprehension in generators {
|
||||||
visitor.visit_comprehension(comprehension)
|
visitor.visit_comprehension(comprehension);
|
||||||
}
|
}
|
||||||
visitor.visit_expr(key);
|
visitor.visit_expr(key);
|
||||||
visitor.visit_expr(value);
|
visitor.visit_expr(value);
|
||||||
}
|
}
|
||||||
ExprKind::GeneratorExp { elt, generators } => {
|
ExprKind::GeneratorExp { elt, generators } => {
|
||||||
for comprehension in generators {
|
for comprehension in generators {
|
||||||
visitor.visit_comprehension(comprehension)
|
visitor.visit_comprehension(comprehension);
|
||||||
}
|
}
|
||||||
visitor.visit_expr(elt);
|
visitor.visit_expr(elt);
|
||||||
}
|
}
|
||||||
ExprKind::Await { value } => visitor.visit_expr(value),
|
ExprKind::Await { value } => visitor.visit_expr(value),
|
||||||
ExprKind::Yield { value } => {
|
ExprKind::Yield { value } => {
|
||||||
if let Some(expr) = value {
|
if let Some(expr) = value {
|
||||||
visitor.visit_expr(expr)
|
visitor.visit_expr(expr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ExprKind::YieldFrom { value } => visitor.visit_expr(value),
|
ExprKind::YieldFrom { value } => visitor.visit_expr(value),
|
||||||
|
|
@ -366,7 +366,7 @@ pub fn walk_expr<'a, V: Visitor<'a> + ?Sized>(visitor: &mut V, expr: &'a Expr) {
|
||||||
visitor.visit_cmpop(cmpop);
|
visitor.visit_cmpop(cmpop);
|
||||||
}
|
}
|
||||||
for expr in comparators {
|
for expr in comparators {
|
||||||
visitor.visit_expr(expr)
|
visitor.visit_expr(expr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ExprKind::Call {
|
ExprKind::Call {
|
||||||
|
|
@ -387,12 +387,12 @@ pub fn walk_expr<'a, V: Visitor<'a> + ?Sized>(visitor: &mut V, expr: &'a Expr) {
|
||||||
} => {
|
} => {
|
||||||
visitor.visit_expr(value);
|
visitor.visit_expr(value);
|
||||||
if let Some(expr) = format_spec {
|
if let Some(expr) = format_spec {
|
||||||
visitor.visit_expr(expr)
|
visitor.visit_expr(expr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ExprKind::JoinedStr { values } => {
|
ExprKind::JoinedStr { values } => {
|
||||||
for expr in values {
|
for expr in values {
|
||||||
visitor.visit_expr(expr)
|
visitor.visit_expr(expr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ExprKind::Constant { value, .. } => visitor.visit_constant(value),
|
ExprKind::Constant { value, .. } => visitor.visit_constant(value),
|
||||||
|
|
@ -481,25 +481,25 @@ pub fn walk_arguments<'a, V: Visitor<'a> + ?Sized>(visitor: &mut V, arguments: &
|
||||||
visitor.visit_arg(arg);
|
visitor.visit_arg(arg);
|
||||||
}
|
}
|
||||||
if let Some(arg) = &arguments.vararg {
|
if let Some(arg) = &arguments.vararg {
|
||||||
visitor.visit_arg(arg)
|
visitor.visit_arg(arg);
|
||||||
}
|
}
|
||||||
for arg in &arguments.kwonlyargs {
|
for arg in &arguments.kwonlyargs {
|
||||||
visitor.visit_arg(arg);
|
visitor.visit_arg(arg);
|
||||||
}
|
}
|
||||||
for expr in &arguments.kw_defaults {
|
for expr in &arguments.kw_defaults {
|
||||||
visitor.visit_expr(expr)
|
visitor.visit_expr(expr);
|
||||||
}
|
}
|
||||||
if let Some(arg) = &arguments.kwarg {
|
if let Some(arg) = &arguments.kwarg {
|
||||||
visitor.visit_arg(arg)
|
visitor.visit_arg(arg);
|
||||||
}
|
}
|
||||||
for expr in &arguments.defaults {
|
for expr in &arguments.defaults {
|
||||||
visitor.visit_expr(expr)
|
visitor.visit_expr(expr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn walk_arg<'a, V: Visitor<'a> + ?Sized>(visitor: &mut V, arg: &'a Arg) {
|
pub fn walk_arg<'a, V: Visitor<'a> + ?Sized>(visitor: &mut V, arg: &'a Arg) {
|
||||||
if let Some(expr) = &arg.node.annotation {
|
if let Some(expr) = &arg.node.annotation {
|
||||||
visitor.visit_annotation(expr)
|
visitor.visit_annotation(expr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -530,7 +530,7 @@ pub fn walk_pattern<'a, V: Visitor<'a> + ?Sized>(visitor: &mut V, pattern: &'a P
|
||||||
PatternKind::MatchSingleton { value } => visitor.visit_constant(value),
|
PatternKind::MatchSingleton { value } => visitor.visit_constant(value),
|
||||||
PatternKind::MatchSequence { patterns } => {
|
PatternKind::MatchSequence { patterns } => {
|
||||||
for pattern in patterns {
|
for pattern in patterns {
|
||||||
visitor.visit_pattern(pattern)
|
visitor.visit_pattern(pattern);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
PatternKind::MatchMapping { keys, patterns, .. } => {
|
PatternKind::MatchMapping { keys, patterns, .. } => {
|
||||||
|
|
@ -559,7 +559,7 @@ pub fn walk_pattern<'a, V: Visitor<'a> + ?Sized>(visitor: &mut V, pattern: &'a P
|
||||||
PatternKind::MatchStar { .. } => {}
|
PatternKind::MatchStar { .. } => {}
|
||||||
PatternKind::MatchAs { pattern, .. } => {
|
PatternKind::MatchAs { pattern, .. } => {
|
||||||
if let Some(pattern) = pattern {
|
if let Some(pattern) = pattern {
|
||||||
visitor.visit_pattern(pattern)
|
visitor.visit_pattern(pattern);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
PatternKind::MatchOr { patterns } => {
|
PatternKind::MatchOr { patterns } => {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue