|
1 | 1 | use red_knot_python_semantic::ModuleName;
|
2 | 2 | use ruff_python_ast::visitor::source_order::{
|
3 |
| - walk_expr, walk_module, walk_stmt, SourceOrderVisitor, |
| 3 | + walk_expr, walk_module, walk_stmt, SourceOrderVisitor, TraversalSignal, |
4 | 4 | };
|
5 |
| -use ruff_python_ast::{self as ast, Expr, Mod, Stmt}; |
| 5 | +use ruff_python_ast::{self as ast, AnyNodeRef, Expr, Mod, Stmt}; |
6 | 6 |
|
7 | 7 | /// Collect all imports for a given Python file.
|
8 | 8 | #[derive(Default, Debug)]
|
@@ -32,6 +32,26 @@ impl<'a> Collector<'a> {
|
32 | 32 | }
|
33 | 33 |
|
34 | 34 | 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 | + |
35 | 55 | fn visit_stmt(&mut self, stmt: &'ast Stmt) {
|
36 | 56 | match stmt {
|
37 | 57 | Stmt::ImportFrom(ast::StmtImportFrom {
|
|
0 commit comments