⚓ Oxc
The Oxidation Compiler is a high-performance web toolchain. This is an umbrella crate re-exporting all of oxc's different tools. It also adds higher-level APIs for stitching various components together that are not found in other oxc crates.
⚡️ Quick Start
The easiest way to get started with oxc is by adding this to your Cargo.toml:
[]
= { = "*", = ["full"] }
In most cases, code using oxc will follow this general pipeline:
- Parse source code into an AST
- Run semantic analysis on the AST
- Use the AST and semantic data in one or more other tools
- Generate new code for the final processed program
Example
This example performs the first two steps of this pipeline:
use Path;
use ;
// In real code, this will likely come from a file read from disk.
let source_path = new;
let source_text = "
import React from 'react';
export interface Props {
count: number;
onInc: () => void;
onDec: () => void;
}
export const Counter: React.FC<Props> = props => {
return (
<div>
<button onClick={props.onInc}>+</button>
<span id='count'>{props.count}</span>
<button onClick={props.onDec}>-</button>
</div>
);
};
";
// Memory arena where AST nodes are allocated.
let allocator = default;
// Infer source type (TS/JS/ESM/JSX/etc) based on file extension
let source_type = from_path.unwrap;
let mut errors = Vecnew;
// Step 1: Parsing
// Parse the TSX file into an AST. The root AST node is a `Program` struct.
let ParserReturn =
new.parse;
errors.extend;
// Parsing failed completely. `program` is empty and `errors` isn't. If the
// parser could recover from errors, `program` will be a valid AST and
// `errors` will be populated. We can still perform semantic analysis in
// such cases (if we want).
if panicked
// Step 2: Semantic analysis.
// Some of the more expensive syntax checks are deferred to this stage, and are
// enabled using `with_check_syntax_error`. You are not required to enable
// these, and they are disabled by default.
let SemanticBuilderReturn = new
.with_check_syntax_error // Enable extra syntax error checking
.with_build_jsdoc // Enable JSDoc parsing
.with_cfg // Build a Control Flow Graph
.build; // Produce the `Semantic`
errors.extend;
if errors.is_empty else
// From here, you can now pass `program` and `semantic` to other tools.
💡 Features
These feature flags enable/disable various tools in oxc's toolchain:
full: Enable all features that provide access to a tool.semantic: Enable thesemanticmodule for semantic analysis on ASTs.transformer: Enable thetransformmodule for babel-like transpiling.minifier: Enable theminifierandmanglermodules for terser-like minification.codegen: Enable thecodegenmodule, which prints ASTs to source code.mangler: Enable themanglermodule without enablingminifier.cfg: Expose thecfgmodule. CFGs may still be created insemanticwithout turning this on.sourcemap: Enable thesourcemapmodule. Useful when usingcodegento print both source code and source maps.isolated_declarations: enable theisolated_declarationsmodule for generating typescript type declarations
These feature flags modify the behavior of oxc's tools. None of them are enabled
by the full feature.
serialize: ImplementsSerializeandDeserializefor various oxc data structures.sourcemap_concurrent: Generate source maps in parallel. Only useful when thesourcemapfeature is also enabled.wasm: Enable WASM bindings for the transformer/transpiler. Only useful when thetransformerfeature is enabled.