[workspace] resolver = "2" members = ["apps/*", "crates/*", "napi/*", "tasks/*", "wasm/*"] exclude = ["tasks/lint_rules", "tasks/e2e"] [workspace.package] authors = ["Boshen ", "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." # [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.48.2", path = "crates/oxc" } oxc_allocator = { version = "0.48.2", path = "crates/oxc_allocator" } oxc_ast = { version = "0.48.2", path = "crates/oxc_ast" } oxc_ast_macros = { version = "0.48.2", path = "crates/oxc_ast_macros" } oxc_cfg = { version = "0.48.2", path = "crates/oxc_cfg" } oxc_codegen = { version = "0.48.2", path = "crates/oxc_codegen" } oxc_data_structures = { version = "0.48.2", path = "crates/oxc_data_structures" } oxc_diagnostics = { version = "0.48.2", path = "crates/oxc_diagnostics" } oxc_ecmascript = { version = "0.48.2", path = "crates/oxc_ecmascript" } oxc_estree = { version = "0.48.2", path = "crates/oxc_estree" } oxc_isolated_declarations = { version = "0.48.2", path = "crates/oxc_isolated_declarations" } oxc_mangler = { version = "0.48.2", path = "crates/oxc_mangler" } oxc_minifier = { version = "0.48.2", path = "crates/oxc_minifier" } oxc_napi = { version = "0.48.2", path = "crates/oxc_napi" } oxc_parser = { version = "0.48.2", path = "crates/oxc_parser" } oxc_parser_napi = { version = "0.48.2", path = "napi/parser" } oxc_regular_expression = { version = "0.48.2", path = "crates/oxc_regular_expression" } oxc_semantic = { version = "0.48.2", path = "crates/oxc_semantic" } oxc_span = { version = "0.48.2", path = "crates/oxc_span" } oxc_syntax = { version = "0.48.2", path = "crates/oxc_syntax" } oxc_transform_napi = { version = "0.48.2", path = "napi/transform" } oxc_transformer = { version = "0.48.2", path = "crates/oxc_transformer" } oxc_traverse = { version = "0.48.2", 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.2" oxc_index = "2" oxc_resolver = "4" 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" fixedbitset = "0.5.7" flate2 = "1.0.35" futures = "0.3.31" globset = "0.4.15" handlebars = "6.2.0" hashbrown = { version = "0.15.2", default-features = false } 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" 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.26" tempfile = "3.14.0" tokio = "1.42.0" tower-lsp = "0.20.0" tracing-subscriber = "0.3.19" tsify = "0.4.5" ureq = { version = "3.0.0", default-features = false } 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