mirror of
https://github.com/microsoft/vscode.git
synced 2026-08-07 22:37:32 +01:00
rename: complete renaming RenameInputField to RenameWidget
This commit is contained in:
@@ -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, NewNameSource, RenameInputFieldResult, RenameWidget } from './renameInputField';
|
||||
import { CONTEXT_RENAME_INPUT_VISIBLE, NewNameSource, RenameWidget, RenameWidgetResult } from './renameWidget';
|
||||
|
||||
class RenameSkeleton {
|
||||
|
||||
@@ -138,7 +138,7 @@ class RenameController implements IEditorContribution {
|
||||
return editor.getContribution<RenameController>(RenameController.ID);
|
||||
}
|
||||
|
||||
private readonly _renameInputField: RenameWidget;
|
||||
private readonly _renameWidget: RenameWidget;
|
||||
private readonly _disposableStore = new DisposableStore();
|
||||
private _cts: CancellationTokenSource = new CancellationTokenSource();
|
||||
|
||||
@@ -153,7 +153,7 @@ class RenameController implements IEditorContribution {
|
||||
@ILanguageFeaturesService private readonly _languageFeaturesService: ILanguageFeaturesService,
|
||||
@ITelemetryService private readonly _telemetryService: ITelemetryService,
|
||||
) {
|
||||
this._renameInputField = this._disposableStore.add(this._instaService.createInstance(RenameWidget, this.editor, ['acceptRenameInput', 'acceptRenameInputWithPreview']));
|
||||
this._renameWidget = this._disposableStore.add(this._instaService.createInstance(RenameWidget, this.editor, ['acceptRenameInput', 'acceptRenameInputWithPreview']));
|
||||
}
|
||||
|
||||
dispose(): void {
|
||||
@@ -235,7 +235,7 @@ class RenameController implements IEditorContribution {
|
||||
|
||||
trace('creating rename input field and awaiting its result');
|
||||
const supportPreview = this._bulkEditService.hasPreviewHandler() && this._configService.getValue<boolean>(this.editor.getModel().uri, 'editor.rename.enablePreview');
|
||||
const inputFieldResult = await this._renameInputField.getInput(
|
||||
const inputFieldResult = await this._renameWidget.getInput(
|
||||
loc.range,
|
||||
loc.text,
|
||||
supportPreview,
|
||||
@@ -321,22 +321,22 @@ class RenameController implements IEditorContribution {
|
||||
}
|
||||
|
||||
acceptRenameInput(wantsPreview: boolean): void {
|
||||
this._renameInputField.acceptInput(wantsPreview);
|
||||
this._renameWidget.acceptInput(wantsPreview);
|
||||
}
|
||||
|
||||
cancelRenameInput(): void {
|
||||
this._renameInputField.cancelInput(true, 'cancelRenameInput command');
|
||||
this._renameWidget.cancelInput(true, 'cancelRenameInput command');
|
||||
}
|
||||
|
||||
focusNextRenameSuggestion(): void {
|
||||
this._renameInputField.focusNextRenameSuggestion();
|
||||
this._renameWidget.focusNextRenameSuggestion();
|
||||
}
|
||||
|
||||
focusPreviousRenameSuggestion(): void {
|
||||
this._renameInputField.focusPreviousRenameSuggestion();
|
||||
this._renameWidget.focusPreviousRenameSuggestion();
|
||||
}
|
||||
|
||||
private _reportTelemetry(nRenameSuggestionProviders: number, languageId: string, inputFieldResult: boolean | RenameInputFieldResult, inDebugMode?: 'inDebugMode') {
|
||||
private _reportTelemetry(nRenameSuggestionProviders: number, languageId: string, inputFieldResult: boolean | RenameWidgetResult, inDebugMode?: 'inDebugMode') {
|
||||
type RenameInvokedEvent =
|
||||
{
|
||||
kind: 'accepted' | 'cancelled';
|
||||
|
||||
+14
-14
@@ -16,7 +16,7 @@ import { Emitter } from 'vs/base/common/event';
|
||||
import { DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle';
|
||||
import { StopWatch } from 'vs/base/common/stopwatch';
|
||||
import { assertType, isDefined } from 'vs/base/common/types';
|
||||
import 'vs/css!./renameInputField';
|
||||
import 'vs/css!./renameWidget';
|
||||
import { applyFontInfo } from 'vs/editor/browser/config/domFontInfo';
|
||||
import { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition } from 'vs/editor/browser/editorBrowser';
|
||||
import { EditorOption } from 'vs/editor/common/config/editorOptions';
|
||||
@@ -66,24 +66,24 @@ export type NewNameSource =
|
||||
/**
|
||||
* Various statistics regarding rename input field
|
||||
*/
|
||||
export type RenameInputFieldStats = {
|
||||
export type RenameWidgetStats = {
|
||||
nRenameSuggestions: number;
|
||||
source: NewNameSource;
|
||||
timeBeforeFirstInputFieldEdit: number | undefined;
|
||||
};
|
||||
|
||||
export type RenameInputFieldResult = {
|
||||
export type RenameWidgetResult = {
|
||||
/**
|
||||
* The new name to be used
|
||||
*/
|
||||
newName: string;
|
||||
wantsPreview?: boolean;
|
||||
stats: RenameInputFieldStats;
|
||||
stats: RenameWidgetStats;
|
||||
};
|
||||
|
||||
interface IRenameInputField {
|
||||
interface IRenameWidget {
|
||||
/**
|
||||
* @returns a `boolean` standing for `shouldFocusEditor`, if user didn't pick a new name, or a {@link RenameInputFieldResult}
|
||||
* @returns a `boolean` standing for `shouldFocusEditor`, if user didn't pick a new name, or a {@link RenameWidgetResult}
|
||||
*/
|
||||
getInput(
|
||||
where: IRange,
|
||||
@@ -91,7 +91,7 @@ interface IRenameInputField {
|
||||
supportPreview: boolean,
|
||||
requestRenameSuggestions: (cts: CancellationToken) => ProviderResult<NewSymbolName[]>[],
|
||||
cts: CancellationTokenSource
|
||||
): Promise<RenameInputFieldResult | boolean>;
|
||||
): Promise<RenameWidgetResult | boolean>;
|
||||
|
||||
acceptInput(wantsPreview: boolean): void;
|
||||
cancelInput(focusEditor: boolean, caller: string): void;
|
||||
@@ -100,7 +100,7 @@ interface IRenameInputField {
|
||||
focusPreviousRenameSuggestion(): void;
|
||||
}
|
||||
|
||||
export class RenameWidget implements IRenameInputField, IContentWidget, IDisposable {
|
||||
export class RenameWidget implements IRenameWidget, IContentWidget, IDisposable {
|
||||
|
||||
// implement IContentWidget
|
||||
readonly allowEditorOverflow: boolean = true;
|
||||
@@ -243,7 +243,7 @@ export class RenameWidget implements IRenameInputField, IContentWidget, IDisposa
|
||||
if (this._domNode === undefined) {
|
||||
return;
|
||||
}
|
||||
assertType(this._label !== undefined, 'RenameInputField#_updateFont: _label must not be undefined given _domNode is defined');
|
||||
assertType(this._label !== undefined, 'RenameWidget#_updateFont: _label must not be undefined given _domNode is defined');
|
||||
|
||||
this._editor.applyFontInfo(this._input.domNode);
|
||||
|
||||
@@ -361,14 +361,14 @@ export class RenameWidget implements IRenameInputField, IContentWidget, IDisposa
|
||||
where: IRange,
|
||||
currentName: string,
|
||||
supportPreview: boolean,
|
||||
requestRenameSuggestions: (cts: CancellationToken) => ProviderResult<NewSymbolName[]>[],
|
||||
requestRenameCandidates: (cts: CancellationToken) => ProviderResult<NewSymbolName[]>[],
|
||||
cts: CancellationTokenSource
|
||||
): Promise<RenameInputFieldResult | boolean> {
|
||||
): Promise<RenameWidgetResult | boolean> {
|
||||
|
||||
const { start: selectionStart, end: selectionEnd } = this._getSelection(where, currentName);
|
||||
|
||||
this._renameCandidateProvidersCts = new CancellationTokenSource();
|
||||
const candidates = requestRenameSuggestions(this._renameCandidateProvidersCts.token);
|
||||
const candidates = requestRenameCandidates(this._renameCandidateProvidersCts.token);
|
||||
this._updateRenameCandidates(candidates, currentName, cts.token);
|
||||
|
||||
this._isEditingRenameCandidate = false;
|
||||
@@ -395,7 +395,7 @@ export class RenameWidget implements IRenameInputField, IContentWidget, IDisposa
|
||||
}
|
||||
}));
|
||||
|
||||
const inputResult = new DeferredPromise<RenameInputFieldResult | boolean>();
|
||||
const inputResult = new DeferredPromise<RenameWidgetResult | boolean>();
|
||||
|
||||
inputResult.p.finally(() => {
|
||||
disposeOnDone.dispose();
|
||||
@@ -547,7 +547,7 @@ export class RenameWidget implements IRenameInputField, IContentWidget, IDisposa
|
||||
if (visibleRanges.length > 0) {
|
||||
firstLineInViewport = visibleRanges[0].startLineNumber;
|
||||
} else {
|
||||
this._logService.warn('RenameInputField#_getTopForPosition: this should not happen - visibleRanges is empty');
|
||||
this._logService.warn('RenameWidget#_getTopForPosition: this should not happen - visibleRanges is empty');
|
||||
firstLineInViewport = Math.max(1, this._position!.lineNumber - 5); // @ulugbekna: fallback to current line minus 5
|
||||
}
|
||||
return this._editor.getTopForLineNumber(this._position!.lineNumber) - this._editor.getTopForLineNumber(firstLineInViewport);
|
||||
Reference in New Issue
Block a user