Skip to content

Commit 81d4fbc

Browse files
authored
always set CompletionItemProvider#_debugDisplayName, send display name and extension id with telemetry (microsoft#185765)
1 parent 1a3cc15 commit 81d4fbc

File tree

17 files changed

+61
-7
lines changed

17 files changed

+61
-7
lines changed

src/vs/editor/common/languages.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -584,9 +584,12 @@ export interface CompletionContext {
584584
export interface CompletionItemProvider {
585585

586586
/**
587+
* Used to identify completions in the (debug) UI and telemetry. This isn't the extension identifier because extensions
588+
* often contribute multiple completion item providers.
589+
*
587590
* @internal
588591
*/
589-
_debugDisplayName?: string;
592+
_debugDisplayName: string;
590593

591594
triggerCharacters?: string[];
592595
/**

src/vs/editor/contrib/inlineCompletions/test/browser/suggestWidgetModel.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ suite('Suggest Widget Model', () => {
103103
});
104104

105105
const provider: CompletionItemProvider = {
106+
_debugDisplayName: 'test',
106107
triggerCharacters: ['.'],
107108
async provideCompletionItems(model, pos) {
108109
const word = model.getWordAtPosition(pos);

src/vs/editor/contrib/snippet/browser/snippetController2.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,8 @@ export class SnippetController2 implements IEditorContribution {
156156

157157
// regster completion item provider when there is any choice element
158158
if (this._session?.hasChoice) {
159-
const provider = {
159+
const provider: CompletionItemProvider = {
160+
_debugDisplayName: 'snippetChoiceCompletions',
160161
provideCompletionItems: (model: ITextModel, position: Position) => {
161162
if (!this._session || model !== this._editor.getModel() || !Position.equals(this._editor.getPosition(), position)) {
162163
return undefined;

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

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -399,16 +399,18 @@ export class SuggestController implements IEditorContribution {
399399
return true;
400400
}).then(applied => {
401401
this._logService.trace('[suggest] async resolving of edits DONE (ms, applied?)', sw.elapsed(), applied);
402-
type AsyncSuggestEdits = { providerId: string; applied: boolean };
402+
type AsyncSuggestEdits = { extensionId: string; providerId: string; applied: boolean };
403403
type AsyncSuggestEditsClassification = {
404404
owner: 'jrieken';
405405
comment: 'Information about async additional text edits';
406+
extensionId: { classification: 'PublicNonPersonalData'; purpose: 'FeatureInsight'; comment: 'Extension contributing the completions item' };
406407
providerId: { classification: 'PublicNonPersonalData'; purpose: 'FeatureInsight'; comment: 'Provider of the completions item' };
407408
applied: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'If async additional text edits could be applied' };
408409
};
409410
if (typeof applied === 'boolean') {
410411
this._telemetryService.publicLog2<AsyncSuggestEdits, AsyncSuggestEditsClassification>('suggest.asyncAdditionalEdits', {
411-
providerId: item.extensionId?.value ?? 'unknown',
412+
extensionId: item.extensionId?.value ?? 'unknown',
413+
providerId: item.provider._debugDisplayName ?? 'unknown',
412414
applied
413415
});
414416
}
@@ -497,12 +499,14 @@ export class SuggestController implements IEditorContribution {
497499
}
498500

499501
type AcceptedSuggestion = {
500-
providerId: string; fileExtension: string; languageId: string; basenameHash: string; kind: number;
502+
extensionId: string; providerId: string;
503+
fileExtension: string; languageId: string; basenameHash: string; kind: number;
501504
resolveInfo: number; resolveDuration: number;
502505
};
503506
type AcceptedSuggestionClassification = {
504507
owner: 'jrieken';
505508
comment: 'Information accepting completion items';
509+
extensionId: { classification: 'PublicNonPersonalData'; purpose: 'FeatureInsight'; comment: 'Extension contributing the completions item' };
506510
providerId: { classification: 'PublicNonPersonalData'; purpose: 'FeatureInsight'; comment: 'Provider of the completions item' };
507511
basenameHash: { classification: 'PublicNonPersonalData'; purpose: 'FeatureInsight'; comment: 'Hash of the basename of the file into which the completion was inserted' };
508512
fileExtension: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'File extension of the file into which the completion was inserted' };
@@ -513,7 +517,8 @@ export class SuggestController implements IEditorContribution {
513517
};
514518

515519
this._telemetryService.publicLog2<AcceptedSuggestion, AcceptedSuggestionClassification>('suggest.acceptedSuggestion', {
516-
providerId: item.extensionId?.value ?? item.provider._debugDisplayName ?? 'unknown',
520+
extensionId: item.extensionId?.value ?? 'unknown',
521+
providerId: item.provider._debugDisplayName ?? 'unknown',
517522
kind: item.completion.kind,
518523
basenameHash: hash(basename(model.uri)).toString(16),
519524
languageId: model.getLanguageId(),

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ export function createSuggestItem(label: string | languages.CompletionItemLabel,
2424
suggestions: [suggestion]
2525
};
2626
const provider: languages.CompletionItemProvider = {
27+
_debugDisplayName: 'test',
2728
provideCompletionItems(): any {
2829
return;
2930
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ suite('Suggest', function () {
2424
registry = new LanguageFeatureRegistry();
2525
model = createTextModel('FOO\nbar\BAR\nfoo', undefined, undefined, URI.parse('foo:bar/path'));
2626
registration = registry.register({ pattern: 'bar/path', scheme: 'foo' }, {
27+
_debugDisplayName: 'test',
2728
provideCompletionItems(_doc, pos) {
2829
return {
2930
incomplete: false,
@@ -114,6 +115,7 @@ suite('Suggest', function () {
114115

115116
const foo = new class implements CompletionItemProvider {
116117

118+
_debugDisplayName = 'test';
117119
triggerCharacters = [];
118120

119121
provideCompletionItems() {

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ suite('SuggestController', function () {
8989

9090
test('postfix completion reports incorrect position #86984', async function () {
9191
disposables.add(languageFeaturesService.completionProvider.register({ scheme: 'test-ctrl' }, {
92+
_debugDisplayName: 'test',
9293
provideCompletionItems(doc, pos) {
9394
return {
9495
suggestions: [{
@@ -125,6 +126,7 @@ suite('SuggestController', function () {
125126
test('use additionalTextEdits sync when possible', async function () {
126127

127128
disposables.add(languageFeaturesService.completionProvider.register({ scheme: 'test-ctrl' }, {
129+
_debugDisplayName: 'test',
128130
provideCompletionItems(doc, pos) {
129131
return {
130132
suggestions: [{
@@ -166,6 +168,7 @@ suite('SuggestController', function () {
166168
let resolveCallCount = 0;
167169

168170
disposables.add(languageFeaturesService.completionProvider.register({ scheme: 'test-ctrl' }, {
171+
_debugDisplayName: 'test',
169172
provideCompletionItems(doc, pos) {
170173
return {
171174
suggestions: [{
@@ -218,6 +221,7 @@ suite('SuggestController', function () {
218221
let resolveCallCount = 0;
219222
let resolve: Function = () => { };
220223
disposables.add(languageFeaturesService.completionProvider.register({ scheme: 'test-ctrl' }, {
224+
_debugDisplayName: 'test',
221225
provideCompletionItems(doc, pos) {
222226
return {
223227
suggestions: [{
@@ -274,6 +278,7 @@ suite('SuggestController', function () {
274278
let resolveCallCount = 0;
275279
let resolve: Function = () => { };
276280
disposables.add(languageFeaturesService.completionProvider.register({ scheme: 'test-ctrl' }, {
281+
_debugDisplayName: 'test',
277282
provideCompletionItems(doc, pos) {
278283
return {
279284
suggestions: [{
@@ -323,6 +328,7 @@ suite('SuggestController', function () {
323328
let resolveCallCount = 0;
324329
let resolve: Function = () => { };
325330
disposables.add(languageFeaturesService.completionProvider.register({ scheme: 'test-ctrl' }, {
331+
_debugDisplayName: 'test',
326332
provideCompletionItems(doc, pos) {
327333
return {
328334
suggestions: [{
@@ -377,6 +383,7 @@ suite('SuggestController', function () {
377383

378384
const resolve: Function[] = [];
379385
disposables.add(languageFeaturesService.completionProvider.register({ scheme: 'test-ctrl' }, {
386+
_debugDisplayName: 'test',
380387
provideCompletionItems(doc, pos) {
381388
return {
382389
suggestions: [{
@@ -434,6 +441,7 @@ suite('SuggestController', function () {
434441

435442

436443
disposables.add(languageFeaturesService.completionProvider.register({ scheme: 'test-ctrl' }, {
444+
_debugDisplayName: 'test',
437445
provideCompletionItems(doc, pos) {
438446
return {
439447
suggestions: [{
@@ -470,6 +478,7 @@ suite('SuggestController', function () {
470478

471479
test('Pressing enter on autocomplete should always apply the selected dropdown completion, not a different, hidden one #161883', async function () {
472480
disposables.add(languageFeaturesService.completionProvider.register({ scheme: 'test-ctrl' }, {
481+
_debugDisplayName: 'test',
473482
provideCompletionItems(doc, pos) {
474483

475484
const word = doc.getWordUntilPosition(pos);
@@ -516,6 +525,7 @@ suite('SuggestController', function () {
516525

517526
test('Fast autocomple typing selects the previous autocomplete suggestion, #71795', async function () {
518527
disposables.add(languageFeaturesService.completionProvider.register({ scheme: 'test-ctrl' }, {
528+
_debugDisplayName: 'test',
519529
provideCompletionItems(doc, pos) {
520530

521531
const word = doc.getWordUntilPosition(pos);

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ suite('Suggest Inline Completions', function () {
4444

4545
insta.invokeFunction(accessor => {
4646
accessor.get(ILanguageFeaturesService).completionProvider.register({ pattern: '*.bar', scheme: 'foo' }, new class implements CompletionItemProvider {
47+
_debugDisplayName = 'test';
4748

4849
triggerCharacters?: string[] | undefined;
4950

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

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () {
181181
}
182182

183183
const alwaysEmptySupport: CompletionItemProvider = {
184+
_debugDisplayName: 'test',
184185
provideCompletionItems(doc, pos): CompletionList {
185186
return {
186187
incomplete: false,
@@ -190,6 +191,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () {
190191
};
191192

192193
const alwaysSomethingSupport: CompletionItemProvider = {
194+
_debugDisplayName: 'test',
193195
provideCompletionItems(doc, pos): CompletionList {
194196
return {
195197
incomplete: false,
@@ -330,6 +332,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () {
330332
test('#17400: Keep filtering suggestModel.ts after space', function () {
331333

332334
disposables.add(registry.register({ scheme: 'test' }, {
335+
_debugDisplayName: 'test',
333336
provideCompletionItems(doc, pos): CompletionList {
334337
return {
335338
incomplete: false,
@@ -380,6 +383,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () {
380383
test('#21484: Trigger character always force a new completion session', function () {
381384

382385
disposables.add(registry.register({ scheme: 'test' }, {
386+
_debugDisplayName: 'test',
383387
provideCompletionItems(doc, pos): CompletionList {
384388
return {
385389
incomplete: false,
@@ -394,6 +398,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () {
394398
}));
395399

396400
disposables.add(registry.register({ scheme: 'test' }, {
401+
_debugDisplayName: 'test',
397402
triggerCharacters: ['.'],
398403
provideCompletionItems(doc, pos): CompletionList {
399404
return {
@@ -505,6 +510,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () {
505510
test('Incomplete suggestion results cause re-triggering when typing w/o further context, #28400 (1/2)', function () {
506511

507512
disposables.add(registry.register({ scheme: 'test' }, {
513+
_debugDisplayName: 'test',
508514
provideCompletionItems(doc, pos): CompletionList {
509515
return {
510516
incomplete: true,
@@ -542,6 +548,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () {
542548
test('Incomplete suggestion results cause re-triggering when typing w/o further context, #28400 (2/2)', function () {
543549

544550
disposables.add(registry.register({ scheme: 'test' }, {
551+
_debugDisplayName: 'test',
545552
provideCompletionItems(doc, pos): CompletionList {
546553
return {
547554
incomplete: true,
@@ -585,6 +592,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () {
585592
test('Trigger character is provided in suggest context', function () {
586593
let triggerCharacter = '';
587594
disposables.add(registry.register({ scheme: 'test' }, {
595+
_debugDisplayName: 'test',
588596
triggerCharacters: ['.'],
589597
provideCompletionItems(doc, pos, context): CompletionList {
590598
assert.strictEqual(context.triggerKind, CompletionTriggerKind.TriggerCharacter);
@@ -618,6 +626,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () {
618626

619627
test('Mac press and hold accent character insertion does not update suggestions, #35269', function () {
620628
disposables.add(registry.register({ scheme: 'test' }, {
629+
_debugDisplayName: 'test',
621630
provideCompletionItems(doc, pos): CompletionList {
622631
return {
623632
incomplete: true,
@@ -690,6 +699,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () {
690699

691700
test('Text changes for completion CodeAction are affected by the completion #39893', function () {
692701
disposables.add(registry.register({ scheme: 'test' }, {
702+
_debugDisplayName: 'test',
693703
provideCompletionItems(doc, pos): CompletionList {
694704
return {
695705
incomplete: true,
@@ -764,6 +774,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () {
764774
let disposeB = 0;
765775

766776
disposables.add(registry.register({ scheme: 'test' }, {
777+
_debugDisplayName: 'test',
767778
provideCompletionItems(doc, pos) {
768779
return {
769780
incomplete: true,
@@ -779,6 +790,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () {
779790
}
780791
}));
781792
disposables.add(registry.register({ scheme: 'test' }, {
793+
_debugDisplayName: 'test',
782794
provideCompletionItems(doc, pos) {
783795
return {
784796
incomplete: false,
@@ -833,6 +845,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () {
833845
let countB = 0;
834846

835847
disposables.add(registry.register({ scheme: 'test' }, {
848+
_debugDisplayName: 'test',
836849
provideCompletionItems(doc, pos) {
837850
countA += 1;
838851
return {
@@ -847,6 +860,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () {
847860
}
848861
}));
849862
disposables.add(registry.register({ scheme: 'test' }, {
863+
_debugDisplayName: 'test',
850864
provideCompletionItems(doc, pos) {
851865
countB += 1;
852866
if (!doc.getWordUntilPosition(pos).word.startsWith('a')) {
@@ -896,6 +910,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () {
896910
test('registerCompletionItemProvider with letters as trigger characters block other completion items to show up #127815', async function () {
897911

898912
disposables.add(registry.register({ scheme: 'test' }, {
913+
_debugDisplayName: 'test',
899914
provideCompletionItems(doc, pos) {
900915
return {
901916
suggestions: [{
@@ -908,6 +923,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () {
908923
}
909924
}));
910925
disposables.add(registry.register({ scheme: 'test' }, {
926+
_debugDisplayName: 'test',
911927
triggerCharacters: ['a', '.'],
912928
provideCompletionItems(doc, pos) {
913929
return {
@@ -951,6 +967,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () {
951967
test('Unexpected suggest scoring #167242', async function () {
952968
disposables.add(registry.register('*', {
953969
// word-based
970+
_debugDisplayName: 'test',
954971
provideCompletionItems(doc, pos) {
955972
const word = doc.getWordUntilPosition(pos);
956973
return {
@@ -965,6 +982,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () {
965982
}));
966983
disposables.add(registry.register({ scheme: 'test' }, {
967984
// JSON-based
985+
_debugDisplayName: 'test',
968986
provideCompletionItems(doc, pos) {
969987
return {
970988
suggestions: [{
@@ -1008,6 +1026,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () {
10081026
const requestCounts = [0, 0];
10091027

10101028
disposables.add(registry.register({ scheme: 'test' }, {
1029+
_debugDisplayName: 'test',
10111030

10121031
provideCompletionItems(doc, pos) {
10131032
requestCounts[0] += 1;
@@ -1027,6 +1046,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () {
10271046
}
10281047
}));
10291048
disposables.add(registry.register({ scheme: 'test' }, {
1049+
_debugDisplayName: 'test',
10301050
triggerCharacters: ['2'],
10311051
provideCompletionItems(doc, pos, ctx) {
10321052
requestCounts[1] += 1;
@@ -1077,6 +1097,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () {
10771097
test('Set refilter-flag, keep triggerKind', function () {
10781098

10791099
disposables.add(registry.register({ scheme: 'test' }, {
1100+
_debugDisplayName: 'test',
10801101
triggerCharacters: ['.'],
10811102
provideCompletionItems(doc, pos, ctx) {
10821103
return {
@@ -1132,6 +1153,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () {
11321153
test('Snippets gone from IntelliSense #173244', function () {
11331154

11341155
const snippetProvider: CompletionItemProvider = {
1156+
_debugDisplayName: 'test',
11351157
provideCompletionItems(doc, pos, ctx) {
11361158
return {
11371159
suggestions: [{
@@ -1152,6 +1174,7 @@ suite('SuggestModel - TriggerAndCancelOracle', function () {
11521174
}));
11531175

11541176
disposables.add(registry.register({ scheme: 'test' }, {
1177+
_debugDisplayName: 'test',
11551178
triggerCharacters: ['.'],
11561179
provideCompletionItems(doc, pos, ctx) {
11571180
return {

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ suite('suggest, word distance', function () {
9999
suggestions: [suggestion]
100100
};
101101
const provider: languages.CompletionItemProvider = {
102+
_debugDisplayName: 'test',
102103
provideCompletionItems(): any {
103104
return;
104105
}

0 commit comments

Comments
 (0)