[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"] description = "A collection of JavaScript tools written in Rust." edition = "2021" homepage = "https://oxc.rs" keywords = ["JavaScript", "TypeScript", "linter", "minifier", "parser"] license = "MIT" repository = "https://github.com/oxc-project/oxc" rust-version = "1.74" # [workspace.lints.rust] unsafe_code = "warn" absolute_paths_not_starting_with_crate = "warn" non_ascii_idents = "warn" unit-bindings = "warn" [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 # I like the explicitness of this rule as it removes confusion around `clone`. # This increases readability, avoids `clone` mindlessly and heap allocating on 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] every where 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 new comers 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" # TODO: fix this [workspace.dependencies] # publish = true oxc = { version = "0.15.0", path = "crates/oxc" } oxc_allocator = { version = "0.15.0", path = "crates/oxc_allocator" } oxc_ast = { version = "0.15.0", path = "crates/oxc_ast" } oxc_codegen = { version = "0.15.0", path = "crates/oxc_codegen" } oxc_diagnostics = { version = "0.15.0", path = "crates/oxc_diagnostics" } oxc_index = { version = "0.15.0", path = "crates/oxc_index" } oxc_minifier = { version = "0.15.0", path = "crates/oxc_minifier" } oxc_parser = { version = "0.15.0", path = "crates/oxc_parser" } oxc_semantic = { version = "0.15.0", path = "crates/oxc_semantic" } oxc_span = { version = "0.15.0", path = "crates/oxc_span" } oxc_syntax = { version = "0.15.0", path = "crates/oxc_syntax" } oxc_transformer = { version = "0.15.0", path = "crates/oxc_transformer" } oxc_sourcemap = { version = "0.15.0", path = "crates/oxc_sourcemap" } oxc_ast_macros = { version = "0.15.0", path = "crates/oxc_ast_macros" } oxc_traverse = { version = "0.15.0", path = "crates/oxc_traverse" } oxc_module_lexer = { version = "0.15.0", path = "crates/oxc_module_lexer" } oxc_cfg = { version = "0.15.0", path = "crates/oxc_cfg" } oxc_isolated_declarations = { version = "0.15.0", path = "crates/oxc_isolated_declarations" } # publish = false oxc_macros = { path = "crates/oxc_macros" } oxc_linter = { path = "crates/oxc_linter" } oxc_prettier = { path = "crates/oxc_prettier" } oxc_tasks_common = { path = "tasks/common" } oxc_ast_codegen = { path = "tasks/oxc_ast_codegen" } napi = "3.0.0-alpha.1" napi-derive = "3.0.0-alpha.1" napi-build = "2.1.3" assert-unchecked = "0.1.2" allocator-api2 = "0.2.18" bpaf = "0.9.12" bitflags = "2.5.0" bumpalo = "3.16.0" convert_case = "0.6.0" dashmap = "5.5.3" flate2 = "1.0.30" futures = "0.3.30" glob = "0.3.1" ignore = "0.4.22" itertools = "0.13.0" jemallocator = "0.5.4" lazy_static = "1.4.0" memoffset = "0.9.1" miette = { version = "7.2.0", features = ["fancy-no-syscall"] } mimalloc = "0.1.42" num-bigint = "0.4.5" num-traits = "0.2.19" phf = "0.11.2" pico-args = "0.5.0" proc-macro2 = "1.0.85" project-root = "0.2.2" quote = "1.0.36" rayon = "1.10.0" regex = "1.10.5" rustc-hash = "2.*" ryu-js = "1.0.1" ropey = "1.6.1" seq-macro = "0.3.5" serde = "1.0.203" serde_json = "1.0.117" syn = { version = "2.0.58", default-features = false } tempfile = "3.10.1" tokio = "1.38.0" tower-lsp = "0.20.0" trybuild = "1.0.96" unicode-id-start = "1.*" # Relaxed version so the user can decide which unicode version to use. ureq = { version = "2.9.6", default-features = false } url = "2.5.2" walkdir = "2.5.0" indexmap = "2.2.6" static_assertions = "1.1.0" tracing-subscriber = "0.3.18" insta = "1.39.0" mime_guess = "2.0.4" language-tags = "0.3.2" tsify = "0.4.5" wasm-bindgen = "0.2.92" serde-wasm-bindgen = "0.6.5" handlebars = "5.1.2" base64 = "0.22.1" compact_str = "0.7.1" console = "0.15.8" encoding_rs = "0.8.34" encoding_rs_io = "0.1.7" env_logger = { version = "0.11.3", default-features = false } globset = "0.4.14" humansize = "2.1.3" json-strip-comments = "1.0.2" log = "0.4.21" memchr = "2.7.2" once_cell = "1.19.0" ouroboros = "0.18.4" owo-colors = "4.0.0" oxc_resolver = "1.8.2" petgraph = "0.6.5" rust-lapper = "1.1.0" similar = "2.5.0" textwrap = "0.16.1" unicode-width = "0.1.13" saphyr = "0.0.1" base64-simd = "0.8" cfg-if = "1.0.0" schemars = "0.8.21" oxc-browserslist = "1.0.1" prettyplease = "0.2.20" criterion2 = { version = "0.11.0", default-features = false } daachorse = { version = "1.0.0" } [workspace.metadata.cargo-shear] ignored = ["napi", "oxc_ast_codegen", "oxc_traverse", "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.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. # Faster compile time with thin lto [profile.release-thin] inherits = "release" lto = "thin"