summary refs log tree commit diff
diff options
context:
space:
mode:
authoroxalica <oxalicc@pm.me>2021-08-08 02:19:19 +0800
committerRaphael Megzari <raphael@megzari.com>2021-08-10 15:16:20 +0900
commitcd9ed036d6d744de8c6ce6879a591286d730e9bc (patch)
tree619214fe6c7e5d895ffa5686f30b39ac84b2ea39
parent44b130d392ac6391d801372fc2a8dbf8b655f9db (diff)
downloadnixpkgs-cd9ed036d6d744de8c6ce6879a591286d730e9bc.tar
nixpkgs-cd9ed036d6d744de8c6ce6879a591286d730e9bc.tar.gz
nixpkgs-cd9ed036d6d744de8c6ce6879a591286d730e9bc.tar.bz2
nixpkgs-cd9ed036d6d744de8c6ce6879a591286d730e9bc.tar.lz
nixpkgs-cd9ed036d6d744de8c6ce6879a591286d730e9bc.tar.xz
nixpkgs-cd9ed036d6d744de8c6ce6879a591286d730e9bc.tar.zst
nixpkgs-cd9ed036d6d744de8c6ce6879a591286d730e9bc.zip
vscode-extensions.matklad.rust-analyzer: use extension version and apply patches
-rw-r--r--pkgs/development/node-packages/node-packages.nix2
-rwxr-xr-xpkgs/development/tools/rust/rust-analyzer/update.sh24
-rw-r--r--pkgs/misc/vscode-extensions/rust-analyzer/build-deps/package.json2
-rw-r--r--pkgs/misc/vscode-extensions/rust-analyzer/default.nix23
4 files changed, 37 insertions, 14 deletions
diff --git a/pkgs/development/node-packages/node-packages.nix b/pkgs/development/node-packages/node-packages.nix
index 35bb2db3f10..b344fdc4c5f 100644
--- a/pkgs/development/node-packages/node-packages.nix
+++ b/pkgs/development/node-packages/node-packages.nix
@@ -111001,7 +111001,7 @@ in
   "rust-analyzer-build-deps-../../misc/vscode-extensions/rust-analyzer/build-deps" = nodeEnv.buildNodePackage {
     name = "rust-analyzer";
     packageName = "rust-analyzer";
-    version = "0.4.0-dev";
+    version = "0.2.694";
     src = ../../misc/vscode-extensions/rust-analyzer/build-deps;
     dependencies = [
       sources."@babel/code-frame-7.12.11"
diff --git a/pkgs/development/tools/rust/rust-analyzer/update.sh b/pkgs/development/tools/rust/rust-analyzer/update.sh
index 893477735f5..91bde976ebd 100755
--- a/pkgs/development/tools/rust/rust-analyzer/update.sh
+++ b/pkgs/development/tools/rust/rust-analyzer/update.sh
@@ -1,5 +1,5 @@
 #!/usr/bin/env nix-shell
-#!nix-shell -i bash -p curl jq nix-prefetch
+#!nix-shell -i bash -p curl jq nix-prefetch libarchive
 set -euo pipefail
 cd "$(dirname "$0")"
 owner=rust-analyzer
@@ -46,19 +46,31 @@ sed "s#cargoSha256 = \".*\"#cargoSha256 = \"$cargo_sha256\"#" \
 
 # Update vscode extension
 
+extension_ver=$(curl "https://github.com/rust-analyzer/rust-analyzer/releases/download/$ver/rust-analyzer.vsix" -L |
+    bsdtar -xf - --to-stdout extension/package.json | # Use bsdtar to extract vsix(zip).
+    jq --raw-output '.version')
+echo "Extension version: $extension_ver"
+
 build_deps="../../../../misc/vscode-extensions/rust-analyzer/build-deps"
 # We need devDependencies to build vsix.
-jq '{ name, version, dependencies: (.dependencies + .devDependencies) }' "$node_src/package.json" \
+jq '{ name, version: $ver, dependencies: (.dependencies + .devDependencies) }' "$node_src/package.json" \
+    --arg ver "$extension_ver" \
     >"$build_deps/package.json.new"
 
 # FIXME: rollup@2.55.0 breaks the build: https://github.com/rollup/rollup/issues/4195
 sed 's/"rollup": ".*"/"rollup": "=2.51.1"/' --in-place "$build_deps/package.json.new"
 
-if cmp --quiet "$build_deps"/package.json{.new,}; then
-    echo "package.json not changed, skip updating nodePackages"
-    rm "$build_deps"/package.json.new
+old_deps="$(jq '.dependencies' "$build_deps"/package.json)"
+new_deps="$(jq '.dependencies' "$build_deps"/package.json.new)"
+if [[ "$old_deps" == "$new_deps" ]]; then
+    echo "package.json dependencies not changed, do simple version change"
+
+    sed -E '/^  "rust-analyzer-build-deps/,+3 s/version = ".*"/version = "'"$extension_ver"'"/' \
+        --in-place ../../../node-packages/node-packages.nix
+    mv "$build_deps"/package.json{.new,}
+
 else
-    echo "package.json changed, updating nodePackages"
+    echo "package.json dependencies changed, updating nodePackages"
     mv "$build_deps"/package.json{.new,}
 
     pushd "../../../node-packages"
diff --git a/pkgs/misc/vscode-extensions/rust-analyzer/build-deps/package.json b/pkgs/misc/vscode-extensions/rust-analyzer/build-deps/package.json
index 89fc84022f6..a2b804d69d0 100644
--- a/pkgs/misc/vscode-extensions/rust-analyzer/build-deps/package.json
+++ b/pkgs/misc/vscode-extensions/rust-analyzer/build-deps/package.json
@@ -1,6 +1,6 @@
 {
   "name": "rust-analyzer",
-  "version": "0.4.0-dev",
+  "version": "0.2.694",
   "dependencies": {
     "https-proxy-agent": "^5.0.0",
     "node-fetch": "^2.6.1",
diff --git a/pkgs/misc/vscode-extensions/rust-analyzer/default.nix b/pkgs/misc/vscode-extensions/rust-analyzer/default.nix
index 143a74fe82d..479f9f4c6ea 100644
--- a/pkgs/misc/vscode-extensions/rust-analyzer/default.nix
+++ b/pkgs/misc/vscode-extensions/rust-analyzer/default.nix
@@ -12,9 +12,6 @@ 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.
@@ -22,13 +19,27 @@ let
     src = "${rust-analyzer.src}/editors/code";
     outputs = [ "vsix" "out" ];
 
+    releaseTag = rust-analyzer.version;
+
+    nativeBuildInputs = [ jq moreutils ];
+
+    # Follows https://github.com/rust-analyzer/rust-analyzer/blob/41949748a6123fd6061eb984a47f4fe780525e63/xtask/src/dist.rs#L39-L65
     postInstall = ''
-      npm run package
-      mkdir $vsix
-      cp ${pname}.vsix $vsix/${pname}.zip
+      jq '
+        .version = $ENV.version |
+        .releaseTag = $ENV.releaseTag |
+        .enableProposedApi = false |
+        walk(del(.["$generated-start"]?) | del(.["$generated-end"]?))
+      ' package.json | sponge package.json
+
+      mkdir -p $vsix
+      npx vsce package -o $vsix/${pname}.zip
     '';
   };
 
+  # Use the plugin version as in vscode marketplace, updated by update script.
+  inherit (vsix) version;
+
 in
 vscode-utils.buildVscodeExtension {
   inherit version vsix;