Skip to content

Commit

Permalink
fix: completion for strings with trigger character (#492)
Browse files Browse the repository at this point in the history
  • Loading branch information
DeMoorJasper committed Jun 13, 2022
1 parent 2aae01c commit 76bf9a4
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 3 deletions.
23 changes: 22 additions & 1 deletion src/completion.ts
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,11 @@ export function asCompletionItem(entry: tsp.CompletionEntry, file: string, posit
}
}
}
if (insertText && replacementRange) {
if (replacementRange) {
if (!insertText) {
insertText = item.label;
}

item.textEdit = lsp.TextEdit.replace(replacementRange, insertText);
} else {
item.insertText = insertText;
Expand Down Expand Up @@ -377,3 +381,20 @@ function asDetail({ displayParts, sourceDisplay, source: deprecatedSource }: tsp
}
return result.join('\n');
}

export function getCompletionTriggerCharacter(character: string | undefined): tsp.CompletionsTriggerCharacter | undefined {
switch (character) {
case '@':
case '#':
case ' ':
case '.':
case '"':
case '\'':
case '`':
case '/':
case '<':
return character;
default:
return undefined;
}
}
34 changes: 34 additions & 0 deletions src/lsp-server.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -323,6 +323,40 @@ describe('completion', () => {
assert.strictEqual(resolvedItem.insertText, 'readFile(${1:path}, ${2:options}, ${3:callback})$0');
server.didCloseTextDocument({ textDocument: doc });
}).timeout(10000);

it('includes textEdit for string completion', async () => {
const doc = {
uri: uri('bar.ts'),
languageId: 'typescript',
version: 1,
text: `
function test(value: "fs/read" | "hello/world") {
return true;
}
test("fs/")
`
};
server.didOpenTextDocument({ textDocument: doc });
const proposals = await server.completion({
textDocument: doc,
position: positionAfter(doc, 'test("fs/'),
context: {
triggerCharacter: '/',
triggerKind: 2
}
});
assert.isNotNull(proposals);
const completion = proposals!.items.find(completion => completion.label === 'fs/read');
assert.strictEqual(completion!.label, 'fs/read');
assert.deepStrictEqual(completion!.textEdit, {
range: {
start: { line: 5, character: 20 },
end: { line: 5, character: 23 }
},
newText: 'fs/read'
});
}).timeout(10000);
});

describe('diagnostics', () => {
Expand Down
6 changes: 4 additions & 2 deletions src/lsp-server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ import {
pathToUri, toTextEdit, toFileRangeRequestArgs, asPlainText, normalizePath
} from './protocol-translation';
import { LspDocuments, LspDocument } from './document';
import { asCompletionItem, asResolvedCompletionItem } from './completion';
import { asCompletionItem, asResolvedCompletionItem, getCompletionTriggerCharacter } from './completion';
import { asSignatureHelp } from './hover';
import { Commands } from './commands';
import { provideQuickFix } from './quickfix';
Expand Down Expand Up @@ -588,7 +588,9 @@ export class LspServer {
const result = await this.interuptDiagnostics(() => this.tspClient.request(CommandTypes.CompletionInfo, {
file,
line: params.position.line + 1,
offset: params.position.character + 1
offset: params.position.character + 1,
triggerCharacter: getCompletionTriggerCharacter(params.context?.triggerCharacter),
triggerKind: params.context?.triggerKind
}));
const { body } = result;
const completions = (body ? body.entries : [])
Expand Down

0 comments on commit 76bf9a4

Please sign in to comment.