[workspace] resolver = "2" members = ["apps/*", "crates/*", "napi/*", "tasks/*", "wasm/*"] exclude = ["tasks/lint_rules"] [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.76" # Support last 6 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" # 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" # 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.31.0", path = "crates/oxc" } oxc_allocator = { version = "0.31.0", path = "crates/oxc_allocator" } oxc_ast = { version = "0.31.0", path = "crates/oxc_ast" } oxc_ast_macros = { version = "0.31.0", path = "crates/oxc_ast_macros" } oxc_cfg = { version = "0.31.0", path = "crates/oxc_cfg" } oxc_codegen = { version = "0.31.0", path = "crates/oxc_codegen" } oxc_data_structures = { version = "0.31.0", path = "crates/oxc_data_structures" } oxc_diagnostics = { version = "0.31.0", path = "crates/oxc_diagnostics" } oxc_index = { version = "0.31.0", path = "crates/oxc_index" } oxc_isolated_declarations = { version = "0.31.0", path = "crates/oxc_isolated_declarations" } oxc_mangler = { version = "0.31.0", path = "crates/oxc_mangler" } oxc_minifier = { version = "0.31.0", path = "crates/oxc_minifier" } oxc_module_lexer = { version = "0.31.0", path = "crates/oxc_module_lexer" } oxc_parser = { version = "0.31.0", path = "crates/oxc_parser" } oxc_regular_expression = { version = "0.31.0", path = "crates/oxc_regular_expression" } oxc_semantic = { version = "0.31.0", path = "crates/oxc_semantic" } oxc_sourcemap = { version = "0.31.0", path = "crates/oxc_sourcemap" } oxc_span = { version = "0.31.0", path = "crates/oxc_span" } oxc_syntax = { version = "0.31.0", path = "crates/oxc_syntax" } oxc_syntax_operations = { version = "0.31.0", path = "crates/oxc_syntax_operations" } oxc_transform_napi = { version = "0.31.0", path = "napi/transform" } oxc_transformer = { version = "0.31.0", path = "crates/oxc_transformer" } oxc_traverse = { version = "0.31.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" } napi = "3.0.0-alpha" napi-build = "2.1.3" napi-derive = "3.0.0-alpha" aho-corasick = "1.1.3" allocator-api2 = "0.2.18" assert-unchecked = "0.1.2" base64 = "0.22.1" base64-simd = "0.8" bitflags = "2.6.0" bpaf = "0.9.12" bumpalo = "3.16.0" cfg-if = "1.0.0" compact_str = "0.8.0" console = "0.15.8" convert_case = "0.6.0" cow-utils = "0.1.3" criterion2 = { version = "1.1.0", default-features = false } daachorse = { version = "1.0.0" } dashmap = "6.0.1" encoding_rs = "0.8.34" encoding_rs_io = "0.1.7" env_logger = { version = "0.11.5", default-features = false } flate2 = "1.0.31" futures = "0.3.30" glob = "0.3.1" globset = "0.4.14" handlebars = "6.0.0" humansize = "2.1.3" ignore = "0.4.22" indexmap = "2.3.0" insta = "1.39.0" itertools = "0.13.0" itoa = "1.0.11" jemallocator = "0.5.4" json-strip-comments = "1.0.4" language-tags = "0.3.2" lazy_static = "1.5.0" log = "0.4.22" memchr = "2.7.4" memoffset = "0.9.1" miette = { version = "7.2.0", 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" once_cell = "1.19.0" owo-colors = "4.0.0" oxc-browserslist = "1.0.3" oxc_resolver = "1.10.2" petgraph = "0.6.5" phf = "0.11.2" pico-args = "0.5.0" prettyplease = "0.2.20" proc-macro2 = "1.0.86" project-root = "0.2.2" quote = "1.0.36" rayon = "1.10.0" regex = "1.10.6" ropey = "1.6.1" rust-lapper = "1.1.0" rustc-hash = "2.*" ryu-js = "1.0.1" saphyr = "0.0.1" schemars = "0.8.21" seq-macro = "0.3.5" serde = "1.0.206" serde-wasm-bindgen = "0.6.5" serde_json = "1.0.124" simdutf8 = { version = "0.1.4", features = ["aarch64_neon"] } similar = "2.6.0" syn = { version = "2.0.74", default-features = false } tempfile = "3.12.0" textwrap = "0.16.1" tokio = "1.39.2" tower-lsp = "0.20.0" tracing-subscriber = "0.3.18" tsify = "0.4.5" unicode-id-start = "1" # Relaxed version so the user can decide which unicode version to use. unicode-width = "0.1.13" ureq = { version = "2.10.1", default-features = false } url = "2.5.2" walkdir = "2.5.0" wasm-bindgen = "0.2.92" [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 incremental = true