Rename PreorderVisitor to SourceOrderVisitor (#11798)

Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
This commit is contained in:
Micha Reiser 2024-06-07 19:01:58 +02:00 committed by GitHub
parent 37d8de3316
commit 32ca704956
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
27 changed files with 496 additions and 491 deletions

View file

@ -6,8 +6,8 @@ use std::marker::PhantomData;
use rustc_hash::FxHashMap; use rustc_hash::FxHashMap;
use ruff_index::{Idx, IndexVec}; use ruff_index::{Idx, IndexVec};
use ruff_python_ast::visitor::preorder; use ruff_python_ast::visitor::source_order;
use ruff_python_ast::visitor::preorder::{PreorderVisitor, TraversalSignal}; use ruff_python_ast::visitor::source_order::{SourceOrderVisitor, TraversalSignal};
use ruff_python_ast::{ use ruff_python_ast::{
AnyNodeRef, AstNode, ExceptHandler, ExceptHandlerExceptHandler, Expr, MatchCase, ModModule, AnyNodeRef, AstNode, ExceptHandler, ExceptHandlerExceptHandler, Expr, MatchCase, ModModule,
NodeKind, Parameter, Stmt, StmtAnnAssign, StmtAssign, StmtAugAssign, StmtClassDef, NodeKind, Parameter, Stmt, StmtAnnAssign, StmtAssign, StmtAugAssign, StmtClassDef,
@ -91,9 +91,9 @@ impl AstIds {
while let Some(deferred) = visitor.deferred.pop() { while let Some(deferred) = visitor.deferred.pop() {
match deferred { match deferred {
DeferredNode::FunctionDefinition(def) => { DeferredNode::FunctionDefinition(def) => {
def.visit_preorder(&mut visitor); def.visit_source_order(&mut visitor);
} }
DeferredNode::ClassDefinition(def) => def.visit_preorder(&mut visitor), DeferredNode::ClassDefinition(def) => def.visit_source_order(&mut visitor),
} }
} }
@ -182,7 +182,7 @@ impl<'a> AstIdsVisitor<'a> {
} }
} }
impl<'a> PreorderVisitor<'a> for AstIdsVisitor<'a> { impl<'a> SourceOrderVisitor<'a> for AstIdsVisitor<'a> {
fn visit_stmt(&mut self, stmt: &'a Stmt) { fn visit_stmt(&mut self, stmt: &'a Stmt) {
match stmt { match stmt {
Stmt::FunctionDef(def) => { Stmt::FunctionDef(def) => {
@ -226,14 +226,14 @@ impl<'a> PreorderVisitor<'a> for AstIdsVisitor<'a> {
Stmt::IpyEscapeCommand(_) => {} Stmt::IpyEscapeCommand(_) => {}
} }
preorder::walk_stmt(self, stmt); source_order::walk_stmt(self, stmt);
} }
fn visit_expr(&mut self, _expr: &'a Expr) {} fn visit_expr(&mut self, _expr: &'a Expr) {}
fn visit_parameter(&mut self, parameter: &'a Parameter) { fn visit_parameter(&mut self, parameter: &'a Parameter) {
self.create_id(parameter); self.create_id(parameter);
preorder::walk_parameter(self, parameter); source_order::walk_parameter(self, parameter);
} }
fn visit_except_handler(&mut self, except_handler: &'a ExceptHandler) { fn visit_except_handler(&mut self, except_handler: &'a ExceptHandler) {
@ -243,17 +243,17 @@ impl<'a> PreorderVisitor<'a> for AstIdsVisitor<'a> {
} }
} }
preorder::walk_except_handler(self, except_handler); source_order::walk_except_handler(self, except_handler);
} }
fn visit_with_item(&mut self, with_item: &'a WithItem) { fn visit_with_item(&mut self, with_item: &'a WithItem) {
self.create_id(with_item); self.create_id(with_item);
preorder::walk_with_item(self, with_item); source_order::walk_with_item(self, with_item);
} }
fn visit_match_case(&mut self, match_case: &'a MatchCase) { fn visit_match_case(&mut self, match_case: &'a MatchCase) {
self.create_id(match_case); self.create_id(match_case);
preorder::walk_match_case(self, match_case); source_order::walk_match_case(self, match_case);
} }
fn visit_type_param(&mut self, type_param: &'a TypeParam) { fn visit_type_param(&mut self, type_param: &'a TypeParam) {
@ -309,7 +309,7 @@ struct FindNodeKeyVisitor<'a> {
result: Option<AnyNodeRef<'a>>, result: Option<AnyNodeRef<'a>>,
} }
impl<'a> PreorderVisitor<'a> for FindNodeKeyVisitor<'a> { impl<'a> SourceOrderVisitor<'a> for FindNodeKeyVisitor<'a> {
fn enter_node(&mut self, node: AnyNodeRef<'a>) -> TraversalSignal { fn enter_node(&mut self, node: AnyNodeRef<'a>) -> TraversalSignal {
if self.result.is_some() { if self.result.is_some() {
return TraversalSignal::Skip; return TraversalSignal::Skip;

View file

@ -1,7 +1,7 @@
use std::num::NonZeroU32; use std::num::NonZeroU32;
use ruff_python_ast as ast; use ruff_python_ast as ast;
use ruff_python_ast::visitor::preorder::PreorderVisitor; use ruff_python_ast::visitor::source_order::SourceOrderVisitor;
use crate::ast_ids::{NodeKey, TypedNodeKey}; use crate::ast_ids::{NodeKey, TypedNodeKey};
use crate::cache::KeyValueCache; use crate::cache::KeyValueCache;
@ -238,7 +238,7 @@ impl SemanticIndexer {
} }
} }
impl PreorderVisitor<'_> for SemanticIndexer { impl SourceOrderVisitor<'_> for SemanticIndexer {
fn visit_expr(&mut self, expr: &ast::Expr) { fn visit_expr(&mut self, expr: &ast::Expr) {
let expression_id = self let expression_id = self
.flow_graph_builder .flow_graph_builder
@ -267,7 +267,7 @@ impl PreorderVisitor<'_> for SemanticIndexer {
self.add_or_update_symbol_with_def(id, curdef); self.add_or_update_symbol_with_def(id, curdef);
} }
} }
ast::visitor::preorder::walk_expr(self, expr); ast::visitor::source_order::walk_expr(self, expr);
} }
ast::Expr::Named(node) => { ast::Expr::Named(node) => {
debug_assert!(self.current_definition.is_none()); debug_assert!(self.current_definition.is_none());
@ -304,7 +304,7 @@ impl PreorderVisitor<'_> for SemanticIndexer {
self.set_current_flow_node(post_else); self.set_current_flow_node(post_else);
} }
_ => { _ => {
ast::visitor::preorder::walk_expr(self, expr); ast::visitor::source_order::walk_expr(self, expr);
} }
} }
} }
@ -507,7 +507,7 @@ impl PreorderVisitor<'_> for SemanticIndexer {
self.set_current_flow_node(post_prior_clause); self.set_current_flow_node(post_prior_clause);
} }
_ => { _ => {
ast::visitor::preorder::walk_stmt(self, stmt); ast::visitor::source_order::walk_stmt(self, stmt);
} }
} }
} }

View file

