From 745699eedfbdf9c7cea023ac9d951d2ee317d6b4 Mon Sep 17 00:00:00 2001 From: SpontanCombust <61706594+SpontanCombust@users.noreply.github.com> Date: Thu, 22 Aug 2024 23:49:28 +0200 Subject: [PATCH] Fixed return statements traversal + added unnamed node traversal in compound statement --- crates/analysis/src/jobs/scan_symbols.rs | 1 + .../src/jobs/syntax_analysis/contextual_analysis.rs | 1 + .../src/jobs/syntax_analysis/syntax_error_visitor.rs | 1 + crates/core/src/ast/misc_stmts.rs | 11 +++++++---- crates/core/src/ast/traversal/policies.rs | 1 + 5 files changed, 11 insertions(+), 4 deletions(-) diff --git a/crates/analysis/src/jobs/scan_symbols.rs b/crates/analysis/src/jobs/scan_symbols.rs index cb644c0..94e36b6 100644 --- a/crates/analysis/src/jobs/scan_symbols.rs +++ b/crates/analysis/src/jobs/scan_symbols.rs @@ -804,6 +804,7 @@ impl SyntaxNodeVisitor for SymbolScannerVisitor<'_> { fn visit_compound_stmt(&mut self, _: &CompoundStatementNode, _: &TraversalContextStack) -> CompoundStatementTraversalPolicy { CompoundStatementTraversalPolicy { traverse_statements: true, + traverse_unnamed: false, traverse_errors: false } } diff --git a/crates/analysis/src/jobs/syntax_analysis/contextual_analysis.rs b/crates/analysis/src/jobs/syntax_analysis/contextual_analysis.rs index 61ddeb2..74b6688 100644 --- a/crates/analysis/src/jobs/syntax_analysis/contextual_analysis.rs +++ b/crates/analysis/src/jobs/syntax_analysis/contextual_analysis.rs @@ -545,6 +545,7 @@ impl SyntaxNodeVisitor for ContextualSyntaxAnalysis<'_> { CompoundStatementTraversalPolicy { traverse_statements: true, + traverse_unnamed: false, traverse_errors: false } } diff --git a/crates/analysis/src/jobs/syntax_analysis/syntax_error_visitor.rs b/crates/analysis/src/jobs/syntax_analysis/syntax_error_visitor.rs index 004fcfa..ce12abe 100644 --- a/crates/analysis/src/jobs/syntax_analysis/syntax_error_visitor.rs +++ b/crates/analysis/src/jobs/syntax_analysis/syntax_error_visitor.rs @@ -433,6 +433,7 @@ impl SyntaxNodeVisitor for SyntaxErrorVisitor<'_> { CompoundStatementTraversalPolicy { traverse_statements: any_error, + traverse_unnamed: any_error, traverse_errors: any_error } } diff --git a/crates/core/src/ast/misc_stmts.rs b/crates/core/src/ast/misc_stmts.rs index 926f63c..eadc291 100644 --- a/crates/core/src/ast/misc_stmts.rs +++ b/crates/core/src/ast/misc_stmts.rs @@ -154,7 +154,7 @@ impl SyntaxNodeTraversal for ReturnStatementNode<'_> { for ch in self.children_detailed() { match ch { - Ok((value, _)) if tp.traverse_value => { + Ok((value, _)) if value.is_named() && tp.traverse_value => { let value: ExpressionNode = value.unsafe_into(); value.accept(visitor, ctx); }, @@ -283,13 +283,16 @@ impl SyntaxNodeTraversal for CompoundStatementNode<'_> { if tp.any() { ctx.push(TraversalContext::CompoundStatement); - for ch in self.children_detailed().must_be_named(true) { + for ch in self.children_detailed() { match ch { - Ok((stmt, _)) if tp.traverse_statements => { + Ok((stmt, _)) if stmt.is_named() && tp.traverse_statements => { let stmt: FunctionStatementNode = stmt.unsafe_into(); - stmt.accept(visitor, ctx); }, + Ok((unnamed, _)) if !unnamed.is_named() && tp.traverse_unnamed => { + let unnamed: UnnamedNode = unnamed.unsafe_into(); + unnamed.accept(visitor, ctx); + }, Err(e) if tp.traverse_errors => { e.accept(visitor, ctx); }, diff --git a/crates/core/src/ast/traversal/policies.rs b/crates/core/src/ast/traversal/policies.rs index 05e02f9..9c05b46 100644 --- a/crates/core/src/ast/traversal/policies.rs +++ b/crates/core/src/ast/traversal/policies.rs @@ -270,6 +270,7 @@ traversal_policy!(ContinueStatementTraversalPolicy, traversal_policy!(CompoundStatementTraversalPolicy, traverse_statements, + traverse_unnamed, traverse_errors );