mirror of https://github.com/astral-sh/ruff
Flag private member accesses on calls et al (#2753)
This commit is contained in:
parent
9f84c497f9
commit
dadbfea497
|
|
@ -33,6 +33,8 @@ class Foo(metaclass=BazMeta):
|
||||||
def get_bar():
|
def get_bar():
|
||||||
if self.bar._private: # SLF001
|
if self.bar._private: # SLF001
|
||||||
return None
|
return None
|
||||||
|
if self.bar()._private: # SLF001
|
||||||
|
return None
|
||||||
return self.bar
|
return self.bar
|
||||||
|
|
||||||
def public_func(self):
|
def public_func(self):
|
||||||
|
|
@ -51,9 +53,11 @@ print(foo.public_thing)
|
||||||
print(foo.public_func())
|
print(foo.public_func())
|
||||||
print(foo.__dict__)
|
print(foo.__dict__)
|
||||||
print(foo.__str__())
|
print(foo.__str__())
|
||||||
|
print(foo().__class__)
|
||||||
|
|
||||||
print(foo._private_thing) # SLF001
|
print(foo._private_thing) # SLF001
|
||||||
print(foo.__really_private_thing) # SLF001
|
print(foo.__really_private_thing) # SLF001
|
||||||
print(foo._private_func()) # SLF001
|
print(foo._private_func()) # SLF001
|
||||||
print(foo.__really_private_func(1)) # SLF001
|
print(foo.__really_private_func(1)) # SLF001
|
||||||
print(foo.bar._private) # SLF001
|
print(foo.bar._private) # SLF001
|
||||||
|
print(foo()._private_thing) # SLF001
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
use ruff_macros::{define_violation, derive_message_formats};
|
|
||||||
use rustpython_parser::ast::{Expr, ExprKind};
|
use rustpython_parser::ast::{Expr, ExprKind};
|
||||||
|
|
||||||
|
use ruff_macros::{define_violation, derive_message_formats};
|
||||||
|
|
||||||
|
use crate::ast::helpers::collect_call_path;
|
||||||
use crate::ast::types::Range;
|
use crate::ast::types::Range;
|
||||||
use crate::checkers::ast::Checker;
|
use crate::checkers::ast::Checker;
|
||||||
use crate::registry::Diagnostic;
|
use crate::registry::Diagnostic;
|
||||||
|
|
@ -25,20 +27,17 @@ const VALID_IDS: [&str; 3] = ["self", "cls", "mcs"];
|
||||||
pub fn private_member_access(checker: &mut Checker, expr: &Expr) {
|
pub fn private_member_access(checker: &mut Checker, expr: &Expr) {
|
||||||
if let ExprKind::Attribute { value, attr, .. } = &expr.node {
|
if let ExprKind::Attribute { value, attr, .. } = &expr.node {
|
||||||
if !attr.ends_with("__") && (attr.starts_with('_') || attr.starts_with("__")) {
|
if !attr.ends_with("__") && (attr.starts_with('_') || attr.starts_with("__")) {
|
||||||
let id = match &value.node {
|
let call_path = collect_call_path(value);
|
||||||
ExprKind::Name { id, .. } => id,
|
if VALID_IDS.iter().any(|id| call_path.as_slice() == [*id]) {
|
||||||
ExprKind::Attribute { attr, .. } => attr,
|
return;
|
||||||
_ => return,
|
|
||||||
};
|
|
||||||
|
|
||||||
if !VALID_IDS.contains(&id.as_str()) {
|
|
||||||
checker.diagnostics.push(Diagnostic::new(
|
|
||||||
PrivateMemberAccess {
|
|
||||||
access: format!("{}.{}", id, attr),
|
|
||||||
},
|
|
||||||
Range::from_located(expr),
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
checker.diagnostics.push(Diagnostic::new(
|
||||||
|
PrivateMemberAccess {
|
||||||
|
access: attr.to_string(),
|
||||||
|
},
|
||||||
|
Range::from_located(expr),
|
||||||
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
---
|
---
|
||||||
source: src/rules/flake8_self/mod.rs
|
source: crates/ruff/src/rules/flake8_self/mod.rs
|
||||||
expression: diagnostics
|
expression: diagnostics
|
||||||
---
|
---
|
||||||
- kind:
|
- kind:
|
||||||
PrivateMemberAccess:
|
PrivateMemberAccess:
|
||||||
access: bar._private
|
access: _private
|
||||||
location:
|
location:
|
||||||
row: 34
|
row: 34
|
||||||
column: 11
|
column: 11
|
||||||
|
|
@ -15,57 +15,79 @@ expression: diagnostics
|
||||||
parent: ~
|
parent: ~
|
||||||
- kind:
|
- kind:
|
||||||
PrivateMemberAccess:
|
PrivateMemberAccess:
|
||||||
access: foo._private_thing
|
access: _private
|
||||||
location:
|
location:
|
||||||
row: 55
|
row: 36
|
||||||
|
column: 11
|
||||||
|
end_location:
|
||||||
|
row: 36
|
||||||
|
column: 30
|
||||||
|
fix: ~
|
||||||
|
parent: ~
|
||||||
|
- kind:
|
||||||
|
PrivateMemberAccess:
|
||||||
|
access: _private_thing
|
||||||
|
location:
|
||||||
|
row: 58
|
||||||
column: 6
|
column: 6
|
||||||
end_location:
|
end_location:
|
||||||
row: 55
|
row: 58
|
||||||
column: 24
|
column: 24
|
||||||
fix: ~
|
fix: ~
|
||||||
parent: ~
|
parent: ~
|
||||||
- kind:
|
- kind:
|
||||||
PrivateMemberAccess:
|
PrivateMemberAccess:
|
||||||
access: foo.__really_private_thing
|
access: __really_private_thing
|
||||||
location:
|
location:
|
||||||
row: 56
|
row: 59
|
||||||
column: 6
|
column: 6
|
||||||
end_location:
|
end_location:
|
||||||
row: 56
|
row: 59
|
||||||
column: 32
|
column: 32
|
||||||
fix: ~
|
fix: ~
|
||||||
parent: ~
|
parent: ~
|
||||||
- kind:
|
- kind:
|
||||||
PrivateMemberAccess:
|
PrivateMemberAccess:
|
||||||
access: foo._private_func
|
access: _private_func
|
||||||
location:
|
location:
|
||||||
row: 57
|
row: 60
|
||||||
column: 6
|
column: 6
|
||||||
end_location:
|
end_location:
|
||||||
row: 57
|
row: 60
|
||||||
column: 23
|
column: 23
|
||||||
fix: ~
|
fix: ~
|
||||||
parent: ~
|
parent: ~
|
||||||
- kind:
|
- kind:
|
||||||
PrivateMemberAccess:
|
PrivateMemberAccess:
|
||||||
access: foo.__really_private_func
|
access: __really_private_func
|
||||||
location:
|
location:
|
||||||
row: 58
|
row: 61
|
||||||
column: 6
|
column: 6
|
||||||
end_location:
|
end_location:
|
||||||
row: 58
|
row: 61
|
||||||
column: 31
|
column: 31
|
||||||
fix: ~
|
fix: ~
|
||||||
parent: ~
|
parent: ~
|
||||||
- kind:
|
- kind:
|
||||||
PrivateMemberAccess:
|
PrivateMemberAccess:
|
||||||
access: bar._private
|
access: _private
|
||||||
location:
|
location:
|
||||||
row: 59
|
row: 62
|
||||||
column: 6
|
column: 6
|
||||||
end_location:
|
end_location:
|
||||||
row: 59
|
row: 62
|
||||||
column: 22
|
column: 22
|
||||||
fix: ~
|
fix: ~
|
||||||
parent: ~
|
parent: ~
|
||||||
|
- kind:
|
||||||
|
PrivateMemberAccess:
|
||||||
|
access: _private_thing
|
||||||
|
location:
|
||||||
|
row: 63
|
||||||
|
column: 6
|
||||||
|
end_location:
|
||||||
|
row: 63
|
||||||
|
column: 26
|
||||||
|
fix: ~
|
||||||
|
parent: ~
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue