[workspace] members = ["xtask/", "lib/*", "crates/*"] exclude = ["crates/proc-macro-srv/proc-macro-test/imp"] resolver = "2" [workspace.package] rust-version = "1.76" edition = "2021" license = "MIT OR Apache-2.0" authors = ["rust-analyzer team"] [profile.dev] # Disabling debug info speeds up builds a bunch, # and we don't rely on it for debugging that much. debug = 0 [profile.dev.package] # These speed up local tests. rowan.opt-level = 3 rustc-hash.opt-level = 3 smol_str.opt-level = 3 text-size.opt-level = 3 # This speeds up `cargo xtask dist`. miniz_oxide.opt-level = 3 [profile.release] incremental = true # Set this to 1 or 2 to get more useful backtraces in debugger. debug = 0 [profile.dev-rel] inherits = "release" debug = 2 [patch.'crates-io'] # rowan = { path = "../rowan" } # chalk-solve = { path = "../chalk/chalk-solve" } # chalk-ir = { path = "../chalk/chalk-ir" } # chalk-recursive = { path = "../chalk/chalk-recursive" } # chalk-derive = { path = "../chalk/chalk-derive" } # line-index = { path = "lib/line-index" } # la-arena = { path = "lib/la-arena" } # lsp-server = { path = "lib/lsp-server" } # ungrammar = { path = "../ungrammar" } # rust-analyzer-salsa = { path = "../salsa" } [workspace.dependencies] # local crates base-db = { path = "./crates/base-db", version = "0.0.0" } cfg = { path = "./crates/cfg", version = "0.0.0" } flycheck = { path = "./crates/flycheck", version = "0.0.0" } hir = { path = "./crates/hir", version = "0.0.0" } hir-def = { path = "./crates/hir-def", version = "0.0.0" } hir-expand = { path = "./crates/hir-expand", version = "0.0.0" } hir-ty = { path = "./crates/hir-ty", version = "0.0.0" } ide = { path = "./crates/ide", version = "0.0.0" } ide-assists = { path = "./crates/ide-assists", version = "0.0.0" } ide-completion = { path = "./crates/ide-completion", version = "0.0.0" } ide-db = { path = "./crates/ide-db", version = "0.0.0" } ide-diagnostics = { path = "./crates/ide-diagnostics", version = "0.0.0" } ide-ssr = { path = "./crates/ide-ssr", version = "0.0.0" } intern = { path = "./crates/intern", version = "0.0.0" } limit = { path = "./crates/limit", version = "0.0.0" } load-cargo = { path = "./crates/load-cargo", version = "0.0.0" } mbe = { path = "./crates/mbe", version = "0.0.0" } parser = { path = "./crates/parser", version = "0.0.0" } paths = { path = "./crates/paths", version = "0.0.0" } proc-macro-api = { path = "./crates/proc-macro-api", version = "0.0.0" } proc-macro-srv = { path = "./crates/proc-macro-srv", version = "0.0.0" } proc-macro-srv-cli = { path = "./crates/proc-macro-srv-cli", version = "0.0.0" } profile = { path = "./crates/profile", version = "0.0.0" } project-model = { path = "./crates/project-model", version = "0.0.0" } salsa = { path = "./crates/salsa", version = "0.0.0" } span = { path = "./crates/span", version = "0.0.0" } stdx = { path = "./crates/stdx", version = "0.0.0" } syntax = { path = "./crates/syntax", version = "0.0.0" } text-edit = { path = "./crates/text-edit", version = "0.0.0" } toolchain = { path = "./crates/toolchain", version = "0.0.0" } tt = { path = "./crates/tt", version = "0.0.0" } vfs-notify = { path = "./crates/vfs-notify", version = "0.0.0" } vfs = { path = "./crates/vfs", version = "0.0.0" } ra-ap-rustc_lexer = { version = "0.42.0", default-features = false } ra-ap-rustc_parse_format = { version = "0.42.0", default-features = false } ra-ap-rustc_index = { version = "0.42.0", default-features = false } ra-ap-rustc_abi = { version = "0.42.0", default-features = false } ra-ap-rustc_pattern_analysis = { version = "0.42.0", default-features = false } # local crates that aren't published to crates.io. These should not have versions. sourcegen = { path = "./crates/sourcegen" } test-fixture = { path = "./crates/test-fixture" } test-utils = { path = "./crates/test-utils" } # In-tree crates that are published separately and follow semver. See lib/README.md line-index = { version = "0.1.1" } la-arena = { version = "0.3.1" } lsp-server = { version = "0.7.6" } # non-local crates anyhow = "1.0.75" arrayvec = "0.7.4" bitflags = "2.4.1" cargo_metadata = "0.18.1" chalk-solve = { version = "0.96.0", default-features = false } chalk-ir = "0.96.0" chalk-recursive = { version = "0.96.0", default-features = false } chalk-derive = "0.96.0" command-group = "2.0.1" crossbeam-channel = "0.5.8" dissimilar = "1.0.7" dot = "0.1.4" either = "1.9.0" expect-test = "1.4.0" hashbrown = { version = "0.14", features = [ "inline-more", ], default-features = false } indexmap = "2.1.0" itertools = "0.12.0" libc = "0.2.150" nohash-hasher = "0.2.0" oorandom = "11.1.3" object = { version = "0.33.0", default-features = false, features = [ "std", "read_core", "elf", "macho", "pe", ] } pulldown-cmark-to-cmark = "10.0.4" pulldown-cmark = { version = "0.9.0", default-features = false } rayon = "1.8.0" rustc-hash = "1.1.0" semver = "1.0.14" serde = { version = "1.0.192", features = ["derive"] } serde_json = "1.0.108" smallvec = { version = "1.10.0", features = [ "const_new", "union", "const_generics", ] } smol_str = "0.2.1" text-size = "1.1.1" tracing = "0.1.40" tracing-tree = "0.3.0" tracing-subscriber = { version = "0.3.18", default-features = false, features = [ "registry", "fmt", "tracing-log", ] } triomphe = { version = "0.1.10", default-features = false, features = ["std"] } url = "2.3.1" xshell = "0.2.5" # We need to freeze the version of the crate, as the raw-api feature is considered unstable dashmap = { version = "=5.5.3", features = ["raw-api"] } [workspace.lints.rust] rust_2018_idioms = "warn" unused_lifetimes = "warn" unreachable_pub = "warn" semicolon_in_expressions_from_macros = "warn" [workspace.lints.clippy] # FIXME Remove the tidy test once the lint table is stable ## lint groups complexity = { level = "warn", priority = -1 } correctness = { level = "deny", priority = -1 } perf = { level = "deny", priority = -1 } restriction = { level = "allow", priority = -1 } style = { level = "warn", priority = -1 } suspicious = { level = "warn", priority = -1 } ## allow following lints # () makes a fine error in most cases result_unit_err = "allow" # We don't expose public APIs that matter like this len_without_is_empty = "allow" # We have macros that rely on this currently enum_variant_names = "allow" # Builder pattern disagrees new_ret_no_self = "allow" # Has a bunch of false positives useless_asref = "allow" ## Following lints should be tackled at some point too_many_arguments = "allow" type_complexity = "allow" wrong_self_convention = "allow" ## warn at following lints # CI raises these to deny dbg_macro = "warn" todo = "warn" print_stdout = "warn" print_stderr = "warn" rc_buffer = "warn" str_to_string = "warn"