rename suggestions: refactor: move stats to a proper object instead of inlining them into result

This commit is contained in:
Ulugbek Abdullaev
2024-03-18 23:38:15 +01:00
parent a3af971b72
commit 74e41997fc
2 changed files with 36 additions and 13 deletions
@@ -38,7 +38,7 @@ import { INotificationService } from 'vs/platform/notification/common/notificati
import { IEditorProgressService } from 'vs/platform/progress/common/progress';
import { Registry } from 'vs/platform/registry/common/platform';
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { CONTEXT_RENAME_INPUT_VISIBLE, RenameInputField, RenameInputFieldResult } from './renameInputField';
import { CONTEXT_RENAME_INPUT_VISIBLE, NewNameSource, RenameInputField, RenameInputFieldResult } from './renameInputField';
class RenameSkeleton {
@@ -346,7 +346,7 @@ class RenameController implements IEditorContribution {
nRenameSuggestionProviders: number;
/** provided only if kind = 'accepted' */
source?: RenameInputFieldResult['source'];
source?: NewNameSource['k'];
/** provided only if kind = 'accepted' */
nRenameSuggestions?: number;
/** provided only if kind = 'accepted' */
@@ -377,8 +377,8 @@ class RenameController implements IEditorContribution {
languageId,
nRenameSuggestionProviders,
source: inputFieldResult.source,
nRenameSuggestions: inputFieldResult.nRenameSuggestions,
source: inputFieldResult.stats.source.k,
nRenameSuggestions: inputFieldResult.stats.nRenameSuggestions,
wantsPreview: inputFieldResult.wantsPreview,
};
@@ -51,12 +51,33 @@ const _sticky = false
export const CONTEXT_RENAME_INPUT_VISIBLE = new RawContextKey<boolean>('renameInputVisible', false, localize('renameInputVisible', "Whether the rename input widget is visible"));
export const CONTEXT_RENAME_INPUT_FOCUSED = new RawContextKey<boolean>('renameInputFocused', false, localize('renameInputFocused', "Whether the rename input widget is focused"));
export interface RenameInputFieldResult {
/**
* "Source" of the new name:
* - 'inputField' - user entered the new name
* - 'renameSuggestion' - user picked from rename suggestions
* - 'userEditedRenameSuggestion' - user _likely_ edited a rename suggestion ("likely" because when input started being edited, a rename suggestion had focus)
*/
export type NewNameSource =
| { k: 'inputField' }
| { k: 'renameSuggestion' }
| { k: 'userEditedRenameSuggestion' };
/**
* Various statistics regarding rename input field
*/
export type RenameInputFieldStats = {
nRenameSuggestions: number;
source: NewNameSource;
};
export type RenameInputFieldResult = {
/**
* The new name to be used
*/
newName: string;
wantsPreview?: boolean;
source: 'inputField' | 'renameSuggestion' | 'userEditedRenameSuggestion';
nRenameSuggestions: number;
}
stats: RenameInputFieldStats;
};
interface IRenameInputField {
/**
@@ -341,16 +362,16 @@ export class RenameInputField implements IRenameInputField, IContentWidget, IDis
const nRenameSuggestions = this._renameCandidateListView.nCandidates;
let newName: string;
let source: RenameInputFieldResult['source'];
let source: NewNameSource;
const focusedCandidate = this._renameCandidateListView.focusedCandidate;
if (focusedCandidate !== undefined) {
this._trace('using new name from renameSuggestion');
newName = focusedCandidate;
source = 'renameSuggestion';
source = { k: 'renameSuggestion' };
} else {
this._trace('using new name from inputField');
newName = this._input.domNode.value;
source = this._isEditingRenameCandidate ? 'userEditedRenameSuggestion' : 'inputField';
source = this._isEditingRenameCandidate ? { k: 'userEditedRenameSuggestion' } : { k: 'inputField' };
}
if (newName === currentName || newName.trim().length === 0 /* is just whitespace */) {
@@ -365,8 +386,10 @@ export class RenameInputField implements IRenameInputField, IContentWidget, IDis
inputResult.complete({
newName,
wantsPreview: supportPreview && wantsPreview,
source,
nRenameSuggestions,
stats: {
source,
nRenameSuggestions,
}
});
};