[workspace] resolver = "2" members = ["crates/*", "tasks/*", "napi/*"] exclude = ["tasks/lint_rules2"] [workspace.package] authors = ["Boshen ", "Oxc contributors"] categories = ["development-tools", "web-programming", "compilers"] description = "Oxc is a JavaScript / TypeScript tooling suite." edition = "2021" homepage = "https://oxc-project.github.io" keywords = ["JavaScript", "TypeScript", "parser", "linter", "minifier"] license = "MIT" repository = "https://github.com/oxc-project/oxc" rust-version = "1.60" [workspace.lints.rust] [workspace.lints.clippy] all = { level = "warn" } # restriction dbg_macro = "warn" todo = "warn" unimplemented = "warn" # 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" # I want to write the best Rust code so both pedantic and nursery is enabled. # We should only disable rules globally if they are either false positives, chaotic, or does not make sense. nursery = { level = "warn", priority = -1 } 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" [workspace.dependencies] # publish = true oxc = { version = "0.5.0", path = "crates/oxc" } oxc_allocator = { version = "0.5.0", path = "crates/oxc_allocator" } oxc_ast = { version = "0.5.0", path = "crates/oxc_ast" } oxc_codegen = { version = "0.5.0", path = "crates/oxc_codegen" } oxc_diagnostics = { version = "0.5.0", path = "crates/oxc_diagnostics" } oxc_index = { version = "0.5.0", path = "crates/oxc_index" } oxc_minifier = { version = "0.5.0", path = "crates/oxc_minifier" } oxc_parser = { version = "0.5.0", path = "crates/oxc_parser" } oxc_semantic = { version = "0.5.0", path = "crates/oxc_semantic" } oxc_span = { version = "0.5.0", path = "crates/oxc_span" } oxc_syntax = { version = "0.5.0", path = "crates/oxc_syntax" } oxc_transformer = { version = "0.5.0", path = "crates/oxc_transformer" } # publish = false oxc_macros = { path = "crates/oxc_macros" } oxc_linter = { path = "crates/oxc_linter" } oxc_type_synthesis = { path = "crates/oxc_type_synthesis" } oxc_prettier = { path = "crates/oxc_prettier" } oxc_tasks_common = { path = "tasks/common" } oxc_language_server = { path = "crates/oxc_language_server" } assert-unchecked = { version = "0.1.2" } bpaf = { version = "0.9.9" } bitflags = { version = "2.4.2" } bumpalo = { version = "3.14.0" } compact_str = { version = "0.7.1" } convert_case = { version = "0.6.0" } criterion = { version = "0.5.1", default-features = false } crossbeam-channel = { version = "0.5.11" } dashmap = { version = "5.5.3" } flate2 = { version = "1.0.28" } futures = { version = "0.3.30" } ignore = { version = "0.4.22" } itertools = { version = "0.12.0" } jemallocator = { version = "0.5.4" } lazy_static = { version = "1.4.0" } miette = { version = "5.10.0", features = ["fancy-no-backtrace"] } mimalloc = { version = "0.1.39" } num-bigint = { version = "0.4.4" } num-traits = { version = "0.2.17" } phf = { version = "0.11" } pico-args = { version = "0.5.0" } proc-macro2 = { version = "1.0.78" } project-root = { version = "0.2.2" } quote = { version = "1.0.35" } rayon = { version = "1.8.1" } regex = { version = "1.10.3" } rustc-hash = { version = "1.1.0", default-features = false, features = ["std"] } ryu-js = { version = "1.0.0" } ropey = { version = "1.6.1" } serde = { version = "1.0.195" } serde_json = { version = "1.0.111" } syn = { version = "=1.0.109" } thiserror = { version = "1.0.56" } tokio = { version = "1" } tower-lsp = { version = "0.20.0", features = ["proposed"] } unicode-id-start = { version = "1.1.2" } ureq = { version = "2.9.1", default-features = false, features = ["tls", "json"] } url = { version = "2.5.0" } walkdir = { version = "2.4.0" } indexmap = { version = "2.1.0" } index_vec = { version = "0.1.3" } static_assertions = { version = "1.1.0" } stacker = { version = "0.1.15" } tracing = { version = "0.1" } tracing-subscriber = { version = "0.3" } insta = { version = "1.34.0", features = ["glob"] } codspeed-criterion-compat = { version = "2.3.3", default-features = false } glob = { version = "0.3.1" } mime_guess = { version = "2.0.4" } language-tags = { version = "0.3.2" } [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" debug = false panic = "abort" # Let it crash and force ourselves to write safe Rust. # Use the `--profile release-debug` flag to show symbols in release mode. # e.g. `cargo build --profile release-debug` [profile.release-debug] inherits = "release" strip = false debug = true