提交 ba9f4099 编写于 作者: J Johannes Rieken

fix #62335

上级 a6fe9800
......@@ -88,6 +88,8 @@ export class SnippetCompletionProvider implements CompletionItemProvider {
let pos = { lineNumber: position.lineNumber, column: 1 };
let lineOffsets: number[] = [];
let linePrefixLow = model.getLineContent(position.lineNumber).substr(0, position.column - 1).toLowerCase();
let endsInWhitespace = linePrefixLow.match(/\s$/);
while (pos.column < position.column) {
let word = model.getWordAtPosition(pos);
if (word) {
......@@ -108,20 +110,28 @@ export class SnippetCompletionProvider implements CompletionItemProvider {
pos.column += 1;
}
}
if (lineOffsets.length === 0) {
// no interesting spans found -> pick all snippets
suggestions = snippets.map(snippet => new SnippetCompletion(snippet, Range.fromPositions(position)));
}
else {
let consumed = new Set<Snippet>();
let availableSnippets = new Set<Snippet>();
snippets.forEach(availableSnippets.add, availableSnippets);
suggestions = [];
for (let start of lineOffsets) {
for (const snippet of snippets) {
if (!consumed.has(snippet) && matches(linePrefixLow, start, snippet.prefixLow, 0)) {
availableSnippets.forEach(snippet => {
if (matches(linePrefixLow, start, snippet.prefixLow, 0)) {
suggestions.push(new SnippetCompletion(snippet, Range.fromPositions(position.delta(0, -(linePrefixLow.length - start)), position)));
consumed.add(snippet);
availableSnippets.delete(snippet);
}
}
});
}
if (endsInWhitespace) {
// add remaing snippets when the current prefix ends in whitespace
availableSnippets.forEach(snippet => {
suggestions.push(new SnippetCompletion(snippet, Range.fromPositions(position)));
});
}
}
......
......@@ -352,4 +352,23 @@ suite('SnippetsService', function () {
toDispose.dispose();
});
test('No snippets shown when triggering completions at whitespace on line that already has text #62335', async function () {
snippetService = new SimpleSnippetService([new Snippet(
['fooLang'],
'bug',
'bug',
'',
'second',
'',
SnippetSource.User
)]);
const provider = new SnippetCompletionProvider(modeService, snippetService);
let model = TextModel.createFromString('a ', undefined, modeService.getLanguageIdentifier('fooLang'));
let result = await provider.provideCompletionItems(model, new Position(1, 3));
assert.equal(result.suggestions.length, 1);
});
});
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册