Skip to content

Commit 91ac3f2

Browse files
committed
refactor(ast): pass final ScopeFlags into visit_function
1 parent df6fbba commit 91ac3f2

11 files changed

Lines changed: 44 additions & 48 deletions

File tree

crates/oxc_ast/src/ast/js.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ pub enum Expression<'a> {
7979
ChainExpression(Box<'a, ChainExpression<'a>>) = 16,
8080
ClassExpression(Box<'a, Class<'a>>) = 17,
8181
ConditionalExpression(Box<'a, ConditionalExpression<'a>>) = 18,
82-
#[visit_args(flags = None)]
82+
#[visit_args(flags = ScopeFlags::Function)]
8383
FunctionExpression(Box<'a, Function<'a>>) = 19,
8484
ImportExpression(Box<'a, ImportExpression<'a>>) = 20,
8585
LogicalExpression(Box<'a, LogicalExpression<'a>>) = 21,
@@ -970,7 +970,7 @@ pub struct BlockStatement<'a> {
970970
#[cfg_attr(feature = "serialize", serde(untagged))]
971971
pub enum Declaration<'a> {
972972
VariableDeclaration(Box<'a, VariableDeclaration<'a>>) = 32,
973-
#[visit_args(flags = None)]
973+
#[visit_args(flags = ScopeFlags::Function)]
974974
FunctionDeclaration(Box<'a, Function<'a>>) = 33,
975975
ClassDeclaration(Box<'a, Class<'a>>) = 34,
976976
UsingDeclaration(Box<'a, UsingDeclaration<'a>>) = 35,
@@ -1437,8 +1437,8 @@ pub struct BindingRestElement<'a> {
14371437
/// Function Definitions
14381438
#[visited_node]
14391439
#[scope(
1440-
// TODO: `ScopeFlags::Function` is not correct if this is a `MethodDefinition`
1441-
flags(flags.unwrap_or(ScopeFlags::empty()) | ScopeFlags::Function),
1440+
// `flags` passed in to visitor via parameter defined by `#[visit_args(flags = ...)]` on parents
1441+
flags(flags),
14421442
strict_if(self.is_strict()),
14431443
)]
14441444
#[derive(Debug)]
@@ -1642,12 +1642,12 @@ pub struct MethodDefinition<'a> {
16421642
pub span: Span,
16431643
pub decorators: Vec<'a, Decorator<'a>>,
16441644
pub key: PropertyKey<'a>,
1645-
#[visit_args(flags = Some(match self.kind {
1646-
MethodDefinitionKind::Get => ScopeFlags::GetAccessor,
1647-
MethodDefinitionKind::Set => ScopeFlags::SetAccessor,
1648-
MethodDefinitionKind::Constructor => ScopeFlags::Constructor,
1649-
MethodDefinitionKind::Method => ScopeFlags::empty(),
1650-
}))]
1645+
#[visit_args(flags = match self.kind {
1646+
MethodDefinitionKind::Get => ScopeFlags::Function | ScopeFlags::GetAccessor,
1647+
MethodDefinitionKind::Set => ScopeFlags::Function | ScopeFlags::SetAccessor,
1648+
MethodDefinitionKind::Constructor => ScopeFlags::Function | ScopeFlags::Constructor,
1649+
MethodDefinitionKind::Method => ScopeFlags::Function,
1650+
})]
16511651
pub value: Box<'a, Function<'a>>, // FunctionExpression
16521652
pub kind: MethodDefinitionKind,
16531653
pub computed: bool,
@@ -1959,7 +1959,7 @@ inherit_variants! {
19591959
#[cfg_attr(feature = "serialize", derive(Serialize, Tsify))]
19601960
#[cfg_attr(feature = "serialize", serde(untagged))]
19611961
pub enum ExportDefaultDeclarationKind<'a> {
1962-
#[visit_args(flags = None)]
1962+
#[visit_args(flags = ScopeFlags::Function)]
19631963
FunctionDeclaration(Box<'a, Function<'a>>) = 64,
19641964
ClassDeclaration(Box<'a, Class<'a>>) = 65,
19651965

crates/oxc_ast/src/generated/visit.rs

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -836,7 +836,7 @@ pub trait Visit<'a>: Sized {
836836
}
837837

