mirror of
https://github.com/astral-sh/ruff.git
synced 2025-08-04 10:48:32 +00:00
Avoid some false positives in dunder variable assigments (#4508)
This commit is contained in:
parent
d4c0a41b00
commit
2e2ba2cb16
3 changed files with 16 additions and 12 deletions
|
@ -19,7 +19,7 @@ if x > 0:
|
|||
else:
|
||||
import e
|
||||
|
||||
y = x + 1
|
||||
__some__magic = 1
|
||||
|
||||
import f
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ source: crates/ruff/src/rules/pycodestyle/mod.rs
|
|||
---
|
||||
E402.py:24:1: E402 Module level import not at top of file
|
||||
|
|
||||
24 | y = x + 1
|
||||
24 | __some__magic = 1
|
||||
25 |
|
||||
26 | import f
|
||||
| ^^^^^^^^ E402
|
||||
|
|
|
@ -4,8 +4,6 @@ use std::path::Path;
|
|||
use itertools::Itertools;
|
||||
use log::error;
|
||||
use num_traits::Zero;
|
||||
use once_cell::sync::Lazy;
|
||||
use regex::Regex;
|
||||
use ruff_text_size::{TextRange, TextSize};
|
||||
use rustc_hash::{FxHashMap, FxHashSet};
|
||||
use rustpython_parser::ast::{
|
||||
|
@ -542,7 +540,9 @@ where
|
|||
body.iter().any(|stmt| any_over_stmt(stmt, func))
|
||||
}
|
||||
|
||||
static DUNDER_REGEX: Lazy<Regex> = Lazy::new(|| Regex::new(r"__[^\s]+__").unwrap());
|
||||
fn is_dunder(id: &str) -> bool {
|
||||
id.starts_with("__") && id.ends_with("__")
|
||||
}
|
||||
|
||||
/// Return `true` if the [`Stmt`] is an assignment to a dunder (like `__all__`).
|
||||
pub fn is_assignment_to_a_dunder(stmt: &Stmt) -> bool {
|
||||
|
@ -553,15 +553,19 @@ pub fn is_assignment_to_a_dunder(stmt: &Stmt) -> bool {
|
|||
if targets.len() != 1 {
|
||||
return false;
|
||||
}
|
||||
match &targets[0] {
|
||||
Expr::Name(ast::ExprName { id, .. }) => DUNDER_REGEX.is_match(id.as_str()),
|
||||
_ => false,
|
||||
if let Expr::Name(ast::ExprName { id, .. }) = &targets[0] {
|
||||
is_dunder(id)
|
||||
} else {
|
||||
false
|
||||
}
|
||||
}
|
||||
Stmt::AnnAssign(ast::StmtAnnAssign { target, .. }) => {
|
||||
if let Expr::Name(ast::ExprName { id, .. }) = target.as_ref() {
|
||||
is_dunder(id)
|
||||
} else {
|
||||
false
|
||||
}
|
||||
}
|
||||
Stmt::AnnAssign(ast::StmtAnnAssign { target, .. }) => match target.as_ref() {
|
||||
Expr::Name(ast::ExprName { id, .. }) => DUNDER_REGEX.is_match(id.as_str()),
|
||||
_ => false,
|
||||
},
|
||||
_ => false,
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue