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'), diff --git a/src/lsp-server.ts b/src/lsp-server.ts index 227bca99..a9d27bc3 100644 --- a/src/lsp-server.ts +++ b/src/lsp-server.ts @@ -605,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) {