From dc532c0a302e76c00520ed6b5222e8fbbc7b69e1 Mon Sep 17 00:00:00 2001 From: Dmitrii Voinikov Date: Mon, 17 Jan 2022 18:35:54 +0300 Subject: [PATCH 1/3] fix: call configure request before completion --- src/lsp-server.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/lsp-server.ts b/src/lsp-server.ts index 227bca99..01053e49 100644 --- a/src/lsp-server.ts +++ b/src/lsp-server.ts @@ -582,6 +582,10 @@ export class LspServer { throw new Error('The document should be opened for completion, file: ' + file); } + await this.tspClient.request(CommandTypes.Configure, { + formatOptions: this.getWorkspacePreferencesForDocument(file).format + }); + try { const result = await this.interuptDiagnostics(() => this.tspClient.request(CommandTypes.CompletionInfo, { file, From a4b5a9ce93e406d4330e64a65a990646ebf3d954 Mon Sep 17 00:00:00 2001 From: Dmitrii Voinikov Date: Mon, 17 Jan 2022 21:53:42 +0300 Subject: [PATCH 2/3] fix: call configure before completion resolve Completion should use provided formatting settings --- src/lsp-server.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/lsp-server.ts b/src/lsp-server.ts index 01053e49..a9d27bc3 100644 --- a/src/lsp-server.ts +++ b/src/lsp-server.ts @@ -582,10 +582,6 @@ export class LspServer { throw new Error('The document should be opened for completion, file: ' + file); } - await this.tspClient.request(CommandTypes.Configure, { - formatOptions: this.getWorkspacePreferencesForDocument(file).format - }); - try { const result = await this.interuptDiagnostics(() => this.tspClient.request(CommandTypes.CompletionInfo, { file, @@ -609,6 +605,9 @@ export class LspServer { async completionResolve(item: lsp.CompletionItem): Promise { this.logger.log('completion/resolve', item); + await this.tspClient.request(CommandTypes.Configure, { + formatOptions: this.getWorkspacePreferencesForDocument(item.data.file).format + }); const { body } = await this.interuptDiagnostics(() => this.tspClient.request(CommandTypes.CompletionDetails, item.data)); const details = body && body.length && body[0]; if (!details) { From c5865bc142b9512268577db7f0a8050e8f7c8186 Mon Sep 17 00:00:00 2001 From: Dmitrii Voinikov Date: Tue, 18 Jan 2022 13:56:24 +0300 Subject: [PATCH 3/3] fix: add test for configure before completion resolve --- src/lsp-server.spec.ts | 55 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/src/lsp-server.spec.ts b/src/lsp-server.spec.ts index fcdb84aa..96799b03 100644 --- a/src/lsp-server.spec.ts +++ b/src/lsp-server.spec.ts @@ -246,6 +246,61 @@ describe('completion', () => { server.didCloseTextDocument({ textDocument: doc }); }).timeout(10000); + it('resolves text edit for auto-import completion in right format', async () => { + server.didChangeConfiguration({ + settings: { + typescript: { + format: { + semicolons: 'remove', + insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces: false + } + } + } + }); + + const doc = { + uri: uri('bar.ts'), + languageId: 'typescript', + version: 1, + text: 'readFile' + }; + server.didOpenTextDocument({ textDocument: doc }); + const proposals = await server.completion({ textDocument: doc, position: positionAfter(doc, 'readFile') }); + assert.isNotNull(proposals); + const completion = proposals!.items.find(completion => completion.label === 'readFile'); + assert.isDefined(completion); + const resolvedItem = await server.completionResolve(completion!); + assert.deepEqual(resolvedItem.additionalTextEdits, [ + { + newText: 'import {readFile} from "fs"\n\n', + range: { + end: { + character: 0, + line: 0 + }, + start: { + character: 0, + line: 0 + } + } + } + ]); + server.didCloseTextDocument({ textDocument: doc }); + server.didChangeConfiguration({ + settings: { + completions: { + completeFunctionCalls: true + }, + typescript: { + format: { + semicolons: 'ignore', + insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces: true + } + } + } + }); + }).timeout(10000); + it('resolves a snippet for method completion', async () => { const doc = { uri: uri('bar.ts'),