@ -2,7 +2,7 @@ use std::iter::Peekable;
use ruff_python_ast::{ use ruff_python_ast::{
helpers::comment_indentation_after, helpers::comment_indentation_after,
visitor::preorder::{self, PreorderVisitor, TraversalSignal}, visitor::source_order::{self, SourceOrderVisitor, TraversalSignal},
AnyNodeRef, Suite, AnyNodeRef, Suite,
}; };
use ruff_python_trivia::{ use ruff_python_trivia::{
@ -62,7 +62,7 @@ where
} }
} }
impl<'ast, I> PreorderVisitor<'ast> for SuppressionCommentVisitor<'ast, '_, I> impl<'ast, I> SourceOrderVisitor<'ast> for SuppressionCommentVisitor<'ast, '_, I>
where where
I: Iterator<Item = SuppressionComment> + 'ast, I: Iterator<Item = SuppressionComment> + 'ast,
{ {
@ -187,7 +187,7 @@ where
self.visit_stmt(first); self.visit_stmt(first);
self.preceding_node = Some(last.into()); self.preceding_node = Some(last.into());
} else { } else {
preorder::walk_body(self, body); source_order::walk_body(self, body);
} }
} }
} }

View file

@ -1,7 +1,7 @@
use ruff_diagnostics::{Diagnostic, Violation}; use ruff_diagnostics::{Diagnostic, Violation};
use ruff_macros::{derive_message_formats, violation}; use ruff_macros::{derive_message_formats, violation};
use ruff_python_ast::identifier::Identifier; use ruff_python_ast::identifier::Identifier;
use ruff_python_ast::visitor::preorder; use ruff_python_ast::visitor::source_order;
use ruff_python_ast::{self as ast, AnyNodeRef, Expr, Stmt}; use ruff_python_ast::{self as ast, AnyNodeRef, Expr, Stmt};
use ruff_python_semantic::analyze::function_type::is_stub; use ruff_python_semantic::analyze::function_type::is_stub;
@ -50,12 +50,12 @@ struct AsyncExprVisitor {
/// Traverse a function's body to find whether it contains an await-expr, an async-with, or an /// Traverse a function's body to find whether it contains an await-expr, an async-with, or an
/// async-for. Stop traversing after one is found. The bodies of inner-functions and inner-classes /// async-for. Stop traversing after one is found. The bodies of inner-functions and inner-classes
/// aren't traversed. /// aren't traversed.
impl<'a> preorder::PreorderVisitor<'a> for AsyncExprVisitor { impl<'a> source_order::SourceOrderVisitor<'a> for AsyncExprVisitor {
fn enter_node(&mut self, _node: AnyNodeRef<'a>) -> preorder::TraversalSignal { fn enter_node(&mut self, _node: AnyNodeRef<'a>) -> source_order::TraversalSignal {
if self.found_await_or_async { if self.found_await_or_async {
preorder::TraversalSignal::Skip source_order::TraversalSignal::Skip
} else { } else {
preorder::TraversalSignal::Traverse source_order::TraversalSignal::Traverse
} }
} }
fn visit_stmt(&mut self, stmt: &'a Stmt) { fn visit_stmt(&mut self, stmt: &'a Stmt) {
@ -73,7 +73,7 @@ impl<'a> preorder::PreorderVisitor<'a> for AsyncExprVisitor {
Stmt::ClassDef(class_def) => { Stmt::ClassDef(class_def) => {
class_def_visit_preorder_except_body(class_def, self); class_def_visit_preorder_except_body(class_def, self);
} }
_ => preorder::walk_stmt(self, stmt), _ => source_order::walk_stmt(self, stmt),
} }
} }
fn visit_expr(&mut self, expr: &'a Expr) { fn visit_expr(&mut self, expr: &'a Expr) {
@ -81,14 +81,14 @@ impl<'a> preorder::PreorderVisitor<'a> for AsyncExprVisitor {
Expr::Await(_) => { Expr::Await(_) => {
self.found_await_or_async = true; self.found_await_or_async = true;
} }
_ => preorder::walk_expr(self, expr), _ => source_order::walk_expr(self, expr),
} }
} }
fn visit_comprehension(&mut self, comprehension: &'a ast::Comprehension) { fn visit_comprehension(&mut self, comprehension: &'a ast::Comprehension) {
if comprehension.is_async { if comprehension.is_async {
self.found_await_or_async = true; self.found_await_or_async = true;
} else { } else {
preorder::walk_comprehension(self, comprehension); source_order::walk_comprehension(self, comprehension);
} }
} }
} }
@ -99,7 +99,7 @@ fn function_def_visit_preorder_except_body<'a, V>(
function_def: &'a ast::StmtFunctionDef, function_def: &'a ast::StmtFunctionDef,
visitor: &mut V, visitor: &mut V,
) where ) where
V: preorder::PreorderVisitor<'a>, V: source_order::SourceOrderVisitor<'a>,
{ {
let ast::StmtFunctionDef { let ast::StmtFunctionDef {
parameters, parameters,
@ -128,7 +128,7 @@ fn function_def_visit_preorder_except_body<'a, V>(
/// crucially, doesn't traverse the body. /// crucially, doesn't traverse the body.
fn class_def_visit_preorder_except_body<'a, V>(class_def: &'a ast::StmtClassDef, visitor: &mut V) fn class_def_visit_preorder_except_body<'a, V>(class_def: &'a ast::StmtClassDef, visitor: &mut V)
where where
V: preorder::PreorderVisitor<'a>, V: source_order::SourceOrderVisitor<'a>,
{ {
let ast::StmtClassDef { let ast::StmtClassDef {
arguments, arguments,
@ -175,7 +175,7 @@ pub(crate) fn unused_async(
let found_await_or_async = { let found_await_or_async = {
let mut visitor = AsyncExprVisitor::default(); let mut visitor = AsyncExprVisitor::default();
preorder::walk_body(&mut visitor, body); source_order::walk_body(&mut visitor, body);
visitor.found_await_or_async visitor.found_await_or_async
}; };

File diff suppressed because it is too large Load diff

View file

@ -1,6 +1,6 @@
//! AST visitor trait and walk functions. //! AST visitor trait and walk functions.
pub mod preorder; pub mod source_order;
pub mod transformer; pub mod transformer;
use crate::{ use crate::{
@ -16,8 +16,8 @@ use crate::{
/// Prefer [`crate::statement_visitor::StatementVisitor`] for visitors that only need to visit /// Prefer [`crate::statement_visitor::StatementVisitor`] for visitors that only need to visit
/// statements. /// statements.
/// ///
/// Use the [`PreorderVisitor`](preorder::PreorderVisitor) if you want to visit the nodes /// Use the [`PreorderVisitor`](source_order::SourceOrderVisitor) if you want to visit the nodes
/// in pre-order rather than evaluation order. /// in source-order rather than evaluation order.
/// ///
/// Use the [`Transformer`](transformer::Transformer) if you want to modify the nodes. /// Use the [`Transformer`](transformer::Transformer) if you want to modify the nodes.
pub trait Visitor<'a> { pub trait Visitor<'a> {

View file

@ -6,8 +6,11 @@ use crate::{
}; };
use crate::{AnyNodeRef, AstNode}; use crate::{AnyNodeRef, AstNode};
/// Visitor that traverses all nodes recursively in pre-order. /// Visitor that traverses all nodes recursively in the order they appear in the source.
pub trait PreorderVisitor<'a> { ///
/// If you need a visitor that visits the nodes in the order they're evaluated at runtime,
/// use [`Visitor`](super::Visitor) instead.
pub trait SourceOrderVisitor<'a> {
#[inline] #[inline]
fn enter_node(&mut self, _node: AnyNodeRef<'a>) -> TraversalSignal { fn enter_node(&mut self, _node: AnyNodeRef<'a>) -> TraversalSignal {
TraversalSignal::Traverse TraversalSignal::Traverse
@ -171,13 +174,13 @@ pub trait PreorderVisitor<'a> {
pub fn walk_module<'a, V>(visitor: &mut V, module: &'a Mod) pub fn walk_module<'a, V>(visitor: &mut V, module: &'a Mod)
where where
V: PreorderVisitor<'a> + ?Sized, V: SourceOrderVisitor<'a> + ?Sized,
{ {
let node = AnyNodeRef::from(module); let node = AnyNodeRef::from(module);
if visitor.enter_node(node).is_traverse() { if visitor.enter_node(node).is_traverse() {
match module { match module {
Mod::Module(module) => module.visit_preorder(visitor), Mod::Module(module) => module.visit_source_order(visitor),
Mod::Expression(module) => module.visit_preorder(visitor), Mod::Expression(module) => module.visit_source_order(visitor),
} }
} }
@ -186,7 +189,7 @@ where
pub fn walk_body<'a, V>(visitor: &mut V, body: &'a [Stmt]) pub fn walk_body<'a, V>(visitor: &mut V, body: &'a [Stmt])
where where
V: PreorderVisitor<'a> + ?Sized, V: SourceOrderVisitor<'a> + ?Sized,
{ {
for stmt in body { for stmt in body {
visitor.visit_stmt(stmt); visitor.visit_stmt(stmt);
@ -195,37 +198,37 @@ where
pub fn walk_stmt<'a, V>(visitor: &mut V, stmt: &'a Stmt) pub fn walk_stmt<'a, V>(visitor: &mut V, stmt: &'a Stmt)
where where
V: PreorderVisitor<'a> + ?Sized, V: SourceOrderVisitor<'a> + ?Sized,
{ {
let node = AnyNodeRef::from(stmt); let node = AnyNodeRef::from(stmt);
if visitor.enter_node(node).is_traverse() { if visitor.enter_node(node).is_traverse() {
match stmt { match stmt {
Stmt::Expr(stmt) => stmt.visit_preorder(visitor), Stmt::Expr(stmt) => stmt.visit_source_order(visitor),
Stmt::FunctionDef(stmt) => stmt.visit_preorder(visitor), Stmt::FunctionDef(stmt) => stmt.visit_source_order(visitor),
Stmt::ClassDef(stmt) => stmt.visit_preorder(visitor), Stmt::ClassDef(stmt) => stmt.visit_source_order(visitor),
Stmt::Return(stmt) => stmt.visit_preorder(visitor), Stmt::Return(stmt) => stmt.visit_source_order(visitor),
Stmt::Delete(stmt) => stmt.visit_preorder(visitor), Stmt::Delete(stmt) => stmt.visit_source_order(visitor),
Stmt::TypeAlias(stmt) => stmt.visit_preorder(visitor), Stmt::TypeAlias(stmt) => stmt.visit_source_order(visitor),
Stmt::Assign(stmt) => stmt.visit_preorder(visitor), Stmt::Assign(stmt) => stmt.visit_source_order(visitor),
Stmt::AugAssign(stmt) => stmt.visit_preorder(visitor), Stmt::AugAssign(stmt) => stmt.visit_source_order(visitor),
Stmt::AnnAssign(stmt) => stmt.visit_preorder(visitor), Stmt::AnnAssign(stmt) => stmt.visit_source_order(visitor),
Stmt::For(stmt) => stmt.visit_preorder(visitor), Stmt::For(stmt) => stmt.visit_source_order(visitor),
Stmt::While(stmt) => stmt.visit_preorder(visitor), Stmt::While(stmt) => stmt.visit_source_order(visitor),
Stmt::If(stmt) => stmt.visit_preorder(visitor), Stmt::If(stmt) => stmt.visit_source_order(visitor),
Stmt::With(stmt) => stmt.visit_preorder(visitor), Stmt::With(stmt) => stmt.visit_source_order(visitor),
Stmt::Match(stmt) => stmt.visit_preorder(visitor), Stmt::Match(stmt) => stmt.visit_source_order(visitor),
Stmt::Raise(stmt) => stmt.visit_preorder(visitor), Stmt::Raise(stmt) => stmt.visit_source_order(visitor),
Stmt::Try(stmt) => stmt.visit_preorder(visitor), Stmt::Try(stmt) => stmt.visit_source_order(visitor),
Stmt::Assert(stmt) => stmt.visit_preorder(visitor), Stmt::Assert(stmt) => stmt.visit_source_order(visitor),
Stmt::Import(stmt) => stmt.visit_preorder(visitor), Stmt::Import(stmt) => stmt.visit_source_order(visitor),
Stmt::ImportFrom(stmt) => stmt.visit_preorder(visitor), Stmt::ImportFrom(stmt) => stmt.visit_source_order(visitor),
Stmt::Pass(stmt) => stmt.visit_preorder(visitor), Stmt::Pass(stmt) => stmt.visit_source_order(visitor),
Stmt::Break(stmt) => stmt.visit_preorder(visitor), Stmt::Break(stmt) => stmt.visit_source_order(visitor),
Stmt::Continue(stmt) => stmt.visit_preorder(visitor), Stmt::Continue(stmt) => stmt.visit_source_order(visitor),
Stmt::Global(stmt) => stmt.visit_preorder(visitor), Stmt::Global(stmt) => stmt.visit_source_order(visitor),
Stmt::Nonlocal(stmt) => stmt.visit_preorder(visitor), Stmt::Nonlocal(stmt) => stmt.visit_source_order(visitor),
Stmt::IpyEscapeCommand(stmt) => stmt.visit_preorder(visitor), Stmt::IpyEscapeCommand(stmt) => stmt.visit_source_order(visitor),
} }
} }
@ -244,7 +247,7 @@ impl TraversalSignal {
} }
} }
pub fn walk_annotation<'a, V: PreorderVisitor<'a> + ?Sized>(visitor: &mut V, expr: &'a Expr) { pub fn walk_annotation<'a, V: SourceOrderVisitor<'a> + ?Sized>(visitor: &mut V, expr: &'a Expr) {
let node = AnyNodeRef::from(expr); let node = AnyNodeRef::from(expr);
if visitor.enter_node(node).is_traverse() { if visitor.enter_node(node).is_traverse() {
visitor.visit_expr(expr); visitor.visit_expr(expr);
@ -255,11 +258,11 @@ pub fn walk_annotation<'a, V: PreorderVisitor<'a> + ?Sized>(visitor: &mut V, exp
pub fn walk_decorator<'a, V>(visitor: &mut V, decorator: &'a Decorator) pub fn walk_decorator<'a, V>(visitor: &mut V, decorator: &'a Decorator)
where where
V: PreorderVisitor<'a> + ?Sized, V: SourceOrderVisitor<'a> + ?Sized,
{ {
let node = AnyNodeRef::from(decorator); let node = AnyNodeRef::from(decorator);
if visitor.enter_node(node).is_traverse() { if visitor.enter_node(node).is_traverse() {
decorator.visit_preorder(visitor); decorator.visit_source_order(visitor);
} }
visitor.leave_node(node); visitor.leave_node(node);
@ -267,43 +270,43 @@ where
pub fn walk_expr<'a, V>(visitor: &mut V, expr: &'a Expr) pub fn walk_expr<'a, V>(visitor: &mut V, expr: &'a Expr)
where where
V: PreorderVisitor<'a> + ?Sized, V: SourceOrderVisitor<'a> + ?Sized,
{ {
let node = AnyNodeRef::from(expr); let node = AnyNodeRef::from(expr);
if visitor.enter_node(node).is_traverse() { if visitor.enter_node(node).is_traverse() {
match expr { match expr {
Expr::BoolOp(expr) => expr.visit_preorder(visitor), Expr::BoolOp(expr) => expr.visit_source_order(visitor),
Expr::Named(expr) => expr.visit_preorder(visitor), Expr::Named(expr) => expr.visit_source_order(visitor),
Expr::BinOp(expr) => expr.visit_preorder(visitor), Expr::BinOp(expr) => expr.visit_source_order(visitor),
Expr::UnaryOp(expr) => expr.visit_preorder(visitor), Expr::UnaryOp(expr) => expr.visit_source_order(visitor),
Expr::Lambda(expr) => expr.visit_preorder(visitor), Expr::Lambda(expr) => expr.visit_source_order(visitor),
Expr::If(expr) => expr.visit_preorder(visitor), Expr::If(expr) => expr.visit_source_order(visitor),
Expr::Dict(expr) => expr.visit_preorder(visitor), Expr::Dict(expr) => expr.visit_source_order(visitor),
Expr::Set(expr) => expr.visit_preorder(visitor), Expr::Set(expr) => expr.visit_source_order(visitor),
Expr::ListComp(expr) => expr.visit_preorder(visitor), Expr::ListComp(expr) => expr.visit_source_order(visitor),
Expr::SetComp(expr) => expr.visit_preorder(visitor), Expr::SetComp(expr) => expr.visit_source_order(visitor),
Expr::DictComp(expr) => expr.visit_preorder(visitor), Expr::DictComp(expr) => expr.visit_source_order(visitor),
Expr::Generator(expr) => expr.visit_preorder(visitor), Expr::Generator(expr) => expr.visit_source_order(visitor),
Expr::Await(expr) => expr.visit_preorder(visitor), Expr::Await(expr) => expr.visit_source_order(visitor),
Expr::Yield(expr) => expr.visit_preorder(visitor), Expr::Yield(expr) => expr.visit_source_order(visitor),
Expr::YieldFrom(expr) => expr.visit_preorder(visitor), Expr::YieldFrom(expr) => expr.visit_source_order(visitor),
Expr::Compare(expr) => expr.visit_preorder(visitor), Expr::Compare(expr) => expr.visit_source_order(visitor),
Expr::Call(expr) => expr.visit_preorder(visitor), Expr::Call(expr) => expr.visit_source_order(visitor),
Expr::FString(expr) => expr.visit_preorder(visitor), Expr::FString(expr) => expr.visit_source_order(visitor),
Expr::StringLiteral(expr) => expr.visit_preorder(visitor), Expr::StringLiteral(expr) => expr.visit_source_order(visitor),
Expr::BytesLiteral(expr) => expr.visit_preorder(visitor), Expr::BytesLiteral(expr) => expr.visit_source_order(visitor),
Expr::NumberLiteral(expr) => expr.visit_preorder(visitor), Expr::NumberLiteral(expr) => expr.visit_source_order(visitor),
Expr::BooleanLiteral(expr) => expr.visit_preorder(visitor), Expr::BooleanLiteral(expr) => expr.visit_source_order(visitor),
Expr::NoneLiteral(expr) => expr.visit_preorder(visitor), Expr::NoneLiteral(expr) => expr.visit_source_order(visitor),
Expr::EllipsisLiteral(expr) => expr.visit_preorder(visitor), Expr::EllipsisLiteral(expr) => expr.visit_source_order(visitor),
Expr::Attribute(expr) => expr.visit_preorder(visitor), Expr::Attribute(expr) => expr.visit_source_order(visitor),
Expr::Subscript(expr) => expr.visit_preorder(visitor), Expr::Subscript(expr) => expr.visit_source_order(visitor),
Expr::Starred(expr) => expr.visit_preorder(visitor), Expr::Starred(expr) => expr.visit_source_order(visitor),
Expr::Name(expr) => expr.visit_preorder(visitor), Expr::Name(expr) => expr.visit_source_order(visitor),
Expr::List(expr) => expr.visit_preorder(visitor), Expr::List(expr) => expr.visit_source_order(visitor),
Expr::Tuple(expr) => expr.visit_preorder(visitor), Expr::Tuple(expr) => expr.visit_source_order(visitor),
Expr::Slice(expr) => expr.visit_preorder(visitor), Expr::Slice(expr) => expr.visit_source_order(visitor),
Expr::IpyEscapeCommand(expr) => expr.visit_preorder(visitor), Expr::IpyEscapeCommand(expr) => expr.visit_source_order(visitor),
} }
} }
@ -312,11 +315,11 @@ where
pub fn walk_comprehension<'a, V>(visitor: &mut V, comprehension: &'a Comprehension) pub fn walk_comprehension<'a, V>(visitor: &mut V, comprehension: &'a Comprehension)
where where
V: PreorderVisitor<'a> + ?Sized, V: SourceOrderVisitor<'a> + ?Sized,
{ {
let node = AnyNodeRef::from(comprehension); let node = AnyNodeRef::from(comprehension);
if visitor.enter_node(node).is_traverse() { if visitor.enter_node(node).is_traverse() {
comprehension.visit_preorder(visitor); comprehension.visit_source_order(visitor);
} }
visitor.leave_node(node); visitor.leave_node(node);
@ -324,11 +327,11 @@ where
pub fn walk_elif_else_clause<'a, V>(visitor: &mut V, elif_else_clause: &'a ElifElseClause) pub fn walk_elif_else_clause<'a, V>(visitor: &mut V, elif_else_clause: &'a ElifElseClause)
where where
V: PreorderVisitor<'a> + ?Sized, V: SourceOrderVisitor<'a> + ?Sized,
{ {
let node = AnyNodeRef::from(elif_else_clause); let node = AnyNodeRef::from(elif_else_clause);
if visitor.enter_node(node).is_traverse() { if visitor.enter_node(node).is_traverse() {
elif_else_clause.visit_preorder(visitor); elif_else_clause.visit_source_order(visitor);
} }
visitor.leave_node(node); visitor.leave_node(node);
@ -336,18 +339,20 @@ where
pub fn walk_except_handler<'a, V>(visitor: &mut V, except_handler: &'a ExceptHandler) pub fn walk_except_handler<'a, V>(visitor: &mut V, except_handler: &'a ExceptHandler)
where where
V: PreorderVisitor<'a> + ?Sized, V: SourceOrderVisitor<'a> + ?Sized,
{ {
let node = AnyNodeRef::from(except_handler); let node = AnyNodeRef::from(except_handler);
if visitor.enter_node(node).is_traverse() { if visitor.enter_node(node).is_traverse() {
match except_handler { match except_handler {
ExceptHandler::ExceptHandler(except_handler) => except_handler.visit_preorder(visitor), ExceptHandler::ExceptHandler(except_handler) => {
except_handler.visit_source_order(visitor);
}
} }
} }
visitor.leave_node(node); visitor.leave_node(node);
} }
pub fn walk_format_spec<'a, V: PreorderVisitor<'a> + ?Sized>( pub fn walk_format_spec<'a, V: SourceOrderVisitor<'a> + ?Sized>(
visitor: &mut V, visitor: &mut V,
format_spec: &'a Expr, format_spec: &'a Expr,
) { ) {
@ -361,11 +366,11 @@ pub fn walk_format_spec<'a, V: PreorderVisitor<'a> + ?Sized>(
pub fn walk_arguments<'a, V>(visitor: &mut V, arguments: &'a Arguments) pub fn walk_arguments<'a, V>(visitor: &mut V, arguments: &'a Arguments)
where where
V: PreorderVisitor<'a> + ?Sized, V: SourceOrderVisitor<'a> + ?Sized,
{ {
let node = AnyNodeRef::from(arguments); let node = AnyNodeRef::from(arguments);
if visitor.enter_node(node).is_traverse() { if visitor.enter_node(node).is_traverse() {
arguments.visit_preorder(visitor); arguments.visit_source_order(visitor);
} }
visitor.leave_node(node); visitor.leave_node(node);
@ -373,11 +378,11 @@ where
pub fn walk_parameters<'a, V>(visitor: &mut V, parameters: &'a Parameters) pub fn walk_parameters<'a, V>(visitor: &mut V, parameters: &'a Parameters)
where where
V: PreorderVisitor<'a> + ?Sized, V: SourceOrderVisitor<'a> + ?Sized,
{ {
let node = AnyNodeRef::from(parameters); let node = AnyNodeRef::from(parameters);
if visitor.enter_node(node).is_traverse() { if visitor.enter_node(node).is_traverse() {
parameters.visit_preorder(visitor); parameters.visit_source_order(visitor);
} }
visitor.leave_node(node); visitor.leave_node(node);
@ -385,12 +390,12 @@ where
pub fn walk_parameter<'a, V>(visitor: &mut V, parameter: &'a Parameter) pub fn walk_parameter<'a, V>(visitor: &mut V, parameter: &'a Parameter)
where where
V: PreorderVisitor<'a> + ?Sized, V: SourceOrderVisitor<'a> + ?Sized,
{ {
let node = AnyNodeRef::from(parameter); let node = AnyNodeRef::from(parameter);
if visitor.enter_node(node).is_traverse() { if visitor.enter_node(node).is_traverse() {
parameter.visit_preorder(visitor); parameter.visit_source_order(visitor);
} }
visitor.leave_node(node); visitor.leave_node(node);
} }
@ -399,11 +404,11 @@ pub fn walk_parameter_with_default<'a, V>(
visitor: &mut V, visitor: &mut V,
parameter_with_default: &'a ParameterWithDefault, parameter_with_default: &'a ParameterWithDefault,
) where ) where
V: PreorderVisitor<'a> + ?Sized, V: SourceOrderVisitor<'a> + ?Sized,
{ {
let node = AnyNodeRef::from(parameter_with_default); let node = AnyNodeRef::from(parameter_with_default);
if visitor.enter_node(node).is_traverse() { if visitor.enter_node(node).is_traverse() {
parameter_with_default.visit_preorder(visitor); parameter_with_default.visit_source_order(visitor);
} }
visitor.leave_node(node); visitor.leave_node(node);
@ -412,48 +417,48 @@ pub fn walk_parameter_with_default<'a, V>(
#[inline] #[inline]
pub fn walk_keyword<'a, V>(visitor: &mut V, keyword: &'a Keyword) pub fn walk_keyword<'a, V>(visitor: &mut V, keyword: &'a Keyword)
where where
V: PreorderVisitor<'a> + ?Sized, V: SourceOrderVisitor<'a> + ?Sized,
{ {
let node = AnyNodeRef::from(keyword); let node = AnyNodeRef::from(keyword);
if visitor.enter_node(node).is_traverse() { if visitor.enter_node(node).is_traverse() {
keyword.visit_preorder(visitor); keyword.visit_source_order(visitor);
} }
visitor.leave_node(node); visitor.leave_node(node);
} }
pub fn walk_with_item<'a, V>(visitor: &mut V, with_item: &'a WithItem) pub fn walk_with_item<'a, V>(visitor: &mut V, with_item: &'a WithItem)
where where
V: PreorderVisitor<'a> + ?Sized, V: SourceOrderVisitor<'a> + ?Sized,
{ {
let node = AnyNodeRef::from(with_item); let node = AnyNodeRef::from(with_item);
if visitor.enter_node(node).is_traverse() { if visitor.enter_node(node).is_traverse() {
with_item.visit_preorder(visitor); with_item.visit_source_order(visitor);
} }
visitor.leave_node(node); visitor.leave_node(node);
} }
pub fn walk_type_params<'a, V>(visitor: &mut V, type_params: &'a TypeParams) pub fn walk_type_params<'a, V>(visitor: &mut V, type_params: &'a TypeParams)
where where
V: PreorderVisitor<'a> + ?Sized, V: SourceOrderVisitor<'a> + ?Sized,
{ {
let node = AnyNodeRef::from(type_params); let node = AnyNodeRef::from(type_params);
if visitor.enter_node(node).is_traverse() { if visitor.enter_node(node).is_traverse() {
type_params.visit_preorder(visitor); type_params.visit_source_order(visitor);
} }
visitor.leave_node(node); visitor.leave_node(node);
} }
pub fn walk_type_param<'a, V>(visitor: &mut V, type_param: &'a TypeParam) pub fn walk_type_param<'a, V>(visitor: &mut V, type_param: &'a TypeParam)
where where
V: PreorderVisitor<'a> + ?Sized, V: SourceOrderVisitor<'a> + ?Sized,
{ {
let node = AnyNodeRef::from(type_param); let node = AnyNodeRef::from(type_param);
if visitor.enter_node(node).is_traverse() { if visitor.enter_node(node).is_traverse() {
match type_param { match type_param {
TypeParam::TypeVar(type_param) => type_param.visit_preorder(visitor), TypeParam::TypeVar(type_param) => type_param.visit_source_order(visitor),
TypeParam::TypeVarTuple(type_param) => type_param.visit_preorder(visitor), TypeParam::TypeVarTuple(type_param) => type_param.visit_source_order(visitor),
TypeParam::ParamSpec(type_param) => type_param.visit_preorder(visitor), TypeParam::ParamSpec(type_param) => type_param.visit_source_order(visitor),
} }
} }
visitor.leave_node(node); visitor.leave_node(node);
@ -461,30 +466,30 @@ where
pub fn walk_match_case<'a, V>(visitor: &mut V, match_case: &'a MatchCase) pub fn walk_match_case<'a, V>(visitor: &mut V, match_case: &'a MatchCase)
where where
V: PreorderVisitor<'a> + ?Sized, V: SourceOrderVisitor<'a> + ?Sized,
{ {
let node = AnyNodeRef::from(match_case); let node = AnyNodeRef::from(match_case);
if visitor.enter_node(node).is_traverse() { if visitor.enter_node(node).is_traverse() {
match_case.visit_preorder(visitor); match_case.visit_source_order(visitor);
} }
visitor.leave_node(node); visitor.leave_node(node);
} }
pub fn walk_pattern<'a, V>(visitor: &mut V, pattern: &'a Pattern) pub fn walk_pattern<'a, V>(visitor: &mut V, pattern: &'a Pattern)
where where
V: PreorderVisitor<'a> + ?Sized, V: SourceOrderVisitor<'a> + ?Sized,
{ {
let node = AnyNodeRef::from(pattern); let node = AnyNodeRef::from(pattern);
if visitor.enter_node(node).is_traverse() { if visitor.enter_node(node).is_traverse() {
match pattern { match pattern {
Pattern::MatchValue(pattern) => pattern.visit_preorder(visitor), Pattern::MatchValue(pattern) => pattern.visit_source_order(visitor),
Pattern::MatchSingleton(pattern) => pattern.visit_preorder(visitor), Pattern::MatchSingleton(pattern) => pattern.visit_source_order(visitor),
Pattern::MatchSequence(pattern) => pattern.visit_preorder(visitor), Pattern::MatchSequence(pattern) => pattern.visit_source_order(visitor),
Pattern::MatchMapping(pattern) => pattern.visit_preorder(visitor), Pattern::MatchMapping(pattern) => pattern.visit_source_order(visitor),
Pattern::MatchClass(pattern) => pattern.visit_preorder(visitor), Pattern::MatchClass(pattern) => pattern.visit_source_order(visitor),
Pattern::MatchStar(pattern) => pattern.visit_preorder(visitor), Pattern::MatchStar(pattern) => pattern.visit_source_order(visitor),
Pattern::MatchAs(pattern) => pattern.visit_preorder(visitor), Pattern::MatchAs(pattern) => pattern.visit_source_order(visitor),
Pattern::MatchOr(pattern) => pattern.visit_preorder(visitor), Pattern::MatchOr(pattern) => pattern.visit_source_order(visitor),
} }
} }
visitor.leave_node(node); visitor.leave_node(node);
@ -492,7 +497,7 @@ where
pub fn walk_pattern_arguments<'a, V>(visitor: &mut V, pattern_arguments: &'a PatternArguments) pub fn walk_pattern_arguments<'a, V>(visitor: &mut V, pattern_arguments: &'a PatternArguments)
where where
V: PreorderVisitor<'a> + ?Sized, V: SourceOrderVisitor<'a> + ?Sized,
{ {
let node = AnyNodeRef::from(pattern_arguments); let node = AnyNodeRef::from(pattern_arguments);
if visitor.enter_node(node).is_traverse() { if visitor.enter_node(node).is_traverse() {
@ -508,7 +513,7 @@ where
pub fn walk_pattern_keyword<'a, V>(visitor: &mut V, pattern_keyword: &'a PatternKeyword) pub fn walk_pattern_keyword<'a, V>(visitor: &mut V, pattern_keyword: &'a PatternKeyword)
where where
V: PreorderVisitor<'a> + ?Sized, V: SourceOrderVisitor<'a> + ?Sized,
{ {
let node = AnyNodeRef::from(pattern_keyword); let node = AnyNodeRef::from(pattern_keyword);
if visitor.enter_node(node).is_traverse() { if visitor.enter_node(node).is_traverse() {
@ -517,15 +522,15 @@ where
visitor.leave_node(node); visitor.leave_node(node);
} }
pub fn walk_f_string_element<'a, V: PreorderVisitor<'a> + ?Sized>( pub fn walk_f_string_element<'a, V: SourceOrderVisitor<'a> + ?Sized>(
visitor: &mut V, visitor: &mut V,
f_string_element: &'a FStringElement, f_string_element: &'a FStringElement,
) { ) {
let node = AnyNodeRef::from(f_string_element); let node = AnyNodeRef::from(f_string_element);
if visitor.enter_node(node).is_traverse() { if visitor.enter_node(node).is_traverse() {
match f_string_element { match f_string_element {
FStringElement::Expression(element) => element.visit_preorder(visitor), FStringElement::Expression(element) => element.visit_source_order(visitor),
FStringElement::Literal(element) => element.visit_preorder(visitor), FStringElement::Literal(element) => element.visit_source_order(visitor),
} }
} }
visitor.leave_node(node); visitor.leave_node(node);
@ -533,39 +538,39 @@ pub fn walk_f_string_element<'a, V: PreorderVisitor<'a> + ?Sized>(
pub fn walk_bool_op<'a, V>(_visitor: &mut V, _bool_op: &'a BoolOp) pub fn walk_bool_op<'a, V>(_visitor: &mut V, _bool_op: &'a BoolOp)
where where
V: PreorderVisitor<'a> + ?Sized, V: SourceOrderVisitor<'a> + ?Sized,
{ {
} }
#[inline] #[inline]
pub fn walk_operator<'a, V>(_visitor: &mut V, _operator: &'a Operator) pub fn walk_operator<'a, V>(_visitor: &mut V, _operator: &'a Operator)
where where
V: PreorderVisitor<'a> + ?Sized, V: SourceOrderVisitor<'a> + ?Sized,
{ {
} }
#[inline] #[inline]
pub fn walk_unary_op<'a, V>(_visitor: &mut V, _unary_op: &'a UnaryOp) pub fn walk_unary_op<'a, V>(_visitor: &mut V, _unary_op: &'a UnaryOp)
where where
V: PreorderVisitor<'a> + ?Sized, V: SourceOrderVisitor<'a> + ?Sized,
{ {
} }
#[inline] #[inline]
pub fn walk_cmp_op<'a, V>(_visitor: &mut V, _cmp_op: &'a CmpOp) pub fn walk_cmp_op<'a, V>(_visitor: &mut V, _cmp_op: &'a CmpOp)
where where
V: PreorderVisitor<'a> + ?Sized, V: SourceOrderVisitor<'a> + ?Sized,
{ {
} }
#[inline] #[inline]
pub fn walk_f_string<'a, V>(visitor: &mut V, f_string: &'a FString) pub fn walk_f_string<'a, V>(visitor: &mut V, f_string: &'a FString)
where where
V: PreorderVisitor<'a> + ?Sized, V: SourceOrderVisitor<'a> + ?Sized,
{ {
let node = AnyNodeRef::from(f_string); let node = AnyNodeRef::from(f_string);
if visitor.enter_node(node).is_traverse() { if visitor.enter_node(node).is_traverse() {
f_string.visit_preorder(visitor); f_string.visit_source_order(visitor);
} }
visitor.leave_node(node); visitor.leave_node(node);
} }
@ -573,11 +578,11 @@ where
#[inline] #[inline]
pub fn walk_string_literal<'a, V>(visitor: &mut V, string_literal: &'a StringLiteral) pub fn walk_string_literal<'a, V>(visitor: &mut V, string_literal: &'a StringLiteral)
where where
V: PreorderVisitor<'a> + ?Sized, V: SourceOrderVisitor<'a> + ?Sized,
{ {
let node = AnyNodeRef::from(string_literal); let node = AnyNodeRef::from(string_literal);
if visitor.enter_node(node).is_traverse() { if visitor.enter_node(node).is_traverse() {
string_literal.visit_preorder(visitor); string_literal.visit_source_order(visitor);
} }
visitor.leave_node(node); visitor.leave_node(node);
} }
@ -585,11 +590,11 @@ where
#[inline] #[inline]
pub fn walk_bytes_literal<'a, V>(visitor: &mut V, bytes_literal: &'a BytesLiteral) pub fn walk_bytes_literal<'a, V>(visitor: &mut V, bytes_literal: &'a BytesLiteral)
where where
V: PreorderVisitor<'a> + ?Sized, V: SourceOrderVisitor<'a> + ?Sized,
{ {
let node = AnyNodeRef::from(bytes_literal); let node = AnyNodeRef::from(bytes_literal);
if visitor.enter_node(node).is_traverse() { if visitor.enter_node(node).is_traverse() {
bytes_literal.visit_preorder(visitor); bytes_literal.visit_source_order(visitor);
} }
visitor.leave_node(node); visitor.leave_node(node);
} }
@ -597,11 +602,11 @@ where
#[inline] #[inline]
pub fn walk_alias<'a, V>(visitor: &mut V, alias: &'a Alias) pub fn walk_alias<'a, V>(visitor: &mut V, alias: &'a Alias)
where where
V: PreorderVisitor<'a> + ?Sized, V: SourceOrderVisitor<'a> + ?Sized,
{ {
let node = AnyNodeRef::from(alias); let node = AnyNodeRef::from(alias);
if visitor.enter_node(node).is_traverse() { if visitor.enter_node(node).is_traverse() {
alias.visit_preorder(visitor); alias.visit_source_order(visitor);
} }
visitor.leave_node(node); visitor.leave_node(node);
} }

