summary refs log tree commit diff
path: root/pkgs/development/tools/rust/rust-analyzer/generic.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/tools/rust/rust-analyzer/generic.nix')
-rw-r--r--pkgs/development/tools/rust/rust-analyzer/generic.nix45
1 files changed, 45 insertions, 0 deletions
diff --git a/pkgs/development/tools/rust/rust-analyzer/generic.nix b/pkgs/development/tools/rust/rust-analyzer/generic.nix
new file mode 100644
index 00000000000..de755ec17ff
--- /dev/null
+++ b/pkgs/development/tools/rust/rust-analyzer/generic.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, darwin
+, useJemalloc ? false
+, doCheck ? true
+
+# Version specific args
+, rev, version, sha256, cargoSha256 }:
+
+rustPlatform.buildRustPackage {
+  pname = "rust-analyzer-unwrapped";
+  inherit version cargoSha256;
+
+  src = fetchFromGitHub {
+    owner = "rust-analyzer";
+    repo = "rust-analyzer";
+    inherit rev sha256;
+  };
+
+  preBuild = "pushd crates/rust-analyzer";
+  # Do not checking other crates in checkPhase.
+  preInstall = "popd";
+
+  cargoBuildFlags = lib.optional useJemalloc "--features=jemalloc";
+
+  nativeBuildInputs = lib.optionals doCheck [ rustPlatform.rustcSrc ];
+
+  buildInputs = lib.optionals stdenv.hostPlatform.isDarwin
+    [ darwin.apple_sdk.frameworks.CoreServices ];
+
+  inherit doCheck;
+  # Skip tests running `rustup` for `cargo fmt`.
+  preCheck = ''
+    fakeRustup=$(mktemp -d)
+    ln -s $(command -v true) $fakeRustup/rustup
+    export PATH=$PATH''${PATH:+:}$fakeRustup
+    export RUST_SRC_PATH=${rustPlatform.rustcSrc}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "An experimental modular compiler frontend for the Rust language";
+    homepage = "https://github.com/rust-analyzer/rust-analyzer";
+    license = with licenses; [ mit asl20 ];
+    maintainers = with maintainers; [ oxalica ];
+    platforms = platforms.all;
+  };
+}