about summary refs log tree commit diff
path: root/nixpkgs/pkgs/misc/vscode-extensions/rust-analyzer
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/misc/vscode-extensions/rust-analyzer')
-rw-r--r--nixpkgs/pkgs/misc/vscode-extensions/rust-analyzer/build-deps/package.json26
-rw-r--r--nixpkgs/pkgs/misc/vscode-extensions/rust-analyzer/default.nix49
2 files changed, 75 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/misc/vscode-extensions/rust-analyzer/build-deps/package.json b/nixpkgs/pkgs/misc/vscode-extensions/rust-analyzer/build-deps/package.json
new file mode 100644
index 000000000000..4af15f4619ea
--- /dev/null
+++ b/nixpkgs/pkgs/misc/vscode-extensions/rust-analyzer/build-deps/package.json
@@ -0,0 +1,26 @@
+{
+  "name": "rust-analyzer",
+  "version": "0.4.0-dev",
+  "dependencies": {
+    "node-fetch": "^2.6.1",
+    "vscode-languageclient": "7.0.0-next.9",
+    "@rollup/plugin-commonjs": "^13.0.2",
+    "@rollup/plugin-node-resolve": "^8.4.0",
+    "@types/glob": "^7.1.3",
+    "@types/mocha": "^7.0.2",
+    "@types/node": "~12.7.0",
+    "@types/node-fetch": "^2.5.7",
+    "@types/vscode": "^1.47.1",
+    "@typescript-eslint/eslint-plugin": "^3.10.1",
+    "@typescript-eslint/parser": "^3.10.1",
+    "eslint": "^7.8.0",
+    "glob": "^7.1.6",
+    "mocha": "^8.1.3",
+    "rollup": "^2.26.9",
+    "tslib": "^2.0.1",
+    "typescript": "^3.9.7",
+    "typescript-formatter": "^7.2.2",
+    "vsce": "^1.79.5",
+    "vscode-test": "^1.4.0"
+  }
+}
diff --git a/nixpkgs/pkgs/misc/vscode-extensions/rust-analyzer/default.nix b/nixpkgs/pkgs/misc/vscode-extensions/rust-analyzer/default.nix
new file mode 100644
index 000000000000..d19027fa5762
--- /dev/null
+++ b/nixpkgs/pkgs/misc/vscode-extensions/rust-analyzer/default.nix
@@ -0,0 +1,49 @@
+# Update script: pkgs/development/tools/rust/rust-analyzer/update.sh
+{ lib, stdenv, vscode-utils, jq, rust-analyzer, nodePackages
+, setDefaultServerPath ? true
+}:
+
+let
+  pname = "rust-analyzer";
+  publisher = "matklad";
+
+  # Follow the unstable version of rust-analyzer, since the extension is not stable yet.
+  inherit (rust-analyzer) version;
+
+  build-deps = nodePackages."rust-analyzer-build-deps-../../misc/vscode-extensions/rust-analyzer/build-deps";
+  # FIXME: Making a new derivation to link `node_modules` and run `npm run package`
+  # will cause a build failure.
+  vsix = build-deps.override {
+    src = "${rust-analyzer.src}/editors/code";
+    outputs = [ "vsix" "out" ];
+
+    postInstall = ''
+      npm run package
+      mkdir $vsix
+      cp ${pname}.vsix $vsix/${pname}.zip
+    '';
+  };
+
+in vscode-utils.buildVscodeExtension {
+  inherit version vsix;
+  name = "${pname}-${version}";
+  src = "${vsix}/${pname}.zip";
+  vscodeExtUniqueId = "${publisher}.${pname}";
+
+  nativeBuildInputs = lib.optional setDefaultServerPath jq;
+
+  preInstall = lib.optionalString setDefaultServerPath ''
+    jq '.contributes.configuration.properties."rust-analyzer.serverPath".default = $s' \
+      --arg s "${rust-analyzer}/bin/rust-analyzer" \
+      package.json >package.json.new
+    mv package.json.new package.json
+  '';
+
+  meta = with lib; {
+    description = "An alternative rust language server to the RLS";
+    homepage = "https://github.com/rust-analyzer/rust-analyzer";
+    license = with licenses; [ mit asl20 ];
+    maintainers = with maintainers; [ oxalica ];
+    platforms = platforms.all;
+  };
+}