View file

@ -2,7 +2,7 @@ use std::fmt::{Debug, Write};
use insta::assert_snapshot; use insta::assert_snapshot;
use ruff_python_ast::visitor::preorder::{PreorderVisitor, TraversalSignal}; use ruff_python_ast::visitor::source_order::{SourceOrderVisitor, TraversalSignal};
use ruff_python_ast::{AnyNodeRef, BoolOp, CmpOp, Operator, Singleton, UnaryOp}; use ruff_python_ast::{AnyNodeRef, BoolOp, CmpOp, Operator, Singleton, UnaryOp};
use ruff_python_parser::{parse, Mode}; use ruff_python_parser::{parse, Mode};
@ -10,7 +10,7 @@ use ruff_python_parser::{parse, Mode};
fn function_arguments() { fn function_arguments() {
let source = r"def a(b, c,/, d, e = 20, *args, named=5, other=20, **kwargs): pass"; let source = r"def a(b, c,/, d, e = 20, *args, named=5, other=20, **kwargs): pass";
let trace = trace_preorder_visitation(source); let trace = trace_source_order_visitation(source);
assert_snapshot!(trace); assert_snapshot!(trace);
} }
@ -19,7 +19,7 @@ fn function_arguments() {
fn function_positional_only_with_default() { fn function_positional_only_with_default() {
let source = r"def a(b, c = 34,/, e = 20, *args): pass"; let source = r"def a(b, c = 34,/, e = 20, *args): pass";
let trace = trace_preorder_visitation(source); let trace = trace_source_order_visitation(source);
assert_snapshot!(trace); assert_snapshot!(trace);
} }
@ -28,7 +28,7 @@ fn function_positional_only_with_default() {
fn compare() { fn compare() {
let source = r"4 < x < 5"; let source = r"4 < x < 5";
let trace = trace_preorder_visitation(source); let trace = trace_source_order_visitation(source);
assert_snapshot!(trace); assert_snapshot!(trace);
} }
@ -37,7 +37,7 @@ fn compare() {
fn list_comprehension() { fn list_comprehension() {
let source = "[x for x in numbers]"; let source = "[x for x in numbers]";
let trace = trace_preorder_visitation(source); let trace = trace_source_order_visitation(source);
assert_snapshot!(trace); assert_snapshot!(trace);
} }
@ -46,7 +46,7 @@ fn list_comprehension() {
fn dict_comprehension() { fn dict_comprehension() {
let source = "{x: x**2 for x in numbers}"; let source = "{x: x**2 for x in numbers}";
let trace = trace_preorder_visitation(source); let trace = trace_source_order_visitation(source);
assert_snapshot!(trace); assert_snapshot!(trace);
} }
@ -55,7 +55,7 @@ fn dict_comprehension() {
fn set_comprehension() { fn set_comprehension() {
let source = "{x for x in numbers}"; let source = "{x for x in numbers}";
let trace = trace_preorder_visitation(source); let trace = trace_source_order_visitation(source);
assert_snapshot!(trace); assert_snapshot!(trace);
} }
@ -70,7 +70,7 @@ match x:
... ...
"; ";
let trace = trace_preorder_visitation(source); let trace = trace_source_order_visitation(source);
assert_snapshot!(trace); assert_snapshot!(trace);
} }
@ -87,7 +87,7 @@ class A:
pass pass
"; ";
let trace = trace_preorder_visitation(source); let trace = trace_source_order_visitation(source);
assert_snapshot!(trace); assert_snapshot!(trace);
} }
@ -96,7 +96,7 @@ class A:
fn type_aliases() { fn type_aliases() {
let source = r"type X[T: str, U, *Ts, **P] = list[T]"; let source = r"type X[T: str, U, *Ts, **P] = list[T]";
let trace = trace_preorder_visitation(source); let trace = trace_source_order_visitation(source);
assert_snapshot!(trace); assert_snapshot!(trace);
} }
@ -105,7 +105,7 @@ fn type_aliases() {
fn class_type_parameters() { fn class_type_parameters() {
let source = r"class X[T: str, U, *Ts, **P]: ..."; let source = r"class X[T: str, U, *Ts, **P]: ...";
let trace = trace_preorder_visitation(source); let trace = trace_source_order_visitation(source);
assert_snapshot!(trace); assert_snapshot!(trace);
} }
@ -114,7 +114,7 @@ fn class_type_parameters() {
fn function_type_parameters() { fn function_type_parameters() {
let source = r"def X[T: str, U, *Ts, **P](): ..."; let source = r"def X[T: str, U, *Ts, **P](): ...";
let trace = trace_preorder_visitation(source); let trace = trace_source_order_visitation(source);
assert_snapshot!(trace); assert_snapshot!(trace);
} }
@ -123,7 +123,7 @@ fn function_type_parameters() {
fn string_literals() { fn string_literals() {
let source = r"'a' 'b' 'c'"; let source = r"'a' 'b' 'c'";
let trace = trace_preorder_visitation(source); let trace = trace_source_order_visitation(source);
assert_snapshot!(trace); assert_snapshot!(trace);
} }
@ -132,7 +132,7 @@ fn string_literals() {
fn bytes_literals() { fn bytes_literals() {
let source = r"b'a' b'b' b'c'"; let source = r"b'a' b'b' b'c'";
let trace = trace_preorder_visitation(source); let trace = trace_source_order_visitation(source);
assert_snapshot!(trace); assert_snapshot!(trace);
} }
@ -141,12 +141,12 @@ fn bytes_literals() {
fn f_strings() { fn f_strings() {
let source = r"'pre' f'foo {bar:.{x}f} baz'"; let source = r"'pre' f'foo {bar:.{x}f} baz'";
let trace = trace_preorder_visitation(source); let trace = trace_source_order_visitation(source);
assert_snapshot!(trace); assert_snapshot!(trace);
} }
fn trace_preorder_visitation(source: &str) -> String { fn trace_source_order_visitation(source: &str) -> String {
let parsed = parse(source, Mode::Module).unwrap(); let parsed = parse(source, Mode::Module).unwrap();
let mut visitor = RecordVisitor::default(); let mut visitor = RecordVisitor::default();
@ -173,7 +173,7 @@ impl RecordVisitor {
} }
} }
impl<'a> PreorderVisitor<'a> for RecordVisitor { impl<'a> SourceOrderVisitor<'a> for RecordVisitor {
fn enter_node(&mut self, node: AnyNodeRef<'a>) -> TraversalSignal { fn enter_node(&mut self, node: AnyNodeRef<'a>) -> TraversalSignal {
self.emit(&node.kind()); self.emit(&node.kind());
self.depth += 1; self.depth += 1;

View file

@ -406,11 +406,11 @@ impl<'a> Comments<'a> {
/// normally if `node` is the first or last node of a suppression range. /// normally if `node` is the first or last node of a suppression range.
#[cfg(debug_assertions)] #[cfg(debug_assertions)]
pub(crate) fn mark_verbatim_node_comments_formatted(&self, node: AnyNodeRef) { pub(crate) fn mark_verbatim_node_comments_formatted(&self, node: AnyNodeRef) {
use ruff_python_ast::visitor::preorder::{PreorderVisitor, TraversalSignal}; use ruff_python_ast::visitor::source_order::{SourceOrderVisitor, TraversalSignal};
struct MarkVerbatimCommentsAsFormattedVisitor<'a>(&'a Comments<'a>); struct MarkVerbatimCommentsAsFormattedVisitor<'a>(&'a Comments<'a>);
impl<'a> PreorderVisitor<'a> for MarkVerbatimCommentsAsFormattedVisitor<'a> { impl<'a> SourceOrderVisitor<'a> for MarkVerbatimCommentsAsFormattedVisitor<'a> {
fn enter_node(&mut self, node: AnyNodeRef<'a>) -> TraversalSignal { fn enter_node(&mut self, node: AnyNodeRef<'a>) -> TraversalSignal {
for comment in self.0.leading_dangling_trailing(node) { for comment in self.0.leading_dangling_trailing(node) {
comment.mark_formatted(); comment.mark_formatted();

View file

@ -7,7 +7,7 @@ use ruff_python_ast::{Mod, Stmt};
// The interface is designed to only export the members relevant for iterating nodes in // The interface is designed to only export the members relevant for iterating nodes in
// pre-order. // pre-order.
#[allow(clippy::wildcard_imports)] #[allow(clippy::wildcard_imports)]
use ruff_python_ast::visitor::preorder::*; use ruff_python_ast::visitor::source_order::*;
use ruff_python_trivia::{CommentLinePosition, CommentRanges}; use ruff_python_trivia::{CommentLinePosition, CommentRanges};
use ruff_source_file::Locator; use ruff_source_file::Locator;
use ruff_text_size::{Ranged, TextRange, TextSize}; use ruff_text_size::{Ranged, TextRange, TextSize};
@ -70,7 +70,7 @@ impl<'a, 'builder> CommentsVisitor<'a, 'builder> {
} }
} }
impl<'ast> PreorderVisitor<'ast> for CommentsVisitor<'ast, '_> { impl<'ast> SourceOrderVisitor<'ast> for CommentsVisitor<'ast, '_> {
fn enter_node(&mut self, node: AnyNodeRef<'ast>) -> TraversalSignal { fn enter_node(&mut self, node: AnyNodeRef<'ast>) -> TraversalSignal {
let node_range = node.range(); let node_range = node.range();

View file

@ -6,7 +6,7 @@ use ruff_formatter::{
}; };
use ruff_python_ast as ast; use ruff_python_ast as ast;
use ruff_python_ast::parenthesize::parentheses_iterator; use ruff_python_ast::parenthesize::parentheses_iterator;
use ruff_python_ast::visitor::preorder::{walk_expr, PreorderVisitor}; use ruff_python_ast::visitor::source_order::{walk_expr, SourceOrderVisitor};
use ruff_python_ast::{AnyNodeRef, Expr, ExpressionRef, Operator}; use ruff_python_ast::{AnyNodeRef, Expr, ExpressionRef, Operator};
use ruff_python_trivia::CommentRanges; use ruff_python_trivia::CommentRanges;
use ruff_text_size::Ranged; use ruff_text_size::Ranged;
@ -806,7 +806,7 @@ impl<'input> CanOmitOptionalParenthesesVisitor<'input> {
} }
} }
impl<'input> PreorderVisitor<'input> for CanOmitOptionalParenthesesVisitor<'input> { impl<'input> SourceOrderVisitor<'input> for CanOmitOptionalParenthesesVisitor<'input> {
fn visit_expr(&mut self, expr: &'input Expr) { fn visit_expr(&mut self, expr: &'input Expr) {
self.last = Some(expr); self.last = Some(expr);

View file

@ -4,7 +4,7 @@ use ruff_formatter::printer::SourceMapGeneration;
use ruff_formatter::{ use ruff_formatter::{
format, FormatContext, FormatError, FormatOptions, IndentStyle, PrintedRange, SourceCode, format, FormatContext, FormatError, FormatOptions, IndentStyle, PrintedRange, SourceCode,
}; };
use ruff_python_ast::visitor::preorder::{walk_body, PreorderVisitor, TraversalSignal}; use ruff_python_ast::visitor::source_order::{walk_body, SourceOrderVisitor, TraversalSignal};
use ruff_python_ast::{AnyNodeRef, Stmt, StmtMatch, StmtTry}; use ruff_python_ast::{AnyNodeRef, Stmt, StmtMatch, StmtTry};
use ruff_python_parser::{parse, AsMode}; use ruff_python_parser::{parse, AsMode};
use ruff_python_trivia::{indentation_at_offset, BackwardsTokenizer, SimpleToken, SimpleTokenKind}; use ruff_python_trivia::{indentation_at_offset, BackwardsTokenizer, SimpleToken, SimpleTokenKind};
@ -181,7 +181,7 @@ impl<'a, 'ast> FindEnclosingNode<'a, 'ast> {
} }
} }
impl<'ast> PreorderVisitor<'ast> for FindEnclosingNode<'_, 'ast> { impl<'ast> SourceOrderVisitor<'ast> for FindEnclosingNode<'_, 'ast> {
fn enter_node(&mut self, node: AnyNodeRef<'ast>) -> TraversalSignal { fn enter_node(&mut self, node: AnyNodeRef<'ast>) -> TraversalSignal {
if !(is_logical_line(node) || node.is_mod_module()) { if !(is_logical_line(node) || node.is_mod_module()) {
return TraversalSignal::Skip; return TraversalSignal::Skip;
@ -336,7 +336,7 @@ struct NarrowRange<'a> {
level: usize, level: usize,
} }
impl PreorderVisitor<'_> for NarrowRange<'_> { impl SourceOrderVisitor<'_> for NarrowRange<'_> {
fn enter_node(&mut self, node: AnyNodeRef<'_>) -> TraversalSignal { fn enter_node(&mut self, node: AnyNodeRef<'_>) -> TraversalSignal {
if !(is_logical_line(node) || node.is_mod_module()) { if !(is_logical_line(node) || node.is_mod_module()) {
return TraversalSignal::Skip; return TraversalSignal::Skip;

View file

@ -6,7 +6,7 @@ use std::path::Path;
use annotate_snippets::display_list::{DisplayList, FormatOptions}; use annotate_snippets::display_list::{DisplayList, FormatOptions};
use annotate_snippets::snippet::{AnnotationType, Slice, Snippet, SourceAnnotation}; use annotate_snippets::snippet::{AnnotationType, Slice, Snippet, SourceAnnotation};
use ruff_python_ast::visitor::preorder::{walk_module, PreorderVisitor, TraversalSignal}; use ruff_python_ast::visitor::source_order::{walk_module, SourceOrderVisitor, TraversalSignal};
use ruff_python_ast::{AnyNodeRef, Mod}; use ruff_python_ast::{AnyNodeRef, Mod};
use ruff_python_parser::{parse_unchecked, Mode, ParseErrorType}; use ruff_python_parser::{parse_unchecked, Mode, ParseErrorType};
use ruff_source_file::{LineIndex, OneIndexed, SourceCode}; use ruff_source_file::{LineIndex, OneIndexed, SourceCode};
@ -258,7 +258,7 @@ impl<'a> ValidateAstVisitor<'a> {
} }
} }
impl<'ast> PreorderVisitor<'ast> for ValidateAstVisitor<'ast> { impl<'ast> SourceOrderVisitor<'ast> for ValidateAstVisitor<'ast> {
fn enter_node(&mut self, node: AnyNodeRef<'ast>) -> TraversalSignal { fn enter_node(&mut self, node: AnyNodeRef<'ast>) -> TraversalSignal {
assert!( assert!(
node.end() <= self.source_length, node.end() <= self.source_length,