# This config uses a separate build directory for rust-analyzer,
# so that r-a's checks don't block user `x` commands and vice-verse.
# R-a's build directory is located in `build-rust-analyzer`.
#
# To download rustfmt and proc macro server for r-a run the following command
# (proc macro server is downloaded automatically with pretty much any command,
# this specific one also downloads rustfmt):
# ```
# x fmt --check
# ```
# (if that doesn't work -- do `x clean` first)
#
# NOTE: helix doesn't support getting workspace root in configs, for this config
# to work replace WORKSPACE_ROOT with the path to your rustc checkout

[language-server.rust-analyzer.config]
linkedProjects = [
    "Cargo.toml",
    "compiler/rustc_codegen_cranelift/Cargo.toml",
    "compiler/rustc_codegen_gcc/Cargo.toml",
    "library/Cargo.toml",
    "src/bootstrap/Cargo.toml",
    "src/tools/rust-analyzer/Cargo.toml",
]

[language-server.rust-analyzer.config.check]
invocationStrategy = "once"
overrideCommand = [
    "python3",
    "x.py",
    "check",
    "--json-output",
    "--build-dir",
    "build-rust-analyzer",
]

[language-server.rust-analyzer.config.rustfmt]
overrideCommand = [
    "WORKSPACE_ROOT/build/host/rustfmt/bin/rustfmt",
    "--edition=2024"
]

[language-server.rust-analyzer.config.procMacro]
server = "build/host/stage0/libexec/rust-analyzer-proc-macro-srv"
enable = true

[language-server.rust-analyzer.config.rustc]
source = "./Cargo.toml"

[language-server.rust-analyzer.config.cargo]
sysrootSrc = "./library"

[language-server.rust-analyzer.config.cargo.extraEnv]
RUSTC_BOOTSTRAP = "1"

[language-server.rust-analyzer.config.cargo.buildScripts]
enable = true
invocationStrategy = "once"
overrideCommand = [
    "python3",
    "x.py",
    "check",
    "--json-output",
    "--compile-time-deps",
    "--build-dir",
    "build-rust-analyzer",
]

[language-server.rust-analyzer.environment]
RUSTC = "WORKSPACE_ROOT/build/host/stage0/bin/rustc"
CARGO = "WORKSPACE_ROOT/build/host/stage0/bin/cargo"

[[language]]
name = "rust"
file-types = ["rs", "fixed", "pp", "mir"]
