Skip to content

Commit 52bab32

Browse files
committed
Skip traversal for non-compound statements
1 parent 17c4690 commit 52bab32

File tree

1 file changed

+22
-2
lines changed

1 file changed

+22
-2
lines changed

crates/ruff_graph/src/collector.rs

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
use red_knot_python_semantic::ModuleName;
22
use ruff_python_ast::visitor::source_order::{
3-
walk_expr, walk_module, walk_stmt, SourceOrderVisitor,
3+
walk_expr, walk_module, walk_stmt, SourceOrderVisitor, TraversalSignal,
44
};
5-
use ruff_python_ast::{self as ast, Expr, Mod, Stmt};
5+
use ruff_python_ast::{self as ast, AnyNodeRef, Expr, Mod, Stmt};
66

77
/// Collect all imports for a given Python file.
88
#[derive(Default, Debug)]
@@ -32,6 +32,26 @@ impl<'a> Collector<'a> {
3232
}
3333

3434
impl<'ast> SourceOrderVisitor<'ast> for Collector<'_> {
35+
fn enter_node(&mut self, node: AnyNodeRef<'ast>) -> TraversalSignal {
36+
if self.string_imports {
37+
TraversalSignal::Traverse
38+
} else if matches!(
39+
node,
40+
AnyNodeRef::ModModule(_)
41+
| AnyNodeRef::StmtFunctionDef(_)
42+
| AnyNodeRef::StmtClassDef(_)
43+
| AnyNodeRef::StmtWhile(_)
44+
| AnyNodeRef::StmtFor(_)
45+
| AnyNodeRef::StmtWith(_)
46+
| AnyNodeRef::StmtIf(_)
47+
| AnyNodeRef::StmtTry(_)
48+
) {
49+
TraversalSignal::Traverse
50+
} else {
51+
TraversalSignal::Skip
52+
}
53+
}
54+
3555
fn visit_stmt(&mut self, stmt: &'ast Stmt) {
3656
match stmt {
3757
Stmt::ImportFrom(ast::StmtImportFrom {

0 commit comments

Comments
 (0)