From 74e41997fc686bbb95170ebc2e5dc2edef78cbc3 Mon Sep 17 00:00:00 2001 From: Ulugbek Abdullaev Date: Mon, 18 Mar 2024 22:23:11 +0100 Subject: [PATCH] rename suggestions: refactor: move stats to a proper object instead of inlining them into result --- .../editor/contrib/rename/browser/rename.ts | 8 ++-- .../rename/browser/renameInputField.ts | 41 +++++++++++++++---- 2 files changed, 36 insertions(+), 13 deletions(-) diff --git a/src/vs/editor/contrib/rename/browser/rename.ts b/src/vs/editor/contrib/rename/browser/rename.ts index 008d64e7e76..5b3bb087680 100644 --- a/src/vs/editor/contrib/rename/browser/rename.ts +++ b/src/vs/editor/contrib/rename/browser/rename.ts @@ -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, }; diff --git a/src/vs/editor/contrib/rename/browser/renameInputField.ts b/src/vs/editor/contrib/rename/browser/renameInputField.ts index 45c1cb1f245..ce28e92d793 100644 --- a/src/vs/editor/contrib/rename/browser/renameInputField.ts +++ b/src/vs/editor/contrib/rename/browser/renameInputField.ts @@ -51,12 +51,33 @@ const _sticky = false export const CONTEXT_RENAME_INPUT_VISIBLE = new RawContextKey('renameInputVisible', false, localize('renameInputVisible', "Whether the rename input widget is visible")); export const CONTEXT_RENAME_INPUT_FOCUSED = new RawContextKey('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, + } }); };