Unverified Commit 3ff18d4c authored by Tatu Argillander's avatar Tatu Argillander
Browse files

vtsls: init at 0.2.6

parent c58c2052
Loading
Loading
Loading
Loading
+93 −0
Original line number Diff line number Diff line
{
  stdenv,
  lib,
  fetchFromGitHub,
  nodejs_22,
  gitMinimal,
  pnpm_8,
}:

stdenv.mkDerivation (finalAttrs: {
  pname = "vtsls";
  version = "0.2.6";

  src = fetchFromGitHub {
    owner = "yioneko";
    repo = "vtsls";
    rev = "server-v${finalAttrs.version}";
    hash = "sha256-HCi9WLh4IEfhgkQNUVk6IGkQfYagg805Rix78zG6xt0=";
    fetchSubmodules = true;
  };

  nativeBuildInputs = [
    nodejs_22
    # patches are applied with git during build
    gitMinimal
    pnpm_8.configHook
  ];

  buildInputs = [ nodejs_22 ];

  pnpmWorkspaces = [ "@vtsls/language-server" ];

  pnpmDeps = pnpm_8.fetchDeps {
    inherit (finalAttrs)
      pnpmWorkspaces
      pname
      src
      version
      ;
    hash = "sha256-4XxQ0Z2atTBItrD9iY7q5rJaCmb1EeDBvQ5+L3ceRXI=";
  };

  # Patches to get submodule sha from file instead of 'git submodule status'
  patches = [ ./vtsls-build-patch.patch ];

  # Skips manual confirmations during build
  CI = true;

  buildPhase = ''
    runHook preBuild

    # During build vtsls needs a working git installation.
    git config --global user.name nixbld
    git config --global user.email nixbld@example.com

    # during build this sha is used as a marker to skip applying patches and
    # copying files, which doesn't matter in this case
    echo "dummysha" > ./packages/service/HEAD

    # Requires a git repository during build
    git init packages/service/vscode

    # Depends on the @vtsls/language-service workspace
    # '--workspace-concurrency=1' helps debug failing builds.
    pnpm --filter "@vtsls/language-server..." build

    # These trash deterministic builds. During build the whole directory is
    # copied to another path.
    rm -rf packages/service/vscode/.git
    rm -rf packages/service/src/typescript-language-features/.git

    runHook postBuild
  '';

  installPhase = ''
    runHook preInstall

    mkdir -p $out/{bin,lib/vtsls-language-server}
    cp -r {packages,node_modules} $out/lib/vtsls-language-server
    ln -s $out/lib/vtsls-language-server/packages/server/bin/vtsls.js $out/bin/vtsls

    runHook postInstall
  '';

  meta = {
    description = "LSP wrapper for typescript extension of vscode.";
    homepage = "https://github.com/yioneko/vtsls";
    license = lib.licenses.mit;
    maintainers = with lib.maintainers; [ kuglimon ];
    mainProgram = "vtsls";
    platforms = lib.platforms.all;
  };
})
+18 −0
Original line number Diff line number Diff line
diff --git a/packages/service/scripts/patch.js b/packages/service/scripts/patch.js
index 2d01f3a..f26c216 100644
--- a/packages/service/scripts/patch.js
+++ b/packages/service/scripts/patch.js
@@ -13,11 +13,7 @@ const vscTsExtPath = path.resolve(__dirname, "../vscode/extensions/typescript-la
 const tsExtPath = path.resolve(__dirname, "../src/typescript-language-features");

 async function getVscodeSha() {
-  const { stdout } = await exec("git", ["submodule", "status", "vscode"], {
-    cwd: path.resolve(__dirname, "../"),
-  });
-  const commit = stdout.match(/^\s*([^\s]+)\s/)[1];
-  return commit;
+  return await fs.readFile('./HEAD', { encoding: 'utf8' });
 }

 /**