Skip to content

Commit 9c05ffb

Browse files
committed
rename suggestions: include more telemetry
1 parent 838a59f commit 9c05ffb

File tree

2 files changed

+39
-21
lines changed

2 files changed

+39
-21
lines changed

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

Lines changed: 31 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,9 @@ class RenameController implements IEditorContribution {
242242
const inputFieldResult = await this._renameInputField.getInput(loc.range, loc.text, selectionStart, selectionEnd, supportPreview, newSymbolNameProvidersResults, renameCandidatesCts);
243243
trace('received response from rename input field');
244244

245-
this._reportTelemetry(inputFieldResult);
245+
if (newSymbolNamesProviders.length > 0) { // @ulugbekna: we're interested only in telemetry for rename suggestions currently
246+
this._reportTelemetry(newSymbolNamesProviders.length, model.getLanguageId(), inputFieldResult);
247+
}
246248

247249
// no result, only hint to focus the editor or not
248250
if (typeof inputFieldResult === 'boolean') {
@@ -330,36 +332,51 @@ class RenameController implements IEditorContribution {
330332
this._renameInputField.focusPreviousRenameSuggestion();
331333
}
332334

333-
private _reportTelemetry(inputFieldResult: boolean | RenameInputFieldResult) {
335+
private _reportTelemetry(nRenameSuggestionProviders: number, languageId: string, inputFieldResult: boolean | RenameInputFieldResult) {
334336
type RenameInvokedEvent =
335337
{
336338
kind: 'accepted' | 'cancelled';
337-
/** provided only if kind = 'accepted' */
338-
wantsPreview?: boolean;
339+
languageId: string;
340+
nRenameSuggestionProviders: number;
341+
339342
/** provided only if kind = 'accepted' */
340343
source?: RenameInputFieldResult['source'];
341344
/** provided only if kind = 'accepted' */
342-
hadRenameSuggestions?: boolean;
345+
nRenameSuggestions?: number;
346+
/** provided only if kind = 'accepted' */
347+
wantsPreview?: boolean;
343348
};
344349

345350
type RenameInvokedClassification = {
346351
owner: 'ulugbekna';
347352
comment: 'A rename operation was invoked.';
353+
348354
kind: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'Whether the rename operation was cancelled or accepted.' };
349-
wantsPreview?: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'If user wanted preview.'; isMeasurement: true };
355+
languageId: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'Document language ID.' };
356+
nRenameSuggestionProviders: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'Number of rename providers for this document.'; isMeasurement: true };
357+
350358
source?: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'Whether the new name came from the input field or rename suggestions.' };
351-
hadRenameSuggestions?: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'Whether the user had rename suggestions.'; isMeasurement: true };
359+
nRenameSuggestions?: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'Number of rename suggestions user has got'; isMeasurement: true };
360+
wantsPreview?: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'If user wanted preview.'; isMeasurement: true };
352361
};
353362

354-
this._telemetryService.publicLog2<RenameInvokedEvent, RenameInvokedClassification>(
355-
'renameInvokedEvent',
356-
typeof inputFieldResult === 'boolean' ? { kind: 'cancelled' } : {
363+
const value: RenameInvokedEvent = typeof inputFieldResult === 'boolean'
364+
? {
365+
kind: 'cancelled',
366+
languageId,
367+
nRenameSuggestionProviders,
368+
}
369+
: {
357370
kind: 'accepted',
358-
wantsPreview: inputFieldResult.wantsPreview,
371+
languageId,
372+
nRenameSuggestionProviders,
373+
359374
source: inputFieldResult.source,
360-
hadRenameSuggestions: inputFieldResult.hadRenameSuggestions,
361-
}
362-
);
375+
nRenameSuggestions: inputFieldResult.nRenameSuggestions,
376+
wantsPreview: inputFieldResult.wantsPreview,
377+
};
378+
379+
this._telemetryService.publicLog2<RenameInvokedEvent, RenameInvokedClassification>('renameInvokedEvent', value);
363380
}
364381
}
365382

src/vs/editor/contrib/rename/browser/renameInputField.ts

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ export interface RenameInputFieldResult {
5151
newName: string;
5252
wantsPreview?: boolean;
5353
source: 'inputField' | 'renameSuggestion';
54-
hadRenameSuggestions: boolean;
54+
nRenameSuggestions: number;
5555
}
5656

5757
export class RenameInputField implements IContentWidget {
@@ -304,13 +304,14 @@ export class RenameInputField implements IContentWidget {
304304
assertType(this._input !== undefined);
305305
assertType(this._candidatesView !== undefined);
306306

307-
const hadRenameSuggestions = this._candidatesView.hasCandidates();
307+
const nRenameSuggestions = this._candidatesView.nCandidates;
308308

309309
let newName: string;
310310
let source: 'inputField' | 'renameSuggestion';
311-
if (this._candidatesView.focusedCandidate !== undefined) {
311+
const focusedCandidate = this._candidatesView.focusedCandidate;
312+
if (focusedCandidate !== undefined) {
312313
this._trace('using new name from renameSuggestion');
313-
newName = this._candidatesView.focusedCandidate;
314+
newName = focusedCandidate;
314315
source = 'renameSuggestion';
315316
} else {
316317
this._trace('using new name from inputField');
@@ -331,7 +332,7 @@ export class RenameInputField implements IContentWidget {
331332
newName,
332333
wantsPreview: supportPreview && wantsPreview,
333334
source,
334-
hadRenameSuggestions,
335+
nRenameSuggestions,
335336
});
336337
};
337338

@@ -541,8 +542,8 @@ class CandidatesView {
541542
this._listWidget.splice(0, this._listWidget.length, []);
542543
}
543544

544-
public hasCandidates() {
545-
return this._listWidget.length > 0;
545+
public get nCandidates() {
546+
return this._listWidget.length;
546547
}
547548

548549
public get focusedCandidate(): string | undefined {

0 commit comments

Comments
 (0)