diff --git a/src/client.ts b/src/client.ts index fc58dd4..e8f3363 100644 --- a/src/client.ts +++ b/src/client.ts @@ -9,7 +9,7 @@ import { IHierarchicalOutputChannel } from './utils' * The client launches its own server in a child process and cleans up after itself. */ export function makeClient(output: IHierarchicalOutputChannel, config: LanguageConfig): vscode.Disposable { - const { languageId, serverCommand } = config + const { languageId, serverCommand, serverArgs } = config if (!languageId || !serverCommand) return vscode.Disposable.from() const serverExecutable = { @@ -18,7 +18,7 @@ export function makeClient(output: IHierarchicalOutputChannel, config: LanguageC cwd: vscode.workspace.workspaceFolders?.[0].uri.fsPath, env: process.env }, - args: [], + args: serverArgs || [], transport: lsp.TransportKind.stdio } diff --git a/src/config.ts b/src/config.ts index 1944bac..efc5b79 100644 --- a/src/config.ts +++ b/src/config.ts @@ -53,6 +53,11 @@ export type LanguageConfig = { */ serverCommand?: string + /** + * A list of arguments passed to the `serverCommand`. + */ + serverArgs?: string[], + /** * A formatter shell command. * STDIN will be equal to the contents of the current text document, @@ -265,6 +270,7 @@ export namespace Config { lang.languageId = lang.languageId.trim() lang.serverCommand = lang.serverCommand?.trim() + lang.serverArgs = lang.serverArgs?.map(arg => arg.trim()) lang.formatCommand = lang.formatCommand?.trim() lang.onSaveCommand = lang.onSaveCommand?.trim() lang.apiSearchUrl = lang.apiSearchUrl?.trim() @@ -310,6 +316,7 @@ export namespace Config { return { languageId: mask.languageId, serverCommand: mask.serverCommand || base.serverCommand, + serverArgs: mask.serverArgs || base.serverArgs, formatCommand: mask.formatCommand || base.formatCommand, apiSearchUrl: mask.apiSearchUrl || base.apiSearchUrl, tags: arrayMerge(mask.tags || [], base.tags || [], tag => tag.file, tagMerge),