Crate swc

source ·
Expand description

The main crate of the swc project.

§Customizing

This is documentation for building custom build tools on top of swc.

§Dependency version management

swc has swc_css, which re-exports required modules.

§Testing

See [testing] and swc_ecma_transforms_testing.

§Custom javascript transforms

§What is JsWord?

It’s basically an interned string. See swc_atoms.

§Choosing between JsWord vs String

You should prefer JsWord over String if it’s going to be stored in an AST node.

See swc_atoms for detailed description.

§Fold vs VisitMut vs Visit

See swc_visit for detailed description.

§Variable management (Scoping)

See [swc_ecma_transforms_base::resolver::resolver_with_mark].

§How identifiers work

See the doc on swc_ecma_ast::Ident or on [swc_ecma_transforms_base::resolver::resolver_with_mark].

§Comparing two identifiers

See [swc_ecma_utils::Id]. You can use [swc_ecma_utils::IdentLike::to_id] to extract important parts of an swc_ecma_ast::Ident.

§Creating a unique identifier

See swc_ecma_utils::private_ident.

§Prepending statements

If you want to prepend statements to the beginning of a file, you can use swc_ecma_utils::prepend_stmts or [swc_ecma_utils::prepend] if len == 1.

These methods are aware of the fact that "use strict" directive should be first in a file, and insert statements after directives.

§Improving readability

Each stuffs are documented at itself.

§Reducing binary size

The visitor expands to a lot of code. You can reduce it by using macros like

Note that this will make typescript-related nodes not processed, but it’s typically fine as typescript::strip is invoked at the start and it removes typescript-specific nodes.

§Porting expr.evaluate() of babel

See swc_ecma_minifier::eval::Evaluator.

Re-exports§

Modules§

Structs§

Enums§

Functions§