Skip to content

Commit

Permalink
refactor(semantic): rename SemanticBuilder::current_reference_flags
Browse files Browse the repository at this point in the history
… field (#5027)

Part of #4991.
  • Loading branch information
overlookmotel committed Aug 21, 2024
1 parent 0bacdd8 commit 3b7de18
Showing 1 changed file with 30 additions and 30 deletions.
60 changes: 30 additions & 30 deletions crates/oxc_semantic/src/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ pub struct SemanticBuilder<'a> {
// and when we reach a value declaration we set it
// to value like
pub(crate) namespace_stack: Vec<SymbolId>,
current_reference_flag: ReferenceFlags,
current_reference_flags: ReferenceFlags,
pub(crate) hoisting_variables: FxHashMap<ScopeId, FxHashMap<Atom<'a>, SymbolId>>,

// builders
Expand Down Expand Up @@ -131,7 +131,7 @@ impl<'a> SemanticBuilder<'a> {
current_node_id: AstNodeId::new(0),
current_node_flags: NodeFlags::empty(),
current_symbol_flags: SymbolFlags::empty(),
current_reference_flag: ReferenceFlags::empty(),
current_reference_flags: ReferenceFlags::empty(),
current_scope_id,
function_stack: vec![],
namespace_stack: vec![],
Expand Down Expand Up @@ -1743,14 +1743,14 @@ impl<'a> SemanticBuilder<'a> {
AstKind::ExportNamedDeclaration(decl) => {
self.current_symbol_flags |= SymbolFlags::Export;
if decl.export_kind.is_type() {
self.current_reference_flag = ReferenceFlags::Type;
self.current_reference_flags = ReferenceFlags::Type;
}
}
AstKind::ExportSpecifier(s) => {
if self.current_reference_flag.is_type() || s.export_kind.is_type() {
self.current_reference_flag = ReferenceFlags::Type;
if self.current_reference_flags.is_type() || s.export_kind.is_type() {
self.current_reference_flags = ReferenceFlags::Type;
} else {
self.current_reference_flag = ReferenceFlags::Read | ReferenceFlags::Type;
self.current_reference_flags = ReferenceFlags::Read | ReferenceFlags::Type;
}
}
AstKind::ImportSpecifier(specifier) => {
Expand Down Expand Up @@ -1839,17 +1839,17 @@ impl<'a> SemanticBuilder<'a> {
type_parameter.bind(self);
}
AstKind::TSInterfaceHeritage(_) => {
self.current_reference_flag = ReferenceFlags::Type;
self.current_reference_flags = ReferenceFlags::Type;
}
AstKind::TSTypeQuery(_) => {
// type A = typeof a;
// ^^^^^^^^
self.current_reference_flag = ReferenceFlags::Read | ReferenceFlags::TSTypeQuery;
self.current_reference_flags = ReferenceFlags::Read | ReferenceFlags::TSTypeQuery;
}
AstKind::TSTypeParameterInstantiation(_) => {
// type A<T> = typeof a<T>;
// ^^^ avoid treat T as a value and TSTypeQuery
self.current_reference_flag -= ReferenceFlags::Read | ReferenceFlags::TSTypeQuery;
self.current_reference_flags -= ReferenceFlags::Read | ReferenceFlags::TSTypeQuery;
}
AstKind::TSTypeName(_) => {
match self.nodes.parent_kind(self.current_node_id) {
Expand All @@ -1858,15 +1858,15 @@ impl<'a> SemanticBuilder<'a> {
// ^
AstKind::TSModuleReference(_),
) => {
self.current_reference_flag = ReferenceFlags::Read;
self.current_reference_flags = ReferenceFlags::Read;
}
Some(AstKind::TSQualifiedName(_)) => {
// import A = a.b
// ^^^ Keep the current reference flag
}
_ => {
if !self.current_reference_flag.is_ts_type_query() {
self.current_reference_flag = ReferenceFlags::Type;
if !self.current_reference_flags.is_ts_type_query() {
self.current_reference_flags = ReferenceFlags::Type;
}
}
}
Expand All @@ -1875,7 +1875,7 @@ impl<'a> SemanticBuilder<'a> {
// export = a;
// ^ can reference value or type
if export.expression.is_identifier_reference() {
self.current_reference_flag = ReferenceFlags::Read | ReferenceFlags::Type;
self.current_reference_flags = ReferenceFlags::Read | ReferenceFlags::Type;
}
}
AstKind::IdentifierReference(ident) => {
Expand All @@ -1885,27 +1885,27 @@ impl<'a> SemanticBuilder<'a> {
self.reference_jsx_identifier(ident);
}
AstKind::UpdateExpression(_) => {
if !self.current_reference_flag.is_type()
if !self.current_reference_flags.is_type()
&& self.is_not_expression_statement_parent()
{
self.current_reference_flag |= ReferenceFlags::Read;
self.current_reference_flags |= ReferenceFlags::Read;
}
self.current_reference_flag |= ReferenceFlags::Write;
self.current_reference_flags |= ReferenceFlags::Write;
}
AstKind::AssignmentExpression(expr) => {
if expr.operator != AssignmentOperator::Assign
|| self.is_not_expression_statement_parent()
{
self.current_reference_flag |= ReferenceFlags::Read;
self.current_reference_flags |= ReferenceFlags::Read;
}
}
AstKind::MemberExpression(_) => {
if !self.current_reference_flag.is_type() {
self.current_reference_flag = ReferenceFlags::Read;
if !self.current_reference_flags.is_type() {
self.current_reference_flags = ReferenceFlags::Read;
}
}
AstKind::AssignmentTarget(_) => {
self.current_reference_flag |= ReferenceFlags::Write;
self.current_reference_flags |= ReferenceFlags::Write;
}
AstKind::LabeledStatement(stmt) => {
self.label_builder.enter(stmt, self.current_node_id);
Expand Down Expand Up @@ -1937,8 +1937,8 @@ impl<'a> SemanticBuilder<'a> {
self.current_symbol_flags -= SymbolFlags::Export;
}
AstKind::ExportSpecifier(_) => {
if !self.current_reference_flag.is_type_only() {
self.current_reference_flag = ReferenceFlags::empty();
if !self.current_reference_flags.is_type_only() {
self.current_reference_flags = ReferenceFlags::empty();
}
}
AstKind::LabeledStatement(_) => self.label_builder.leave(),
Expand Down Expand Up @@ -1968,27 +1968,27 @@ impl<'a> SemanticBuilder<'a> {
self.namespace_stack.pop();
}
AstKind::TSTypeName(_) => {
self.current_reference_flag -= ReferenceFlags::Type;
self.current_reference_flags -= ReferenceFlags::Type;
}
AstKind::UpdateExpression(_) => {
if self.is_not_expression_statement_parent() {
self.current_reference_flag -= ReferenceFlags::Read;
self.current_reference_flags -= ReferenceFlags::Read;
}
self.current_reference_flag -= ReferenceFlags::Write;
self.current_reference_flags -= ReferenceFlags::Write;
}
AstKind::AssignmentExpression(expr) => {
if expr.operator != AssignmentOperator::Assign
|| self.is_not_expression_statement_parent()
{
self.current_reference_flag -= ReferenceFlags::Read;
self.current_reference_flags -= ReferenceFlags::Read;
}
}
AstKind::MemberExpression(_)
| AstKind::TSTypeQuery(_)
| AstKind::ExportNamedDeclaration(_) => {
self.current_reference_flag = ReferenceFlags::empty();
self.current_reference_flags = ReferenceFlags::empty();
}
AstKind::AssignmentTarget(_) => self.current_reference_flag -= ReferenceFlags::Write,
AstKind::AssignmentTarget(_) => self.current_reference_flags -= ReferenceFlags::Write,
_ => {}
}
}
Expand All @@ -2012,10 +2012,10 @@ impl<'a> SemanticBuilder<'a> {

/// Resolve reference flags for the current ast node.
fn resolve_reference_usages(&self) -> ReferenceFlags {
if self.current_reference_flag.is_empty() {
if self.current_reference_flags.is_empty() {
ReferenceFlags::Read
} else {
self.current_reference_flag
self.current_reference_flags
}
}

Expand Down

0 comments on commit 3b7de18

Please sign in to comment.