Skip to content

Commit 71deec3

Browse files
committed
make sure to reuse snippet completions when being told to do so
re microsoft#173244
1 parent fcafbd6 commit 71deec3

File tree

2 files changed

+70
-1
lines changed

2 files changed

+70
-1
lines changed

src/vs/editor/contrib/suggest/browser/suggest.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,12 @@ export async function provideSuggestionItems(
266266
if (!_snippetSuggestSupport || options.kindFilter.has(languages.CompletionItemKind.Snippet)) {
267267
return;
268268
}
269+
// we have items from a previous session that we can reuse
270+
const reuseItems = options.providerItemsToReuse.get(_snippetSuggestSupport);
271+
if (reuseItems) {
272+
reuseItems.forEach(item => result.push(item));
273+
return;
274+
}
269275
if (options.providerFilter.size > 0 && !options.providerFilter.has(_snippetSuggestSupport)) {
270276
return;
271277
}

src/vs/editor/contrib/suggest/test/browser/suggestModel.test.ts

Lines changed: 64 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*--------------------------------------------------------------------------------------------*/
55
import * as assert from 'assert';
66
import { Event } from 'vs/base/common/event';
7-
import { Disposable, DisposableStore } from 'vs/base/common/lifecycle';
7+
import { Disposable, DisposableStore, toDisposable } from 'vs/base/common/lifecycle';
88
import { URI } from 'vs/base/common/uri';
99
import { mock } from 'vs/base/test/common/mock';
1010
import { CoreEditingCommands } from 'vs/editor/browser/coreCommands';
@@ -38,6 +38,7 @@ import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace
3838
import { LanguageFeaturesService } from 'vs/editor/common/services/languageFeaturesService';
3939
import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures';
4040
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
41+
import { setSnippetSuggestSupport } from 'vs/editor/contrib/suggest/browser/suggest';
4142

4243

4344
function createMockEditor(model: TextModel, languageFeaturesService: ILanguageFeaturesService): ITestCodeEditor {
@@ -1124,4 +1125,66 @@ suite('SuggestModel - TriggerAndCancelOracle', function () {
11241125
});
11251126
});
11261127
});
1128+
1129+
test('Snippets gone from IntelliSense #173244', function () {
1130+
1131+
const old = setSnippetSuggestSupport({
1132+
provideCompletionItems(doc, pos, ctx) {
1133+
return {
1134+
suggestions: [{
1135+
label: 'log',
1136+
kind: CompletionItemKind.Snippet,
1137+
insertText: 'log',
1138+
range: getDefaultSuggestRange(doc, pos)
1139+
}]
1140+
};
1141+
}
1142+
});
1143+
disposables.add(toDisposable(() => old && setSnippetSuggestSupport(old)));
1144+
1145+
disposables.add(registry.register({ scheme: 'test' }, {
1146+
triggerCharacters: ['.'],
1147+
provideCompletionItems(doc, pos, ctx) {
1148+
return {
1149+
suggestions: [{
1150+
label: 'locals',
1151+
kind: CompletionItemKind.Property,
1152+
insertText: 'locals',
1153+
range: getDefaultSuggestRange(doc, pos)
1154+
}],
1155+
incomplete: true
1156+
};
1157+
},
1158+
}));
1159+
1160+
return withOracle(async function (model, editor) {
1161+
1162+
await assertEvent(model.onDidSuggest, () => {
1163+
editor.setValue('');
1164+
editor.setSelection(new Selection(1, 1, 1, 1));
1165+
editor.trigger('keyboard', Handler.Type, { text: 'l' });
1166+
1167+
1168+
}, event => {
1169+
assert.strictEqual(event.triggerOptions.auto, true);
1170+
assert.strictEqual(event.triggerOptions.triggerCharacter, undefined);
1171+
assert.strictEqual(event.triggerOptions.triggerKind, undefined);
1172+
assert.strictEqual(event.completionModel.items.length, 2);
1173+
assert.strictEqual(event.completionModel.items[0].textLabel, 'locals');
1174+
assert.strictEqual(event.completionModel.items[1].textLabel, 'log');
1175+
});
1176+
1177+
await assertEvent(model.onDidSuggest, () => {
1178+
editor.trigger('keyboard', Handler.Type, { text: 'o' });
1179+
1180+
}, event => {
1181+
assert.strictEqual(event.triggerOptions.triggerKind, CompletionTriggerKind.TriggerForIncompleteCompletions);
1182+
assert.strictEqual(event.triggerOptions.auto, true);
1183+
assert.strictEqual(event.completionModel.items.length, 2);
1184+
assert.strictEqual(event.completionModel.items[0].textLabel, 'locals');
1185+
assert.strictEqual(event.completionModel.items[1].textLabel, 'log');
1186+
});
1187+
1188+
});
1189+
});
11271190
});

0 commit comments

Comments
 (0)