pub fn hygiene_with_config(config: Config) -> impl 'static + Fold + VisitMut
Expand description

The pass actually modifies the identifiers in the way that different identifier (with respect to span hygiene) becomes different identifier. (e.g. a1 for a#6, a2 for a#23)

Implementation details

This document exists For curious people and potential contributors.

hygiene consists of four phases.

First phase

At first phase, we mark (using swc_common::Mark) nodes which can be considered as a scope. e.g. Function, BlockStmt, ArrowExpr

Second phase

At second phase, we analyzes the file and determine identifiers to rename.

Note that we store scoping information for each node, using the fact that [SyntaxContext] of all scope nodes are unique, thanks to the first phase.

Third phase

At third phase, we rename all identifiers in the queue.