{ lib , stdenv , callPackage , fetchFromGitHub , rustPlatform , CoreServices , cmake , libiconv , useMimalloc ? false , doCheck ? true }: rustPlatform.buildRustPackage rec { pname = "rust-analyzer-unwrapped"; version = "2022-08-01"; cargoSha256 = "sha256-7ZYrIFSIOlL1JojtaQBIvvlfvjZGlR40PKVjmEtMBMo="; src = fetchFromGitHub { owner = "rust-lang"; repo = "rust-analyzer"; rev = version; sha256 = "sha256-OUezy1BkIoqpkTE5wOtsjJ/Gy48Ql8EL1/t6MZzRkWw="; }; patches = [ # Code format check requires more dependencies but don't really matter for packaging. # So just ignore it. ./ignore-rustfmt-test.patch ]; buildAndTestSubdir = "crates/rust-analyzer"; nativeBuildInputs = lib.optional useMimalloc cmake; buildInputs = lib.optionals stdenv.isDarwin [ CoreServices libiconv ]; buildFeatures = lib.optional useMimalloc "mimalloc"; CFG_RELEASE = version; inherit doCheck; preCheck = lib.optionalString doCheck '' export RUST_SRC_PATH=${rustPlatform.rustLibSrc} ''; doInstallCheck = true; installCheckPhase = '' runHook preInstallCheck versionOutput="$($out/bin/rust-analyzer --version)" echo "'rust-analyzer --version' returns: $versionOutput" [[ "$versionOutput" == "rust-analyzer ${version}" ]] runHook postInstallCheck ''; passthru = { updateScript = ./update.sh; # FIXME: Pass overrided `rust-analyzer` once `buildRustPackage` also implements #119942 tests.neovim-lsp = callPackage ./test-neovim-lsp.nix { }; }; meta = with lib; { description = "A modular compiler frontend for the Rust language"; homepage = "https://rust-analyzer.github.io"; license = with licenses; [ mit asl20 ]; maintainers = with maintainers; [ oxalica ]; mainProgram = "rust-analyzer"; }; }