diff --git a/package.json b/package.json index 380403fb..e47a6bea 100644 --- a/package.json +++ b/package.json @@ -110,6 +110,13 @@ "default": "off", "description": "Traces the communication between VSCode and the languageServerHaskell service." }, + "languageServerHaskell.shakeThreads": { + "scope": "machine", + "type": ["integer", "null"], + "default": null, + "description": + "The number of Shake threads to use in ghcide or haskell-language-server. Leave empty for single threaded, or 0 for automatic." + }, "languageServerHaskell.logFile": { "scope": "resource", "type": "string", diff --git a/src/extension.ts b/src/extension.ts index ed36843a..8db2f05e 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -159,7 +159,7 @@ function activateHieNoCheck(context: ExtensionContext, folder: WorkspaceFolder, // be absolute. const serverPath = hieLaunchScript; - const runArgs: string[] = ['--lsp']; + let runArgs: string[] = ['--lsp']; let debugArgs: string[] = ['--lsp']; // ghcide does not accept -d and -l params @@ -172,6 +172,14 @@ function activateHieNoCheck(context: ExtensionContext, folder: WorkspaceFolder, debugArgs = debugArgs.concat(['-l', logFile]); } } + if (hieVariant === 'ghcide' || hieVariant === 'haskell-language-server') { + const shakeThreads: number | null = workspace.getConfiguration('languageServerHaskell', uri).shakeThreads; + if (shakeThreads !== null) { + const threadsArg = ['-j', shakeThreads.toString()]; + runArgs = runArgs.concat(threadsArg); + debugArgs = debugArgs.concat(threadsArg); + } + } // If the extension is launched in debug mode then the debug server options are used, // otherwise the run options are used.