Skip to content

Commit 179cf71

Browse files
authored
Do not trigger SCP27 for class attributes or function variables (#106)
1 parent 29379db commit 179cf71

File tree

2 files changed

+133
-58
lines changed

2 files changed

+133
-58
lines changed

scrapy_lint/finders/settings/__init__.py

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
expr,
2929
keyword,
3030
)
31-
from ast import walk as iter_nodes
3231
from contextlib import suppress
3332
from difflib import SequenceMatcher
3433
from typing import TYPE_CHECKING, Any, Union
@@ -605,19 +604,36 @@ def check_import_statement(self, node: Import | ImportFrom) -> None:
605604

606605
def check_all_nodes_issues(self, node: Module) -> None:
607606
processor = SettingsModuleSettingsProcessor(self.context, self.setting_checker)
608-
for child in iter_nodes(node):
609-
if isinstance(child, Assign):
610-
issue_generator = processor.process_assignment(child)
611-
self.issues.extend(issue_generator)
612-
elif isinstance(child, (ClassDef, FunctionDef)):
613-
if not child.name.isupper():
614-
continue
615-
pos = Pos.from_node(child, definition_column(child))
616-
self.issues.append(Issue(IMPROPER_SETTING_DEFINITION, pos))
617-
issue_generator = self.setting_checker.check_name(child)
618-
self.issues.extend(issue_generator)
619-
elif isinstance(child, (Import, ImportFrom)):
620-
processor.process_import(child)
607+
608+
def visit_nested_body(child) -> None:
609+
visit_body(child.body)
610+
for attr in ("orelse", "finalbody", "handlers"):
611+
sub = getattr(child, attr, None)
612+
if sub:
613+
if attr == "handlers":
614+
for handler in sub:
615+
visit_body(getattr(handler, "body", []))
616+
else:
617+
visit_body(sub)
618+
619+
def visit_body(body):
620+
for child in body:
621+
if isinstance(child, (ClassDef, FunctionDef)):
622+
if not child.name.isupper():
623+
continue
624+
pos = Pos.from_node(child, definition_column(child))
625+
self.issues.append(Issue(IMPROPER_SETTING_DEFINITION, pos))
626+
issue_generator = self.setting_checker.check_name(child)
627+
self.issues.extend(issue_generator)
628+
elif isinstance(child, (Import, ImportFrom)):
629+
processor.process_import(child)
630+
elif isinstance(child, Assign):
631+
issue_generator = processor.process_assignment(child)
632+
self.issues.extend(issue_generator)
633+
elif hasattr(child, "body"):
634+
visit_nested_body(child)
635+
636+
visit_body(node.body)
621637
self.issues.extend(processor.iter_issues())
622638

623639

0 commit comments

Comments
 (0)