提交 5ad16183 编写于 作者: J Johannes Rieken

with incomplete suggest results, only re-trigger when still typing a word, #28400

上级 b40aaf4d
......@@ -402,8 +402,8 @@ export class SuggestModel implements IDisposable {
return;
}
if (ctx.column > this.context.column && this.completionModel.incomplete) {
// typed -> moved cursor RIGHT & incomple model -> retrigger
if (ctx.column > this.context.column && this.completionModel.incomplete && ctx.leadingWord.word.length !== 0) {
// typed -> moved cursor RIGHT & incomple model & still on a word -> retrigger
const { complete, incomplete } = this.completionModel.resolveIncompleteInfo();
this.trigger(this._state === State.Auto, true, incomplete, complete);
......
......@@ -377,4 +377,84 @@ suite('SuggestModel - TriggerAndCancelOracle', function () {
});
});
});
test('Incomplete suggestion results cause re-triggering when typing w/o further context, #28400 (1/2)', function () {
disposables.push(SuggestRegistry.register({ scheme: 'test' }, {
provideCompletionItems(doc, pos) {
return <ISuggestResult>{
incomplete: true,
suggestions: [{
label: 'foo',
type: 'property',
insertText: 'foo',
overwriteBefore: pos.column - 1
}]
};
}
}));
return withOracle((model, editor) => {
editor.getModel().setValue('foo');
editor.setPosition({ lineNumber: 1, column: 4 });
return assertEvent(model.onDidSuggest, () => {
model.trigger(false);
}, event => {
assert.equal(event.auto, false);
assert.equal(event.completionModel.incomplete, true);
assert.equal(event.completionModel.items.length, 1);
return assertEvent(model.onDidCancel, () => {
editor.trigger('keyboard', Handler.Type, { text: ';' });
}, event => {
assert.equal(event.retrigger, false);
});
});
});
});
test('Incomplete suggestion results cause re-triggering when typing w/o further context, #28400 (2/2)', function () {
disposables.push(SuggestRegistry.register({ scheme: 'test' }, {
provideCompletionItems(doc, pos) {
return <ISuggestResult>{
incomplete: true,
suggestions: [{
label: 'foo;',
type: 'property',
insertText: 'foo',
overwriteBefore: pos.column - 1
}]
};
}
}));
return withOracle((model, editor) => {
editor.getModel().setValue('foo');
editor.setPosition({ lineNumber: 1, column: 4 });
return assertEvent(model.onDidSuggest, () => {
model.trigger(false);
}, event => {
assert.equal(event.auto, false);
assert.equal(event.completionModel.incomplete, true);
assert.equal(event.completionModel.items.length, 1);
return assertEvent(model.onDidSuggest, () => {
// while we cancel incrementally enriching the set of
// completions we still filter against those that we have
// until now
editor.trigger('keyboard', Handler.Type, { text: ';' });
}, event => {
assert.equal(event.auto, false);
assert.equal(event.completionModel.incomplete, true);
assert.equal(event.completionModel.items.length, 1);
});
});
});
});
});
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册