mirror of
https://github.com/danbulant/oxc
synced 2026-05-25 04:42:10 +00:00
## [0.47.0] - 2025-01-18 -fae4cd2allocator: [**BREAKING**] Remove `Vec::into_string` (#8571) (overlookmotel) -95bc0d7allocator: [**BREAKING**] `Allocator` do not deref to `bumpalo::Bump` (#8569) (overlookmotel) -19d3677ast: [**BREAKING**] Always return `Array<ImportDeclarationSpecifier>` for `ImportDeclaration.specifiers` (#8560) (sapphi-red) -4ce6329semantic: [**BREAKING**] Ensure program outlives semantic (#8455) (Valentinas Janeiko) -7066d1cast, span, syntax, regular_expression: [**BREAKING**] Remove `ContentHash` (#8512) (overlookmotel) ### Features -bf4e5e1allocator: Add `HashMap` (#8553) (overlookmotel) -a6d71f8ast: Add `AstKind::ty` method (#8521) (overlookmotel) -4d4e805minifier: Collapse if stmt with empty consequent (#8577) (camc314) -991a22fminifier: Fold `Array::concat` into literal (#8442) (sapphi-red) -3dc2d8bminifier: Fold string concat chaining (#8441) (sapphi-red) -a4ae450minifier: Fold array concat chaining (#8440) (sapphi-red) -7cc81efminifier: Fold invalid typeof comparisons (#8550) (camc314) -927f43fminifier: Improve `.charCodeAt(arg)` when arg is valid (#8534) (Boshen) -06f14d5minifier: Remove empty class static block `class Foo { static {} }` (#8525) (Boshen) -1860411minifier: Remove last redundant return statement (#8523) (Boshen) -c479a58napi/parser: Expose dynamic import expressions (#8540) (Boshen) -2f0314enpm/oxc-minify: Npm package and publish script (#8579) (Boshen) -f413bb5transformer/optional-chaining: Change parent scope for expression when it wrapped with an arrow function (#8511) (Dunqing) ### Bug Fixes -e87c001allocator: Statically prevent memory leaks in allocator (#8570) (overlookmotel) -855c839codegen: Shorthand assignment target identifier consider mangled names (#8536) (Boshen) -65c596dminifer: Keep idents if not in scope when minimizing array exprs (#8551) (camc314) -f57aac2minifier: Incorrect folding of expr in bool ctx (#8542) (camc314) -946ad76minifier: `(-Infinity).toString()` -> `'-Infinity'` (#8535) (Boshen) -b1d0186minifier: Do not fold `!!void b` (#8533) (Boshen) -53adde5minifier: `x['-2147483648']` -> `x[-2147483648]` (#8528) (Boshen) -405b73dminifier: Do not change `delete undefined` to `delete void 0` (#8527) (Boshen) -92e44cbminifier: Do not remove `undefined` in `var x = undefined` (#8526) (Boshen) -209e313minifier: `class C { ['-1']() {} }` cannot be minifized (#8516) (Boshen) -6585463minifier: Always keep the last value of sequence expression (#8490) (Boshen) -b552f5ctransformer: `wrap_in_arrow_function_iife` take span of input `Expression` (#8547) (overlookmotel) -9963533transformer/arrow-functions: Visit arguments to `super()` call (#8494) (overlookmotel) -06ccb51transformer/async-to-generator: Move parameters to the inner generator function when they could throw errors (#8500) (Dunqing) -356f0c1transformer/class-properties: Handle nested `super()` calls (#8506) (overlookmotel) -a048337transformer/class-static-blocks: Static block converted to IIFE use span of original block (#8549) (overlookmotel) ### Performance -76ea52ballocator: Inline `Box` methods (#8572) (overlookmotel) -93df57fallocator: `#[inline(always)]` methods of `Vec` which just delegate to `allocator_api2` (#8567) (overlookmotel) -5a28d68allocator: `#[inline(always)]` methods of `HashMap` which just delegate to `hashbrown` (#8565) (overlookmotel) -d17021cmangler: Optimize `base54` function (#8557) (overlookmotel) -6b52d7amangler: Use a single allocation space for temporary vecs (#8495) (Boshen) -30a869esemantic: Use `oxc_allocator::HashMap` in `ScopeTree` (#8554) (overlookmotel) -63eb298span: Compare `Span`s as single `u64`s (#8300) (overlookmotel) -a43560cspan: Hash `Span` as a single `u64` (#8299) (overlookmotel) -3fff7d2span: Align `Span` same as `usize` (#8298) (overlookmotel) -53ef263transformer/arrow-functions: Bail out of visiting early when inserting `_this = this` after `super()` (#8482) (overlookmotel) ### Documentation -fa1a6d5allocator: Update docs for `Vec` (#8555) (overlookmotel) ### Refactor -ac05134allocator: `String` type (#8568) (overlookmotel) -68fab81allocator: Rename inner `Vec` type (#8566) (overlookmotel) -fcbca32ast: Rename `#[estree(with)]` to `#[estree(via)]` (#8564) (overlookmotel) -007e8c0ast, regular_expression: Shorten `ContentEq` implementations (#8519) (overlookmotel) -b4c87e2linter: Move DiagnosticsReporters to oxlint (#8454) (Alexander S.) -8f57929minifier: Merge `try_compress_type_of_equal_string` into `try_minimize_binary` (#8561) (sapphi-red) -2857ae1parser: Refactor visitor in regexp example (#8524) (overlookmotel) -b5ed58espan: All methods take owned `Span` (#8297) (overlookmotel) -712633ftransformer: `wrap_statements_in_arrow_function_iife` utility function (#8548) (overlookmotel) -5206c6atransformer: Rename `wrap_in_arrow_function_iife` (#8546) (overlookmotel) -61077catransformer: `wrap_arrow_function_iife` receive an owned `Expression` (#8545) (overlookmotel) -6820d24transformer: Move `wrap_arrow_function_iife` to root utils module (#8529) (Dunqing) -52bd0b1transformer: Move common utils functions to the root module (#8513) (Dunqing) -c30654atransformer/arrow-function: Wrapping arrow function iife by using `wrap_arrow_function_iife` (#8530) (Dunqing) -2bc5175transformer/arrow-functions: Rename method (#8481) (overlookmotel) -72f425ftransformer/class-properties: Fix lint warning in release mode (#8539) (overlookmotel) -7e61b23transformer/typescript: Shorten code (#8504) (overlookmotel) -04bc259traverse: Remove unnecessary `#[allow]` (#8518) (overlookmotel) -a368726traverse: Harden soundness of `Traverse` and document safety invariants better (#8507) (overlookmotel) ### Testing -e0f5d6cminifier: Update esbuild test (Boshen) -629c417minifier: Port esbuild minification tests (#8497) (Boshen) Co-authored-by: Boshen <1430279+Boshen@users.noreply.github.com>
256 lines
8.8 KiB
TOML
256 lines
8.8 KiB
TOML
[workspace]
|
|
resolver = "2"
|
|
members = ["apps/*", "crates/*", "napi/*", "tasks/*", "wasm/*"]
|
|
exclude = ["tasks/lint_rules", "tasks/e2e"]
|
|
|
|
[workspace.package]
|
|
authors = ["Boshen <boshenc@gmail.com>", "Oxc contributors"]
|
|
categories = ["compilers", "development-tools", "web-programming"]
|
|
edition = "2021"
|
|
homepage = "https://oxc.rs"
|
|
keywords = ["JavaScript", "TypeScript", "linter", "minifier", "parser"]
|
|
license = "MIT"
|
|
repository = "https://github.com/oxc-project/oxc"
|
|
rust-version = "1.80" # Support last 5 minor versions.
|
|
description = "A collection of JavaScript tools written in Rust."
|
|
|
|
# <https://doc.rust-lang.org/rustc/lints/listing/allowed-by-default.html>
|
|
[workspace.lints.rust]
|
|
absolute_paths_not_starting_with_crate = "warn"
|
|
non_ascii_idents = "warn"
|
|
unit-bindings = "warn"
|
|
unexpected_cfgs = { level = "warn", check-cfg = ['cfg(coverage)', 'cfg(coverage_nightly)'] }
|
|
|
|
[workspace.lints.clippy]
|
|
all = { level = "warn", priority = -1 }
|
|
empty_docs = { level = "allow", priority = 1 } # From `Tsify`
|
|
# restriction
|
|
dbg_macro = "warn"
|
|
todo = "warn"
|
|
unimplemented = "warn"
|
|
print_stdout = "warn" # Must be opt-in
|
|
print_stderr = "warn" # Must be opt-in
|
|
allow_attributes = "warn"
|
|
# I like the explicitness of this rule as it removes confusion around `clone`.
|
|
# This increases readability, avoids `clone` mindlessly and heap allocating by accident.
|
|
clone_on_ref_ptr = "warn"
|
|
# These two are mutually exclusive, I like `mod.rs` files for better fuzzy searches on module entries.
|
|
self_named_module_files = "warn" # "-Wclippy::mod_module_files"
|
|
empty_drop = "warn"
|
|
empty_structs_with_brackets = "warn"
|
|
exit = "warn"
|
|
filetype_is_file = "warn"
|
|
get_unwrap = "warn"
|
|
impl_trait_in_params = "warn"
|
|
rc_buffer = "warn"
|
|
rc_mutex = "warn"
|
|
rest_pat_in_fully_bound_structs = "warn"
|
|
unnecessary_safety_comment = "warn"
|
|
undocumented_unsafe_blocks = "warn"
|
|
infinite_loop = "warn"
|
|
map_with_unused_argument_over_ranges = "warn"
|
|
unused_result_ok = "warn"
|
|
pathbuf_init_then_push = "warn"
|
|
# I want to write the best Rust code so pedantic is enabled.
|
|
# We should only disable rules globally if they are either false positives, chaotic, or does not make sense.
|
|
pedantic = { level = "warn", priority = -1 }
|
|
# Allowed rules
|
|
# pedantic
|
|
# All triggers are mostly ignored in our codebase, so this is ignored globally.
|
|
struct_excessive_bools = "allow"
|
|
too_many_lines = "allow"
|
|
# `#[must_use]` is creating too much noise for this codebase, it does not add much value
|
|
# except nagging the programmer to add a `#[must_use]` after clippy has been run.
|
|
# Having `#[must_use]` everywhere also hinders readability.
|
|
must_use_candidate = "allow"
|
|
# Too annoying, we import by name anyway.
|
|
wildcard_imports = "allow"
|
|
# used_underscore_binding= "allow"
|
|
doc_markdown = "allow"
|
|
# nursery
|
|
# `const` functions do not make sense for our project because this is not a `const` library.
|
|
# This rule also confuses newcomers and forces them to add `const` blindlessly without any reason.
|
|
missing_const_for_fn = "allow"
|
|
# cargo
|
|
cargo = { level = "warn", priority = -1 }
|
|
multiple_crate_versions = "allow"
|
|
cargo_common_metadata = "allow" # FIXME
|
|
doc_lazy_continuation = "allow" # FIXME
|
|
|
|
[workspace.dependencies]
|
|
# publish = true
|
|
oxc = { version = "0.47.0", path = "crates/oxc" }
|
|
oxc_allocator = { version = "0.47.0", path = "crates/oxc_allocator" }
|
|
oxc_ast = { version = "0.47.0", path = "crates/oxc_ast" }
|
|
oxc_ast_macros = { version = "0.47.0", path = "crates/oxc_ast_macros" }
|
|
oxc_cfg = { version = "0.47.0", path = "crates/oxc_cfg" }
|
|
oxc_codegen = { version = "0.47.0", path = "crates/oxc_codegen" }
|
|
oxc_data_structures = { version = "0.47.0", path = "crates/oxc_data_structures" }
|
|
oxc_diagnostics = { version = "0.47.0", path = "crates/oxc_diagnostics" }
|
|
oxc_ecmascript = { version = "0.47.0", path = "crates/oxc_ecmascript" }
|
|
oxc_estree = { version = "0.47.0", path = "crates/oxc_estree" }
|
|
oxc_isolated_declarations = { version = "0.47.0", path = "crates/oxc_isolated_declarations" }
|
|
oxc_mangler = { version = "0.47.0", path = "crates/oxc_mangler" }
|
|
oxc_minifier = { version = "0.47.0", path = "crates/oxc_minifier" }
|
|
oxc_napi = { version = "0.47.0", path = "crates/oxc_napi" }
|
|
oxc_parser = { version = "0.47.0", path = "crates/oxc_parser" }
|
|
oxc_parser_napi = { version = "0.47.0", path = "napi/parser" }
|
|
oxc_regular_expression = { version = "0.47.0", path = "crates/oxc_regular_expression" }
|
|
oxc_semantic = { version = "0.47.0", path = "crates/oxc_semantic" }
|
|
oxc_span = { version = "0.47.0", path = "crates/oxc_span" }
|
|
oxc_syntax = { version = "0.47.0", path = "crates/oxc_syntax" }
|
|
oxc_transform_napi = { version = "0.47.0", path = "napi/transform" }
|
|
oxc_transformer = { version = "0.47.0", path = "crates/oxc_transformer" }
|
|
oxc_traverse = { version = "0.47.0", path = "crates/oxc_traverse" }
|
|
|
|
# publish = false
|
|
oxc_linter = { path = "crates/oxc_linter" }
|
|
oxc_macros = { path = "crates/oxc_macros" }
|
|
oxc_prettier = { path = "crates/oxc_prettier" }
|
|
oxc_tasks_common = { path = "tasks/common" }
|
|
oxc_tasks_transform_checker = { path = "tasks/transform_checker" }
|
|
|
|
# Relaxed version so the user can decide which version to use.
|
|
napi = "3.0.0-alpha"
|
|
napi-build = "2.1.3"
|
|
napi-derive = "3.0.0-alpha"
|
|
|
|
# Relaxed version so the user can decide which version to use.
|
|
indexmap = "2"
|
|
proc-macro2 = "1"
|
|
quote = "1"
|
|
rustc-hash = "2"
|
|
serde = "1"
|
|
serde_json = "1"
|
|
syn = { version = "2", default-features = false }
|
|
unicode-id-start = "1"
|
|
|
|
#
|
|
dashmap = "6"
|
|
oxc-browserslist = "1.1.0"
|
|
oxc_index = "2"
|
|
oxc_resolver = "3"
|
|
oxc_sourcemap = "1"
|
|
|
|
#
|
|
allocator-api2 = "0.2.21"
|
|
assert-unchecked = "0.1.2"
|
|
base64 = "0.22.1"
|
|
bitflags = "2.6.0"
|
|
bpaf = "0.9.15"
|
|
bumpalo = "3.16.0"
|
|
compact_str = "0.8.0"
|
|
console = "0.15.8"
|
|
console_error_panic_hook = "0.1.7"
|
|
convert_case = "0.7.0"
|
|
cow-utils = "0.1.3"
|
|
criterion2 = { version = "2.0.0", default-features = false }
|
|
encoding_rs = "0.8.35"
|
|
encoding_rs_io = "0.1.7"
|
|
env_logger = { version = "0.11.5", default-features = false }
|
|
fast-glob = "0.4.0"
|
|
flate2 = "1.0.35"
|
|
futures = "0.3.31"
|
|
globset = "0.4.15"
|
|
handlebars = "6.2.0"
|
|
hashbrown = "0.15.2"
|
|
humansize = "2.1.3"
|
|
ignore = "0.4.23"
|
|
insta = "1.41.1"
|
|
itertools = "0.14.0"
|
|
itoa = "1.0.14"
|
|
jemallocator = "0.5.4"
|
|
json-strip-comments = "1.0.4"
|
|
language-tags = "0.3.2"
|
|
lazy_static = "1.5.0"
|
|
log = "0.4.22"
|
|
markdown = "1.0.0-alpha.21"
|
|
memchr = "2.7.4"
|
|
miette = { package = "oxc-miette", version = "1.0.2", features = ["fancy-no-syscall"] }
|
|
mimalloc = "0.1.43"
|
|
mime_guess = "2.0.5"
|
|
nonmax = "0.5.5"
|
|
num-bigint = "0.4.6"
|
|
num-traits = "0.2.19"
|
|
petgraph = "0.7.0"
|
|
phf = "0.11.2"
|
|
pico-args = "0.5.0"
|
|
prettyplease = "0.2.25"
|
|
project-root = "0.2.2"
|
|
rayon = "1.10.0"
|
|
regex = "1.11.1"
|
|
ropey = "1.6.1"
|
|
rust-lapper = "1.1.0"
|
|
ryu-js = "1.0.1"
|
|
saphyr = "0.0.3"
|
|
schemars = "0.8.21"
|
|
self_cell = "1.1.0"
|
|
seq-macro = "0.3.5"
|
|
serde-wasm-bindgen = "0.6.5"
|
|
sha1 = "0.10.6"
|
|
simdutf8 = { version = "0.1.5", features = ["aarch64_neon"] }
|
|
similar = "2.6.0"
|
|
similar-asserts = "1.6.0"
|
|
string_wizard = "0.0.25"
|
|
tempfile = "3.14.0"
|
|
tokio = "1.42.0"
|
|
tower-lsp = "0.20.0"
|
|
tracing-subscriber = "0.3.19"
|
|
tsify = "0.4.5"
|
|
ureq = { version = "2.12.1", default-features = false }
|
|
url = "2.5.4"
|
|
walkdir = "2.5.0"
|
|
wasm-bindgen = "0.2.99"
|
|
|
|
[workspace.metadata.cargo-shear]
|
|
ignored = ["napi", "oxc_transform_napi", "oxc_parser_napi", "prettyplease"]
|
|
|
|
[profile.dev]
|
|
# Disabling debug info speeds up local and CI builds,
|
|
# and we don't rely on it for debugging that much.
|
|
debug = false
|
|
|
|
[profile.dev.package]
|
|
# Compile macros with some optimizations to make consuming crates build faster
|
|
oxc_macros.opt-level = 1
|
|
oxc_ast_macros.opt-level = 1
|
|
# Compile insta and its dependencies in release mode for faster snapshot tests
|
|
# See: https://insta.rs/docs/quickstart/#optional-faster-runs
|
|
insta.opt-level = 3
|
|
similar.opt-level = 3
|
|
|
|
[profile.release.package.oxc_wasm]
|
|
opt-level = 'z'
|
|
|
|
[profile.release]
|
|
# Configurations explicitly listed here for clarity.
|
|
# Using the best options for performance.
|
|
opt-level = 3
|
|
lto = "fat"
|
|
codegen-units = 1
|
|
strip = "symbols" # Set to `false` for debug information
|
|
debug = false # Set to `true` for debug information
|
|
panic = "abort" # Let it crash and force ourselves to write safe Rust
|
|
|
|
# Profile used for release mode, but with debugging information for profiling
|
|
# and debugging. Use `cargo build --profile=release-with-debug` to build with this profile.
|
|
[profile.release-with-debug]
|
|
inherits = "release"
|
|
strip = false # Keep debug information in binary
|
|
debug = true # Include maximum amount of debug information
|
|
|
|
# Profile for `cargo coverage`
|
|
[profile.coverage]
|
|
inherits = "release"
|
|
opt-level = 2 # Compile faster
|
|
codegen-units = 256 # Compile faster
|
|
lto = "thin" # Faster compile time with thin LTO
|
|
debug-assertions = true # Make sure `debug_assert!`s pass
|
|
overflow-checks = true # Catch arithmetic overflow errors
|
|
|
|
# Profile for linting with release mode-like settings.
|
|
# Catches lint errors which only appear in release mode.
|
|
# `cargo lint --profile dev-no-debug-assertions` is about 35% faster than `cargo lint --release`.
|
|
[profile.dev-no-debug-assertions]
|
|
inherits = "dev"
|
|
debug-assertions = false
|