mirror of
https://github.com/oxc-project/oxc.git
synced 2026-09-14 19:36:11 +08:00
a4478e960a
Add `oxc-codegen` package - a printer written in TS. ### Features - Prints JS, JSX, TS, TSX. - Matches `oxc_codegen` exactly on all Test262, TypeScript, Acorn-JSX fixtures. - Very fast. ### Deficiencies - Pretty-printing only (no compact/minified output). - No support for printing comments. - Source map support is semi-there, but largely untested, and poor API (design doc has some ideas on how to improve it). ### This PR adds - The printer code. - Conformance testing infra. - Further tests for edge cases. - README. - Design doc - how it differs from `oxc_codegen` and why, what produces the perf. ### This PR doesn't add - Not integrated into CI or release pipeline. ### Notes This started as a slop port of `oxc_codegen`. I've iterated on that base, cleaned it up a lot, and at least skimmed through all of it. I think it's in fairly decent shape. The design doc is I think worth a read. It explains the rationale for the choices, in particular the "1 codebase, 4 builds" approach. I've put it in a new top-level directory called `packages`. It's not an app, so didn't seem to me to fit alongside `apps/oxlint` and `apps/oxfmt`. It's pure JS, so not like e.g. `napi/parser`. And it felt too heavyweight to put into `npm` dir. But maybe there's a better place for it. Co-authored-by: Cameron <cameron.clark@hey.com>
41 lines
1.0 KiB
TOML
41 lines
1.0 KiB
TOML
[package]
|
|
name = "oxc_codegen_conformance"
|
|
version = "0.0.0"
|
|
authors.workspace = true
|
|
edition.workspace = true
|
|
homepage.workspace = true
|
|
keywords.workspace = true
|
|
license.workspace = true
|
|
publish = false
|
|
repository.workspace = true
|
|
rust-version.workspace = true
|
|
description = "Node API binding around `oxc_parser` + `oxc_codegen`, used as the reference output for the `oxc-codegen` package's conformance tests."
|
|
|
|
[lints]
|
|
workspace = true
|
|
|
|
[lib]
|
|
crate-type = ["cdylib", "lib"]
|
|
test = false
|
|
doctest = false
|
|
|
|
[dependencies]
|
|
oxc_allocator = { workspace = true }
|
|
oxc_ast = { workspace = true }
|
|
oxc_ast_visit = { workspace = true }
|
|
oxc_codegen = { workspace = true }
|
|
oxc_napi = { workspace = true }
|
|
oxc_parser = { workspace = true }
|
|
oxc_syntax = { workspace = true }
|
|
|
|
napi = { workspace = true }
|
|
napi-derive = { workspace = true }
|
|
|
|
[build-dependencies]
|
|
napi-build = { workspace = true }
|
|
|
|
# `napi` is not named in the source - the `#[napi]` macro expands to code which uses it, which
|
|
# `cargo-shear` cannot see through.
|
|
[package.metadata.cargo-shear]
|
|
ignored = ["napi"]
|