[workspace] members = ["crates/*"] resolver = "2" [workspace.package] edition = "2021" rust-version = "1.80" homepage = "https://docs.astral.sh/ruff" documentation = "https://docs.astral.sh/ruff" repository = "https://github.com/astral-sh/ruff" authors = ["Charlie Marsh "] license = "MIT" [workspace.dependencies] ruff = { path = "crates/ruff" } ruff_cache = { path = "crates/ruff_cache" } ruff_db = { path = "crates/ruff_db", default-features = false } ruff_diagnostics = { path = "crates/ruff_diagnostics" } ruff_formatter = { path = "crates/ruff_formatter" } ruff_graph = { path = "crates/ruff_graph" } ruff_index = { path = "crates/ruff_index" } ruff_linter = { path = "crates/ruff_linter" } ruff_macros = { path = "crates/ruff_macros" } ruff_notebook = { path = "crates/ruff_notebook" } ruff_python_ast = { path = "crates/ruff_python_ast" } ruff_python_codegen = { path = "crates/ruff_python_codegen" } ruff_python_formatter = { path = "crates/ruff_python_formatter" } ruff_python_index = { path = "crates/ruff_python_index" } ruff_python_literal = { path = "crates/ruff_python_literal" } ruff_python_parser = { path = "crates/ruff_python_parser" } ruff_python_semantic = { path = "crates/ruff_python_semantic" } ruff_python_stdlib = { path = "crates/ruff_python_stdlib" } ruff_python_trivia = { path = "crates/ruff_python_trivia" } ruff_server = { path = "crates/ruff_server" } ruff_source_file = { path = "crates/ruff_source_file" } ruff_text_size = { path = "crates/ruff_text_size" } red_knot_vendored = { path = "crates/red_knot_vendored" } ruff_workspace = { path = "crates/ruff_workspace" } red_knot_python_semantic = { path = "crates/red_knot_python_semantic" } red_knot_server = { path = "crates/red_knot_server" } red_knot_test = { path = "crates/red_knot_test" } red_knot_workspace = { path = "crates/red_knot_workspace", default-features = false } aho-corasick = { version = "1.1.3" } annotate-snippets = { version = "0.9.2", features = ["color"] } anyhow = { version = "1.0.80" } assert_fs = { version = "1.1.0" } argfile = { version = "0.2.0" } bincode = { version = "1.3.3" } bitflags = { version = "2.5.0" } bstr = { version = "1.9.1" } cachedir = { version = "0.3.1" } camino = { version = "1.1.7" } chrono = { version = "0.4.35", default-features = false, features = ["clock"] } clap = { version = "4.5.3", features = ["derive"] } clap_complete_command = { version = "0.6.0" } clearscreen = { version = "4.0.0" } codspeed-criterion-compat = { version = "2.6.0", default-features = false } colored = { version = "2.1.0" } console_error_panic_hook = { version = "0.1.7" } console_log = { version = "1.0.0" } countme = { version = "3.0.1" } compact_str = "0.8.0" criterion = { version = "0.5.1", default-features = false } crossbeam = { version = "0.8.4" } dashmap = { version = "6.0.1" } dir-test = { version = "0.4.0" } dunce = { version = "1.0.5" } drop_bomb = { version = "0.1.5" } env_logger = { version = "0.11.0" } etcetera = { version = "0.8.0" } fern = { version = "0.7.0" } filetime = { version = "0.2.23" } glob = { version = "0.3.1" } globset = { version = "0.4.14" } globwalk = { version = "0.9.1" } hashbrown = { version = "0.15.0", default-features = false, features = [ "raw-entry", "inline-more", ] } ignore = { version = "0.4.22" } imara-diff = { version = "0.1.5" } imperative = { version = "1.0.4" } indexmap = { version = "2.6.0" } indicatif = { version = "0.17.8" } indoc = { version = "2.0.4" } insta = { version = "1.35.1" } insta-cmd = { version = "0.6.0" } is-macro = { version = "0.3.5" } is-wsl = { version = "0.4.0" } itertools = { version = "0.14.0" } js-sys = { version = "0.3.69" } jod-thread = { version = "0.1.2" } libc = { version = "0.2.153" } libcst = { version = "1.1.0", default-features = false } log = { version = "0.4.17" } lsp-server = { version = "0.7.6" } lsp-types = { git = "https://github.com/astral-sh/lsp-types.git", rev = "3512a9f", features = [ "proposed", ] } matchit = { version = "0.8.1" } memchr = { version = "2.7.1" } mimalloc = { version = "0.1.39" } natord = { version = "1.0.9" } notify = { version = "7.0.0" } ordermap = { version = "0.5.0" } path-absolutize = { version = "3.1.1" } path-slash = { version = "0.2.1" } pathdiff = { version = "0.2.1" } pep440_rs = { version = "0.7.1" } pretty_assertions = "1.3.0" proc-macro2 = { version = "1.0.79" } pyproject-toml = { version = "0.13.4" } quick-junit = { version = "0.5.0" } quote = { version = "1.0.23" } rand = { version = "0.8.5" } rayon = { version = "1.10.0" } regex = { version = "1.10.2" } rustc-hash = { version = "2.0.0" } # When updating salsa, make sure to also update the revision in `fuzz/Cargo.toml` salsa = { git = "https://github.com/salsa-rs/salsa.git", rev = "88a1d7774d78f048fbd77d40abca9ebd729fd1f0" } schemars = { version = "0.8.16" } seahash = { version = "4.1.0" } serde = { version = "1.0.197", features = ["derive"] } serde-wasm-bindgen = { version = "0.6.4" } serde_json = { version = "1.0.113" } serde_test = { version = "1.0.152" } serde_with = { version = "3.6.0", default-features = false, features = [ "macros", ] } shellexpand = { version = "3.0.0" } similar = { version = "2.4.0", features = ["inline"] } smallvec = { version = "1.13.2" } static_assertions = "1.1.0" strum = { version = "0.26.0", features = ["strum_macros"] } strum_macros = { version = "0.26.0" } syn = { version = "2.0.55" } tempfile = { version = "3.9.0" } test-case = { version = "3.3.1" } thiserror = { version = "2.0.0" } tikv-jemallocator = { version = "0.6.0" } toml = { version = "0.8.11" } tracing = { version = "0.1.40" } tracing-flame = { version = "0.2.0" } tracing-indicatif = { version = "0.3.6" } tracing-subscriber = { version = "0.3.18", default-features = false, features = [ "env-filter", "fmt", ] } tracing-tree = { version = "0.4.0" } typed-arena = { version = "2.0.2" } unic-ucd-category = { version = "0.9" } unicode-ident = { version = "1.0.12" } unicode-width = { version = "0.2.0" } unicode_names2 = { version = "1.2.2" } unicode-normalization = { version = "0.1.23" } ureq = { version = "2.9.6" } url = { version = "2.5.0" } uuid = { version = "1.6.1", features = [ "v4", "fast-rng", "macro-diagnostics", "js", ] } walkdir = { version = "2.3.2" } wasm-bindgen = { version = "0.2.92" } wasm-bindgen-test = { version = "0.3.42" } wild = { version = "2" } zip = { version = "0.6.6", default-features = false } [workspace.lints.rust] unsafe_code = "warn" unreachable_pub = "warn" unexpected_cfgs = { level = "warn", check-cfg = [ "cfg(fuzzing)", "cfg(codspeed)", ] } [workspace.lints.clippy] pedantic = { level = "warn", priority = -2 } # Allowed pedantic lints char_lit_as_u8 = "allow" collapsible_else_if = "allow" collapsible_if = "allow" implicit_hasher = "allow" map_unwrap_or = "allow" match_same_arms = "allow" missing_errors_doc = "allow" missing_panics_doc = "allow" module_name_repetitions = "allow" must_use_candidate = "allow" similar_names = "allow" single_match_else = "allow" too_many_lines = "allow" # Without the hashes we run into a `rustfmt` bug in some snapshot tests, see #13250 needless_raw_string_hashes = "allow" # Disallowed restriction lints print_stdout = "warn" print_stderr = "warn" dbg_macro = "warn" empty_drop = "warn" empty_structs_with_brackets = "warn" exit = "warn" get_unwrap = "warn" rc_buffer = "warn" rc_mutex = "warn" rest_pat_in_fully_bound_structs = "warn" # nursery rules redundant_clone = "warn" debug_assert_with_mut_call = "warn" unused_peekable = "warn" [profile.release] # Note that we set these explicitly, and these values # were chosen based on a trade-off between compile times # and runtime performance[1]. # # [1]: https://github.com/astral-sh/ruff/pull/9031 lto = "thin" codegen-units = 16 # Some crates don't change as much but benefit more from # more expensive optimization passes, so we selectively # decrease codegen-units in some cases. [profile.release.package.ruff_python_parser] codegen-units = 1 [profile.release.package.ruff_python_ast] codegen-units = 1 [profile.dev.package.insta] opt-level = 3 [profile.dev.package.similar] opt-level = 3 # Reduce complexity of a parser function that would trigger a locals limit in a wasm tool. # https://github.com/bytecodealliance/wasm-tools/blob/b5c3d98e40590512a3b12470ef358d5c7b983b15/crates/wasmparser/src/limits.rs#L29 [profile.dev.package.ruff_python_parser] opt-level = 1 # Use the `--profile profiling` flag to show symbols in release mode. # e.g. `cargo build --profile profiling` [profile.profiling] inherits = "release" debug = 1 # The profile that 'cargo dist' will build with. [profile.dist] inherits = "release" # Config for 'dist' [workspace.metadata.dist] # The preferred dist version to use in CI (Cargo.toml SemVer syntax) cargo-dist-version = "0.25.2-prerelease.3" # CI backends to support ci = "github" # The installers to generate for each app installers = ["shell", "powershell"] # The archive format to use for windows builds (defaults .zip) windows-archive = ".zip" # The archive format to use for non-windows builds (defaults .tar.xz) unix-archive = ".tar.gz" # Target platforms to build apps for (Rust target-triple syntax) targets = [ "aarch64-apple-darwin", "aarch64-pc-windows-msvc", "aarch64-unknown-linux-gnu", "aarch64-unknown-linux-musl", "arm-unknown-linux-musleabihf", "armv7-unknown-linux-gnueabihf", "armv7-unknown-linux-musleabihf", "i686-pc-windows-msvc", "i686-unknown-linux-gnu", "i686-unknown-linux-musl", "powerpc64-unknown-linux-gnu", "powerpc64le-unknown-linux-gnu", "s390x-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-pc-windows-msvc", "x86_64-unknown-linux-gnu", "x86_64-unknown-linux-musl", ] # Whether to auto-include files like READMEs, LICENSEs, and CHANGELOGs (default true) auto-includes = false # Whether dist should create a Github Release or use an existing draft create-release = true # Which actions to run on pull requests pr-run-mode = "skip" # Whether CI should trigger releases with dispatches instead of tag pushes dispatch-releases = true # Which phase dist should use to create the GitHub release github-release = "announce" # Whether CI should include auto-generated code to build local artifacts build-local-artifacts = false # Local artifacts jobs to run in CI local-artifacts-jobs = ["./build-binaries", "./build-docker"] # Publish jobs to run in CI publish-jobs = ["./publish-pypi", "./publish-wasm"] # Post-announce jobs to run in CI post-announce-jobs = ["./notify-dependents", "./publish-docs", "./publish-playground"] # Custom permissions for GitHub Jobs github-custom-job-permissions = { "build-docker" = { packages = "write", contents = "read" }, "publish-wasm" = { contents = "read", id-token = "write", packages = "write" } } # Whether to install an updater program install-updater = false # Path that installers should place binaries in install-path = ["$XDG_BIN_HOME/", "$XDG_DATA_HOME/../bin", "~/.local/bin"]