Skip to content

Commit ae4385d

Browse files
authored
Merge pull request microsoft#173588 from microsoft/joh/fix/173244
Joh/fix/173244
2 parents 72c1408 + cf7b20b commit ae4385d

File tree

2 files changed

+76
-1
lines changed

2 files changed

+76
-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: 70 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 { getSnippetSuggestSupport, setSnippetSuggestSupport } from 'vs/editor/contrib/suggest/browser/suggest';
4142

4243

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

0 commit comments

Comments
 (0)