838838
#[inline]
839-
fn visit_function(&mut self, it: &Function<'a>, flags: Option<ScopeFlags>) {
839+
fn visit_function(&mut self, it: &Function<'a>, flags: ScopeFlags) {
840840
walk_function(self, it, flags);
841841
}
842842

@@ -1509,7 +1509,7 @@ pub mod walk {
15091509
Expression::ClassExpression(it) => visitor.visit_class(it),
15101510
Expression::ConditionalExpression(it) => visitor.visit_conditional_expression(it),
15111511
Expression::FunctionExpression(it) => {
1512-
let flags = None;
1512+
let flags = ScopeFlags::Function;
15131513
visitor.visit_function(it, flags)
15141514
}
15151515
Expression::ImportExpression(it) => visitor.visit_import_expression(it),
@@ -3014,27 +3014,23 @@ pub mod walk {
30143014
visitor.visit_decorators(&it.decorators);
30153015
visitor.visit_property_key(&it.key);
30163016
{
3017-
let flags = Some(match it.kind {
3018-
MethodDefinitionKind::Get => ScopeFlags::GetAccessor,
3019-
MethodDefinitionKind::Set => ScopeFlags::SetAccessor,
3020-
MethodDefinitionKind::Constructor => ScopeFlags::Constructor,
3021-
MethodDefinitionKind::Method => ScopeFlags::empty(),
3022-
});
3017+
let flags = match it.kind {
3018+
MethodDefinitionKind::Get => ScopeFlags::Function | ScopeFlags::GetAccessor,
3019+
MethodDefinitionKind::Set => ScopeFlags::Function | ScopeFlags::SetAccessor,
3020+
MethodDefinitionKind::Constructor => ScopeFlags::Function | ScopeFlags::Constructor,
3021+
MethodDefinitionKind::Method => ScopeFlags::Function,
3022+
};
30233023
visitor.visit_function(&it.value, flags);
30243024
}
30253025
visitor.leave_node(kind);
30263026
}
30273027

3028-
pub fn walk_function<'a, V: Visit<'a>>(
3029-
visitor: &mut V,
3030-
it: &Function<'a>,
3031-
flags: Option<ScopeFlags>,
3032-
) {
3028+
pub fn walk_function<'a, V: Visit<'a>>(visitor: &mut V, it: &Function<'a>, flags: ScopeFlags) {
30333029
let kind = AstKind::Function(visitor.alloc(it));
30343030
visitor.enter_node(kind);
30353031
visitor.enter_scope(
30363032
{
3037-
let mut flags = flags.unwrap_or(ScopeFlags::empty()) | ScopeFlags::Function;
3033+
let mut flags = flags;
30383034
if it.is_strict() {
30393035
flags |= ScopeFlags::StrictMode;
30403036
}
@@ -3738,7 +3734,7 @@ pub mod walk {
37383734
match it {
37393735
Declaration::VariableDeclaration(it) => visitor.visit_variable_declaration(it),
37403736
Declaration::FunctionDeclaration(it) => {
3741-
let flags = None;
3737+
let flags = ScopeFlags::Function;
37423738
visitor.visit_function(it, flags)
37433739
}
37443740
Declaration::ClassDeclaration(it) => visitor.visit_class(it),
@@ -4119,7 +4115,7 @@ pub mod walk {
41194115
) {
41204116
match it {
41214117
ExportDefaultDeclarationKind::FunctionDeclaration(it) => {
4122-
let flags = None;
4118+
let flags = ScopeFlags::Function;
41234119
visitor.visit_function(it, flags)
41244120
}
41254121
ExportDefaultDeclarationKind::ClassDeclaration(it) => visitor.visit_class(it),

crates/oxc_ast/src/generated/visit_mut.rs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -831,7 +831,7 @@ pub trait VisitMut<'a>: Sized {
831831
}
832832

833833
#[inline]
834-
fn visit_function(&mut self, it: &mut Function<'a>, flags: Option<ScopeFlags>) {
834+
fn visit_function(&mut self, it: &mut Function<'a>, flags: ScopeFlags) {
835835
walk_function(self, it, flags);
836836
}
837837

@@ -1516,7 +1516,7 @@ pub mod walk_mut {
15161516
Expression::ClassExpression(it) => visitor.visit_class(it),
15171517
Expression::ConditionalExpression(it) => visitor.visit_conditional_expression(it),
15181518
Expression::FunctionExpression(it) => {
1519-
let flags = None;
1519+
let flags = ScopeFlags::Function;
15201520
visitor.visit_function(it, flags)
15211521
}
15221522
Expression::ImportExpression(it) => visitor.visit_import_expression(it),
@@ -3150,12 +3150,12 @@ pub mod walk_mut {
31503150
visitor.visit_decorators(&mut it.decorators);
31513151
visitor.visit_property_key(&mut it.key);
31523152
{
3153-
let flags = Some(match it.kind {
3154-
MethodDefinitionKind::Get => ScopeFlags::GetAccessor,
3155-
MethodDefinitionKind::Set => ScopeFlags::SetAccessor,
3156-
MethodDefinitionKind::Constructor => ScopeFlags::Constructor,
3157-
MethodDefinitionKind::Method => ScopeFlags::empty(),
3158-
});
3153+
let flags = match it.kind {
3154+
MethodDefinitionKind::Get => ScopeFlags::Function | ScopeFlags::GetAccessor,
3155+
MethodDefinitionKind::Set => ScopeFlags::Function | ScopeFlags::SetAccessor,
3156+
MethodDefinitionKind::Constructor => ScopeFlags::Function | ScopeFlags::Constructor,
3157+
MethodDefinitionKind::Method => ScopeFlags::Function,
3158+
};
31593159
visitor.visit_function(&mut it.value, flags);
31603160
}
31613161
visitor.leave_node(kind);
@@ -3164,13 +3164,13 @@ pub mod walk_mut {
31643164
pub fn walk_function<'a, V: VisitMut<'a>>(
31653165
visitor: &mut V,
31663166
it: &mut Function<'a>,
3167-
flags: Option<ScopeFlags>,
3167+
flags: ScopeFlags,
31683168
) {
31693169
let kind = AstType::Function;
31703170
visitor.enter_node(kind);
31713171
visitor.enter_scope(
31723172
{
3173-
let mut flags = flags.unwrap_or(ScopeFlags::empty()) | ScopeFlags::Function;
3173+
let mut flags = flags;
31743174
if it.is_strict() {
31753175
flags |= ScopeFlags::StrictMode;
31763176
}
@@ -3946,7 +3946,7 @@ pub mod walk_mut {
39463946
match it {
39473947
Declaration::VariableDeclaration(it) => visitor.visit_variable_declaration(it),
39483948
Declaration::FunctionDeclaration(it) => {
3949-
let flags = None;
3949+
let flags = ScopeFlags::Function;
39503950
visitor.visit_function(it, flags)
39513951
}
39523952
Declaration::ClassDeclaration(it) => visitor.visit_class(it),
@@ -4357,7 +4357,7 @@ pub mod walk_mut {
43574357
) {
43584358
match it {
43594359
ExportDefaultDeclarationKind::FunctionDeclaration(it) => {
4360-
let flags = None;
4360+
let flags = ScopeFlags::Function;
43614361
visitor.visit_function(it, flags)
43624362
}
43634363
ExportDefaultDeclarationKind::ClassDeclaration(it) => visitor.visit_class(it),

crates/oxc_isolated_declarations/src/return_type.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ impl<'a> Visit<'a> for FunctionReturnType<'a> {
136136
}
137137
}
138138

139-
fn visit_function(&mut self, _func: &Function<'a>, _flags: Option<ScopeFlags>) {
139+
fn visit_function(&mut self, _func: &Function<'a>, _flags: ScopeFlags) {
140140
// We don't care about nested functions
141141
}
142142

crates/oxc_isolated_declarations/src/scope.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ impl<'a> Visit<'a> for ScopeTree<'a> {
231231
}
232232
}
233233

234-
fn visit_function(&mut self, func: &Function<'a>, flags: Option<ScopeFlags>) {
234+
fn visit_function(&mut self, func: &Function<'a>, flags: ScopeFlags) {
235235
walk_function(self, func, flags);
236236
if func.type_parameters.is_some() {
237237
self.leave_scope();

crates/oxc_linter/src/rules/eslint/require_await.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ impl<'a> Visit<'a> for AwaitFinder {
105105

106106
fn visit_arrow_function_expression(&mut self, _expr: &ArrowFunctionExpression<'a>) {}
107107

108-
fn visit_function(&mut self, _func: &Function<'a>, _flags: Option<ScopeFlags>) {}
108+
fn visit_function(&mut self, _func: &Function<'a>, _flags: ScopeFlags) {}
109109
}
110110

111111
#[test]

crates/oxc_minifier/src/ast_passes/remove_dead_code.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ impl<'a> Visit<'a> for KeepVar<'a> {
151151
}
152152
}
153153

154-
fn visit_function(&mut self, _it: &Function<'a>, _flags: Option<ScopeFlags>) {
154+
fn visit_function(&mut self, _it: &Function<'a>, _flags: ScopeFlags) {
155155
/* skip functions */
156156
}
157157

crates/oxc_parser/examples/visitor.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ struct CountASTNodes {
4646
}
4747

4848
impl<'a> Visit<'a> for CountASTNodes {
49-
fn visit_function(&mut self, func: &Function<'a>, flags: Option<ScopeFlags>) {
49+
fn visit_function(&mut self, func: &Function<'a>, flags: ScopeFlags) {
5050
self.functions += 1;
5151
walk::walk_function(self, func, flags);
5252
}

crates/oxc_semantic/src/builder.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1441,7 +1441,7 @@ impl<'a> Visit<'a> for SemanticBuilder<'a> {
14411441
self.leave_node(kind);
14421442
}
14431443

1444-
fn visit_function(&mut self, func: &Function<'a>, flags: Option<ScopeFlags>) {
1444+
fn visit_function(&mut self, func: &Function<'a>, flags: ScopeFlags) {
14451445
/* cfg */
14461446
let (before_function_graph_ix, error_harness, function_graph_ix) =
14471447
control_flow!(self, |cfg| {
@@ -1460,7 +1460,7 @@ impl<'a> Visit<'a> for SemanticBuilder<'a> {
14601460
self.enter_node(kind);
14611461
self.enter_scope(
14621462
{
1463-
let mut flags = flags.unwrap_or(ScopeFlags::empty()) | ScopeFlags::Function;
1463+
let mut flags = flags;
14641464
if func.is_strict() {
14651465
flags |= ScopeFlags::StrictMode;
14661466
}

crates/oxc_traverse/src/context/scoping.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -549,7 +549,7 @@ impl<'a> Visit<'a> for ChildScopeCollector {
549549
self.scope_ids.push(clause.scope_id.get().unwrap());
550550
}
551551

552-
fn visit_function(&mut self, func: &Function<'a>, _flags: Option<ScopeFlags>) {
552+
fn visit_function(&mut self, func: &Function<'a>, _flags: ScopeFlags) {
553553
self.scope_ids.push(func.scope_id.get().unwrap());
554554
}
555555

0 commit comments

Comments
 (0)