about summary refs log tree commit diff
path: root/nixpkgs/pkgs/misc/vscode-extensions/python/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/misc/vscode-extensions/python/default.nix')
-rw-r--r--nixpkgs/pkgs/misc/vscode-extensions/python/default.nix79
1 files changed, 79 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/misc/vscode-extensions/python/default.nix b/nixpkgs/pkgs/misc/vscode-extensions/python/default.nix
new file mode 100644
index 000000000000..00f97f373072
--- /dev/null
+++ b/nixpkgs/pkgs/misc/vscode-extensions/python/default.nix
@@ -0,0 +1,79 @@
+{ lib, stdenv, fetchurl, vscode-utils, extractNuGet
+, icu, curl, openssl, lttng-ust, autoPatchelfHook
+, pythonUseFixed ? false, python  # When `true`, the python default setting will be fixed to specified.
+                                  # Use version from `PATH` for default setting otherwise.
+                                  # Defaults to `false` as we expect it to be project specific most of the time.
+, ctagsUseFixed ? true, ctags     # When `true`, the ctags default setting will be fixed to specified.
+                                  # Use version from `PATH` for default setting otherwise.
+                                  # Defaults to `true` as usually not defined on a per projet basis.
+}:
+
+assert pythonUseFixed -> null != python;
+assert ctagsUseFixed -> null != ctags;
+
+let
+  pythonDefaultsTo = if pythonUseFixed then "${python}/bin/python" else "python";
+  ctagsDefaultsTo = if ctagsUseFixed then "${ctags}/bin/ctags" else "ctags";
+
+  # The arch tag comes from 'PlatformName' defined here:
+  # https://github.com/Microsoft/vscode-python/blob/master/src/client/activation/types.ts
+  arch =
+    if stdenv.isLinux && stdenv.isx86_64 then "linux-x64"
+    else if stdenv.isDarwin then "osx-x64"
+    else throw "Only x86_64 Linux and Darwin are supported.";
+
+  languageServerSha256 = {
+    linux-x64 = "1w3y0sn6ijk1vspi4lailg1q1iy9lwslhx92c7jbrrkiaszvaqwn";
+    osx-x64 = "11l4fic8cvgh1l3dq6qxi51pwhcic79zf13rhyajl5w5g13caafp";
+  }.${arch};
+
+  # version is languageServerVersion in the package.json
+  languageServer = extractNuGet rec {
+    name = "Python-Language-Server";
+    version = "0.4.24";
+
+    src = fetchurl {
+      url = "https://pvsc.azureedge.net/python-language-server-stable/${name}-${arch}.${version}.nupkg";
+      sha256 = languageServerSha256;
+    };
+  };
+in vscode-utils.buildVscodeMarketplaceExtension {
+  mktplcRef = {
+    name = "python";
+    publisher = "ms-python";
+    version = "2019.10.44104";
+    sha256 = "1k0wws430psrl8zp9ky5mifbg02qmh2brjyqk5k9pn3y1dks5gns";
+  };
+
+  buildInputs = [
+    icu
+    curl
+    openssl
+    lttng-ust
+  ];
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+  ];
+
+  postPatch = ''
+    # Patch `packages.json` so that nix's *python* is used as default value for `python.pythonPath`.
+    substituteInPlace "./package.json" \
+      --replace "\"default\": \"python\"" "\"default\": \"${pythonDefaultsTo}\""
+
+    # Patch `packages.json` so that nix's *ctags* is used as default value for `python.workspaceSymbols.ctagsPath`.
+    substituteInPlace "./package.json" \
+      --replace "\"default\": \"ctags\"" "\"default\": \"${ctagsDefaultsTo}\""
+  '';
+
+  postInstall = ''
+    mkdir -p "$out/$installPrefix/languageServer.${languageServer.version}"
+    cp -R --no-preserve=ownership ${languageServer}/* "$out/$installPrefix/languageServer.${languageServer.version}"
+    chmod -R +wx "$out/$installPrefix/languageServer.${languageServer.version}"
+  '';
+
+  meta = with lib; {
+    license = licenses.mit;
+    maintainers = [ maintainers.jraygauthier ];
+  };
+}