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.
-
If you are creating or binding an [swc_ecma_ast::Expr] with operator, you can use [swc_ecma_ast::op].
-
If you want to create [swc_ecma_ast::CallExpr], you can use [swc_ecma_utils::ExprFactory::as_callee] to create
callee
. -
If you want to create [swc_ecma_ast::CallExpr] or [swc_ecma_ast::NewExpr], you can use [swc_ecma_utils::ExprFactory::as_arg] to create arguments.
-
If you want to create [swc_ecma_ast::MemberExpr] where all identifiers are static (e.g.
Object.prototype.hasOwnProperty
), you can use [swc_ecma_utils::member_expr]. -
If you want to create [swc_ecma_ast::MemberExpr], you can use [swc_ecma_utils::ExprFactory::as_obj] to create object field.
§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§
pub extern crate swc_atoms as atoms;
pub use sourcemap;
Modules§
Structs§
- You can create this type like
true.into()
orfalse.into()
. - All methods accept [Handler], which is a storage for errors.
- Builder is used to create a high performance
Compiler
. - Multi-threaded implementation of [Comments]