oxc/Cargo.toml

247 lines
8.4 KiB
TOML

[workspace]
resolver = "2"
members = ["apps/*", "crates/*", "napi/*", "tasks/*", "wasm/*"]
exclude = ["tasks/lint_rules"]
[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.78" # Support last 6 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"
# 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
# This rule is too pedantic, I don't want to force this because naming things are hard.
module_name_repetitions = "allow"
# 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.42.0", path = "crates/oxc" }
oxc_allocator = { version = "0.42.0", path = "crates/oxc_allocator" }
oxc_ast = { version = "0.42.0", path = "crates/oxc_ast" }
oxc_ast_macros = { version = "0.42.0", path = "crates/oxc_ast_macros" }
oxc_cfg = { version = "0.42.0", path = "crates/oxc_cfg" }
oxc_codegen = { version = "0.42.0", path = "crates/oxc_codegen" }
oxc_data_structures = { version = "0.42.0", path = "crates/oxc_data_structures" }
oxc_diagnostics = { version = "0.42.0", path = "crates/oxc_diagnostics" }
oxc_ecmascript = { version = "0.42.0", path = "crates/oxc_ecmascript" }
oxc_estree = { version = "0.42.0", path = "crates/oxc_estree" }
oxc_isolated_declarations = { version = "0.42.0", path = "crates/oxc_isolated_declarations" }
oxc_mangler = { version = "0.42.0", path = "crates/oxc_mangler" }
oxc_minifier = { version = "0.42.0", path = "crates/oxc_minifier" }
oxc_napi = { version = "0.42.0", path = "crates/oxc_napi" }
oxc_parser = { version = "0.42.0", path = "crates/oxc_parser" }
oxc_regular_expression = { version = "0.42.0", path = "crates/oxc_regular_expression" }
oxc_semantic = { version = "0.42.0", path = "crates/oxc_semantic" }
oxc_span = { version = "0.42.0", path = "crates/oxc_span" }
oxc_syntax = { version = "0.42.0", path = "crates/oxc_syntax" }
oxc_transform_napi = { version = "0.42.0", path = "napi/transform" }
oxc_transformer = { version = "0.42.0", path = "crates/oxc_transformer" }
oxc_traverse = { version = "0.42.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.7"
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.6.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"
glob = "0.3.1"
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.13.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.6.5"
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"
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", "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