sniff/
roles_surface_assignment.rs1fn is_assignment_comparison(trimmed: &str) -> bool {
2 trimmed.contains("==")
3 || trimmed.contains("!=")
4 || trimmed.contains(">=")
5 || trimmed.contains("<=")
6}
7
8fn is_assignment_name_like(text: &str) -> bool {
9 text.chars()
10 .all(|ch| ch.is_ascii_uppercase() || ch.is_ascii_digit() || ch == '_' || ch == '.')
11}
12
13fn is_assignment_rhs_alias(rhs: &str) -> bool {
14 let rhs_lower = rhs.to_lowercase();
15 rhs_lower.starts_with("_")
16 || rhs_lower.contains(".")
17 || rhs_lower.contains(" as ")
18 || rhs_lower.ends_with(")")
19 || rhs_lower.ends_with("}")
20 || rhs_lower.ends_with("]")
21}
22
23pub fn is_wrapper_assignment(trimmed: &str) -> bool {
24 let Some((lhs_raw, rhs_raw)) = trimmed.split_once('=') else {
25 return false;
26 };
27
28 if is_assignment_comparison(trimmed) {
29 return false;
30 }
31
32 let lhs = lhs_raw.trim();
33 let rhs = rhs_raw.trim().trim_end_matches(',');
34 if lhs.is_empty() || rhs.is_empty() {
35 return false;
36 }
37
38 if lhs.starts_with("__all__") {
39 return true;
40 }
41
42 if rhs.contains('(') {
43 return false;
44 }
45
46 let rhs_is_alias = is_assignment_rhs_alias(rhs);
47 let rhs_is_const = is_assignment_name_like(rhs);
48 let lhs_is_const = is_assignment_name_like(lhs);
49
50 lhs_is_const || rhs_is_alias || rhs_is_const
51}