From f96da3040802b4a8f3505631e568d8922ea9e278 Mon Sep 17 00:00:00 2001 From: soiamsoNG <83182235@qq.com> Date: Wed, 2 Mar 2022 15:54:39 +0800 Subject: [PATCH 1/2] Add ignorePATH option --- package.json | 8 +++++++- src/extension.ts | 9 ++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 4f888dc1..91532c7c 100644 --- a/package.json +++ b/package.json @@ -167,6 +167,12 @@ "default": "keep-up-to-date", "markdownDescription": "Determine what to do when a new version of the language server is available." }, + "haskell.ignorePATH": { + "scope": "resource", + "type": "boolean", + "default": false, + "description": "Whether to ignore haskell-language-server on PATH" + }, "haskell.checkProject": { "scope": "resource", "type": "boolean", @@ -429,4 +435,4 @@ "which": "^2.0.1", "yauzl": "^2.10.0" } -} +} \ No newline at end of file diff --git a/src/extension.ts b/src/extension.ts index 2fa49d8d..d447e5a0 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -187,8 +187,15 @@ async function activateServerForFolder(context: ExtensionContext, uri: Uri, fold let serverExecutable; try { + let localServer: string | null; + if (workspace.getConfiguration('haskell').get('ignorePATH') === true) { + localServer = null; + logger.info('Ignoring haskell-language-server on PATH'); + } else { + localServer = findLocalServer(context, logger, uri, folder); + } // Try and find local installations first - serverExecutable = findManualExecutable(logger, uri, folder) ?? findLocalServer(context, logger, uri, folder); + serverExecutable = findManualExecutable(logger, uri, folder) ?? localServer; if (serverExecutable === null) { // If not, then try to download haskell-language-server binaries if it's selected serverExecutable = await downloadHaskellLanguageServer(context, logger, uri, folder); From 8c02da90226ca7ae4d8cc6a809a2747c17dfed2e Mon Sep 17 00:00:00 2001 From: soiamsoNG <83182235@qq.com> Date: Wed, 2 Mar 2022 20:05:29 +0800 Subject: [PATCH 2/2] Move ignorePATH logic to findLocalServer --- src/extension.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index d447e5a0..318d04ea 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -122,8 +122,15 @@ function findManualExecutable(logger: Logger, uri: Uri, folder?: WorkspaceFolder return exePath; } -/** Searches the PATH for whatever is set in serverVariant */ +/** Searches the PATH for whatever is set in serverVariant + * + * return null when **haskell.ignorePATH** set + */ function findLocalServer(context: ExtensionContext, logger: Logger, uri: Uri, folder?: WorkspaceFolder): string | null { + if (workspace.getConfiguration('haskell').get('ignorePATH') === true) { + logger.info('Ignoring haskell-language-server on PATH'); + return null; + } const exes: string[] = ['haskell-language-server-wrapper', 'haskell-language-server']; logger.info(`Searching for server executables ${exes.join(',')} in $PATH`); logger.info(`$PATH environment variable: ${process.env.PATH}`); @@ -187,15 +194,8 @@ async function activateServerForFolder(context: ExtensionContext, uri: Uri, fold let serverExecutable; try { - let localServer: string | null; - if (workspace.getConfiguration('haskell').get('ignorePATH') === true) { - localServer = null; - logger.info('Ignoring haskell-language-server on PATH'); - } else { - localServer = findLocalServer(context, logger, uri, folder); - } // Try and find local installations first - serverExecutable = findManualExecutable(logger, uri, folder) ?? localServer; + serverExecutable = findManualExecutable(logger, uri, folder) ?? findLocalServer(context, logger, uri, folder); if (serverExecutable === null) { // If not, then try to download haskell-language-server binaries if it's selected serverExecutable = await downloadHaskellLanguageServer(context, logger, uri, folder);