diff --git a/src/vs/editor/browser/editorExtensions.ts b/src/vs/editor/browser/editorExtensions.ts index 3cb36cdcfc1..19bba6b8b47 100644 --- a/src/vs/editor/browser/editorExtensions.ts +++ b/src/vs/editor/browser/editorExtensions.ts @@ -30,18 +30,37 @@ export type ServicesAccessor = InstantiationServicesAccessor; export type IEditorContributionCtor = IConstructorSignature; export type IDiffEditorContributionCtor = IConstructorSignature; -export enum EditorContributionInstantiation { +export const enum EditorContributionInstantiation { /** * The contribution is created eagerly when the {@linkcode ICodeEditor} is instantiated. + * Only Eager contributions can participate in saving or restoring of view state. */ Eager, /** - * The contribution is created on idle (or when explicitly requested). - * - * Idle contributions cannot participate in saving or restoring of view states. + * The contribution is created at the latest 50ms after the first render after attaching a text model. + * If the contribution is explicitly requested via `getContribution`, it will be instantiated sooner. + * If there is idle time available, it will be instantiated sooner. */ - Idle, + AfterFirstRender, + + /** + * The contribution is created before the editor emits events produced by user interaction (mouse events, keyboard events). + * If the contribution is explicitly requested via `getContribution`, it will be instantiated sooner. + * If there is idle time available, it will be instantiated sooner. + */ + BeforeFirstInteraction, + + /** + * The contribution is created when there is idle time available, at the latest 5000ms after the editor creation. + * If the contribution is explicitly requested via `getContribution`, it will be instantiated sooner. + */ + Eventually, + + /** + * The contribution is created only when explicitly requested via `getContribution`. + */ + Lazy, } export interface IEditorContributionDescription { diff --git a/src/vs/editor/browser/services/markerDecorations.ts b/src/vs/editor/browser/services/markerDecorations.ts index 23c0a9b1823..55fe3c63512 100644 --- a/src/vs/editor/browser/services/markerDecorations.ts +++ b/src/vs/editor/browser/services/markerDecorations.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { IMarkerDecorationsService } from 'vs/editor/common/services/markerDecorations'; -import { registerEditorContribution } from 'vs/editor/browser/editorExtensions'; +import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; import { IEditorContribution } from 'vs/editor/common/editorCommon'; @@ -23,4 +23,4 @@ export class MarkerDecorationsContribution implements IEditorContribution { } } -registerEditorContribution(MarkerDecorationsContribution.ID, MarkerDecorationsContribution); +registerEditorContribution(MarkerDecorationsContribution.ID, MarkerDecorationsContribution, EditorContributionInstantiation.Eager); // eager because it instantiates IMarkerDecorationsService which is responsible for rendering squiggles diff --git a/src/vs/editor/browser/widget/codeEditorContributions.ts b/src/vs/editor/browser/widget/codeEditorContributions.ts new file mode 100644 index 00000000000..35bf94643b2 --- /dev/null +++ b/src/vs/editor/browser/widget/codeEditorContributions.ts @@ -0,0 +1,165 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { runWhenIdle } from 'vs/base/common/async'; +import { onUnexpectedError } from 'vs/base/common/errors'; +import { Disposable, DisposableMap } from 'vs/base/common/lifecycle'; +import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; +import { EditorContributionInstantiation, IEditorContributionDescription } from 'vs/editor/browser/editorExtensions'; +import { IEditorContribution } from 'vs/editor/common/editorCommon'; +import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; + +export class CodeEditorContributions extends Disposable { + + private _editor: ICodeEditor | null = null; + private _instantiationService: IInstantiationService | null = null; + + /** + * Contains all instantiated contributions. + */ + private readonly _instances = this._register(new DisposableMap()); + /** + * Contains contributions which are not yet instantiated. + */ + private readonly _pending = new Map(); + /** + * Tracks which instantiation kinds are still left in `_pending`. + */ + private readonly _finishedInstantiation: boolean[] = []; + + constructor( + + ) { + super(); + + this._finishedInstantiation[EditorContributionInstantiation.Eager] = false; + this._finishedInstantiation[EditorContributionInstantiation.AfterFirstRender] = false; + this._finishedInstantiation[EditorContributionInstantiation.BeforeFirstInteraction] = false; + this._finishedInstantiation[EditorContributionInstantiation.Eventually] = false; + } + + public initialize(editor: ICodeEditor, contributions: IEditorContributionDescription[], instantiationService: IInstantiationService) { + this._editor = editor; + this._instantiationService = instantiationService; + + for (const desc of contributions) { + if (this._pending.has(desc.id)) { + onUnexpectedError(new Error(`Cannot have two contributions with the same id ${desc.id}`)); + continue; + } + this._pending.set(desc.id, desc); + } + + this._instantiateSome(EditorContributionInstantiation.Eager); + + // AfterFirstRender + // - these extensions will be instantiated at the latest 50ms after the first render. + // - but if there is idle time, we will instantiate them sooner. + this._register(runWhenIdle(() => { + this._instantiateSome(EditorContributionInstantiation.AfterFirstRender); + })); + + // BeforeFirstInteraction + // - these extensions will be instantiated at the latest before a mouse or a keyboard event. + // - but if there is idle time, we will instantiate them sooner. + this._register(runWhenIdle(() => { + this._instantiateSome(EditorContributionInstantiation.BeforeFirstInteraction); + })); + + // Eventually + // - these extensions will only be instantiated when there is idle time. + // - since there is no guarantee that there will ever be idle time, we set a timeout of 5s here. + this._register(runWhenIdle(() => { + this._instantiateSome(EditorContributionInstantiation.Eventually); + }, 5000)); + } + + public saveViewState(): { [key: string]: any } { + const contributionsState: { [key: string]: any } = {}; + for (const [id, contribution] of this._instances) { + if (typeof contribution.saveViewState === 'function') { + contributionsState[id] = contribution.saveViewState(); + } + } + return contributionsState; + } + + public restoreViewState(contributionsState: { [key: string]: any }): void { + for (const [id, contribution] of this._instances) { + if (typeof contribution.restoreViewState === 'function') { + contribution.restoreViewState(contributionsState[id]); + } + } + } + + public get(id: string): IEditorContribution | null { + this._instantiateById(id); + return this._instances.get(id) || null; + } + + /** + * used by tests + */ + public set(id: string, value: IEditorContribution) { + this._instances.set(id, value); + } + + public onBeforeInteractionEvent(): void { + // this method is called very often by the editor! + this._instantiateSome(EditorContributionInstantiation.BeforeFirstInteraction); + } + + public onAfterModelAttached(): void { + this._register(runWhenIdle(() => { + this._instantiateSome(EditorContributionInstantiation.AfterFirstRender); + }, 50)); + } + + private _instantiateSome(instantiation: EditorContributionInstantiation): void { + if (this._finishedInstantiation[instantiation]) { + // already done with this instantiation! + return; + } + this._finishedInstantiation[instantiation] = true; + + const contribs = this._findPendingContributionsByInstantiation(instantiation); + for (const contrib of contribs) { + this._instantiateById(contrib.id); + } + } + + private _findPendingContributionsByInstantiation(instantiation: EditorContributionInstantiation): readonly IEditorContributionDescription[] { + const result: IEditorContributionDescription[] = []; + for (const [, desc] of this._pending) { + if (desc.instantiation === instantiation) { + result.push(desc); + } + } + return result; + } + + private _instantiateById(id: string): void { + const desc = this._pending.get(id); + if (!desc) { + return; + } + + this._pending.delete(id); + + if (!this._instantiationService || !this._editor) { + throw new Error(`Cannot instantiate contributions before being initialized!`); + } + + try { + const instance = this._instantiationService.createInstance(desc.ctor, this._editor); + this._instances.set(desc.id, instance); + if (typeof instance.restoreViewState === 'function' && desc.instantiation !== EditorContributionInstantiation.Eager) { + console.warn(`Editor contribution '${desc.id}' should be eager instantiated because it uses saveViewState / restoreViewState.`); + } + } catch (err) { + onUnexpectedError(err); + } + } +} diff --git a/src/vs/editor/browser/widget/codeEditorWidget.ts b/src/vs/editor/browser/widget/codeEditorWidget.ts index 26aa3c91d1c..88f890fe5b6 100644 --- a/src/vs/editor/browser/widget/codeEditorWidget.ts +++ b/src/vs/editor/browser/widget/codeEditorWidget.ts @@ -14,11 +14,11 @@ import { Color } from 'vs/base/common/color'; import { onUnexpectedError } from 'vs/base/common/errors'; import { Emitter, EmitterOptions, Event, EventDeliveryQueue } from 'vs/base/common/event'; import { hash } from 'vs/base/common/hash'; -import { Disposable, IDisposable, dispose, DisposableStore, DisposableMap } from 'vs/base/common/lifecycle'; +import { Disposable, IDisposable, dispose, DisposableStore } from 'vs/base/common/lifecycle'; import { Schemas } from 'vs/base/common/network'; import { EditorConfiguration, IEditorConstructionOptions } from 'vs/editor/browser/config/editorConfiguration'; import * as editorBrowser from 'vs/editor/browser/editorBrowser'; -import { EditorContributionInstantiation, EditorExtensionsRegistry, IEditorContributionDescription } from 'vs/editor/browser/editorExtensions'; +import { EditorExtensionsRegistry, IEditorContributionDescription } from 'vs/editor/browser/editorExtensions'; import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; import { ICommandDelegate } from 'vs/editor/browser/view/viewController'; import { IContentWidgetData, IOverlayWidgetData, View } from 'vs/editor/browser/view'; @@ -59,7 +59,7 @@ import { applyFontInfo } from 'vs/editor/browser/config/domFontInfo'; import { IEditorConfiguration } from 'vs/editor/common/config/editorConfiguration'; import { IDimension } from 'vs/editor/common/core/dimension'; import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; -import { IdleValue } from 'vs/base/common/async'; +import { CodeEditorContributions } from 'vs/editor/browser/widget/codeEditorContributions'; let EDITOR_ID = 0; @@ -118,6 +118,7 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE //#region Eventing private readonly _deliveryQueue = new EventDeliveryQueue(); + protected readonly _contributions2: CodeEditorContributions = this._register(new CodeEditorContributions()); private readonly _onDidDispose: Emitter = this._register(new Emitter()); public readonly onDidDispose: Event = this._onDidDispose.event; @@ -152,7 +153,7 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE private readonly _onDidChangeCursorSelection: Emitter = this._register(new Emitter({ deliveryQueue: this._deliveryQueue })); public readonly onDidChangeCursorSelection: Event = this._onDidChangeCursorSelection.event; - private readonly _onDidAttemptReadOnlyEdit: Emitter = this._register(new Emitter({ deliveryQueue: this._deliveryQueue })); + private readonly _onDidAttemptReadOnlyEdit: Emitter = this._register(new InteractionEmitter(this._contributions2, this._deliveryQueue)); public readonly onDidAttemptReadOnlyEdit: Event = this._onDidAttemptReadOnlyEdit.event; private readonly _onDidLayoutChange: Emitter = this._register(new Emitter({ deliveryQueue: this._deliveryQueue })); @@ -166,55 +167,55 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE public readonly onDidFocusEditorWidget: Event = this._editorWidgetFocus.onDidChangeToTrue; public readonly onDidBlurEditorWidget: Event = this._editorWidgetFocus.onDidChangeToFalse; - private readonly _onWillType: Emitter = this._register(new Emitter({ deliveryQueue: this._deliveryQueue })); + private readonly _onWillType: Emitter = this._register(new InteractionEmitter(this._contributions2, this._deliveryQueue)); public readonly onWillType = this._onWillType.event; - private readonly _onDidType: Emitter = this._register(new Emitter({ deliveryQueue: this._deliveryQueue })); + private readonly _onDidType: Emitter = this._register(new InteractionEmitter(this._contributions2, this._deliveryQueue)); public readonly onDidType = this._onDidType.event; - private readonly _onDidCompositionStart: Emitter = this._register(new Emitter({ deliveryQueue: this._deliveryQueue })); + private readonly _onDidCompositionStart: Emitter = this._register(new InteractionEmitter(this._contributions2, this._deliveryQueue)); public readonly onDidCompositionStart = this._onDidCompositionStart.event; - private readonly _onDidCompositionEnd: Emitter = this._register(new Emitter({ deliveryQueue: this._deliveryQueue })); + private readonly _onDidCompositionEnd: Emitter = this._register(new InteractionEmitter(this._contributions2, this._deliveryQueue)); public readonly onDidCompositionEnd = this._onDidCompositionEnd.event; - private readonly _onDidPaste: Emitter = this._register(new Emitter({ deliveryQueue: this._deliveryQueue })); + private readonly _onDidPaste: Emitter = this._register(new InteractionEmitter(this._contributions2, this._deliveryQueue)); public readonly onDidPaste = this._onDidPaste.event; - private readonly _onMouseUp: Emitter = this._register(new Emitter({ deliveryQueue: this._deliveryQueue })); + private readonly _onMouseUp: Emitter = this._register(new InteractionEmitter(this._contributions2, this._deliveryQueue)); public readonly onMouseUp: Event = this._onMouseUp.event; - private readonly _onMouseDown: Emitter = this._register(new Emitter({ deliveryQueue: this._deliveryQueue })); + private readonly _onMouseDown: Emitter = this._register(new InteractionEmitter(this._contributions2, this._deliveryQueue)); public readonly onMouseDown: Event = this._onMouseDown.event; - private readonly _onMouseDrag: Emitter = this._register(new Emitter({ deliveryQueue: this._deliveryQueue })); + private readonly _onMouseDrag: Emitter = this._register(new InteractionEmitter(this._contributions2, this._deliveryQueue)); public readonly onMouseDrag: Event = this._onMouseDrag.event; - private readonly _onMouseDrop: Emitter = this._register(new Emitter({ deliveryQueue: this._deliveryQueue })); + private readonly _onMouseDrop: Emitter = this._register(new InteractionEmitter(this._contributions2, this._deliveryQueue)); public readonly onMouseDrop: Event = this._onMouseDrop.event; - private readonly _onMouseDropCanceled: Emitter = this._register(new Emitter({ deliveryQueue: this._deliveryQueue })); + private readonly _onMouseDropCanceled: Emitter = this._register(new InteractionEmitter(this._contributions2, this._deliveryQueue)); public readonly onMouseDropCanceled: Event = this._onMouseDropCanceled.event; - private readonly _onDropIntoEditor = this._register(new Emitter<{ readonly position: IPosition; readonly event: DragEvent }>({ deliveryQueue: this._deliveryQueue })); + private readonly _onDropIntoEditor = this._register(new InteractionEmitter<{ readonly position: IPosition; readonly event: DragEvent }>(this._contributions2, this._deliveryQueue)); public readonly onDropIntoEditor = this._onDropIntoEditor.event; - private readonly _onContextMenu: Emitter = this._register(new Emitter({ deliveryQueue: this._deliveryQueue })); + private readonly _onContextMenu: Emitter = this._register(new InteractionEmitter(this._contributions2, this._deliveryQueue)); public readonly onContextMenu: Event = this._onContextMenu.event; - private readonly _onMouseMove: Emitter = this._register(new Emitter({ deliveryQueue: this._deliveryQueue })); + private readonly _onMouseMove: Emitter = this._register(new InteractionEmitter(this._contributions2, this._deliveryQueue)); public readonly onMouseMove: Event = this._onMouseMove.event; - private readonly _onMouseLeave: Emitter = this._register(new Emitter({ deliveryQueue: this._deliveryQueue })); + private readonly _onMouseLeave: Emitter = this._register(new InteractionEmitter(this._contributions2, this._deliveryQueue)); public readonly onMouseLeave: Event = this._onMouseLeave.event; - private readonly _onMouseWheel: Emitter = this._register(new Emitter({ deliveryQueue: this._deliveryQueue })); + private readonly _onMouseWheel: Emitter = this._register(new InteractionEmitter(this._contributions2, this._deliveryQueue)); public readonly onMouseWheel: Event = this._onMouseWheel.event; - private readonly _onKeyUp: Emitter = this._register(new Emitter({ deliveryQueue: this._deliveryQueue })); + private readonly _onKeyUp: Emitter = this._register(new InteractionEmitter(this._contributions2, this._deliveryQueue)); public readonly onKeyUp: Event = this._onKeyUp.event; - private readonly _onKeyDown: Emitter = this._register(new Emitter({ deliveryQueue: this._deliveryQueue })); + private readonly _onKeyDown: Emitter = this._register(new InteractionEmitter(this._contributions2, this._deliveryQueue)); public readonly onKeyDown: Event = this._onKeyDown.event; private readonly _onDidContentSizeChange: Emitter = this._register(new Emitter({ deliveryQueue: this._deliveryQueue })); @@ -241,7 +242,6 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE private readonly _id: number; private readonly _configuration: IEditorConfiguration; - protected readonly _contributions = new DisposableMap>(); protected readonly _actions = new Map(); // --- Members logically associated to a model @@ -332,35 +332,7 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE } else { contributions = EditorExtensionsRegistry.getEditorContributions(); } - for (const desc of contributions) { - if (this._contributions.has(desc.id)) { - onUnexpectedError(new Error(`Cannot have two contributions with the same id ${desc.id}`)); - continue; - } - try { - if (desc.instantiation === EditorContributionInstantiation.Idle) { - const contribution = new IdleValue(() => { - try { - // Replace the original entry in _contributions with the resolved contribution - const instance = this._instantiationService.createInstance(desc.ctor, this); - this._contributions.set(desc.id, instance); - return instance; - } catch (err) { - // In case of an exception, we delete the idle value from _contributions - onUnexpectedError(err); - this._contributions.deleteAndDispose(desc.id); - return null; - } - }); - this._contributions.set(desc.id, contribution); - } else { - const contribution = this._instantiationService.createInstance(desc.ctor, this); - this._contributions.set(desc.id, contribution); - } - } catch (err) { - onUnexpectedError(err); - } - } + this._contributions2.initialize(this, contributions, this._instantiationService); for (const action of EditorExtensionsRegistry.getEditorActions()) { if (this._actions.has(action.id)) { @@ -423,7 +395,6 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE }, })); - this._codeEditorService.addCodeEditor(this); } @@ -443,7 +414,6 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE this._codeEditorService.removeCodeEditor(this); this._focusTracker.dispose(); - this._contributions.dispose(); this._actions.clear(); this._contentWidgets = {}; this._overlayWidgets = {}; @@ -541,6 +511,8 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE this._removeDecorationTypes(); this._onDidChangeModel.fire(e); this._postDetachModelCleanup(detachedModel); + + this._contributions2.onAfterModelAttached(); } private _removeDecorationTypes(): void { @@ -1007,14 +979,7 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE if (!this._modelData) { return null; } - const contributionsState: { [key: string]: any } = {}; - - for (const [id, contribution] of this._contributions) { - if (!(contribution instanceof IdleValue) && typeof contribution.saveViewState === 'function') { - contributionsState[id] = contribution.saveViewState(); - } - } - + const contributionsState = this._contributions2.saveViewState(); const cursorState = this._modelData.viewModel.saveCursorState(); const viewState = this._modelData.viewModel.saveState(); return { @@ -1040,13 +1005,7 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE this._modelData.viewModel.restoreCursorState([cursorState]); } - const contributionsState = codeEditorState.contributionsState || {}; - for (const [id, contribution] of this._contributions) { - if (!(contribution instanceof IdleValue) && typeof contribution.restoreViewState === 'function') { - contribution.restoreViewState(contributionsState[id]); - } - } - + this._contributions2.restoreViewState(codeEditorState.contributionsState || {}); const reducedState = this._modelData.viewModel.reduceRestoreState(codeEditorState.viewState); this._modelData.view.restoreState(reducedState); } @@ -1062,12 +1021,7 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE } public getContribution(id: string): T | null { - const entry = this._contributions.get(id); - if (!entry) { - return null; - } - - return (entry instanceof IdleValue ? entry.value : entry) as T | null; + return this._contributions2.get(id) as T | null; } public getActions(): editorCommon.IEditorAction[] { @@ -1932,6 +1886,24 @@ export class BooleanEventEmitter extends Disposable { } } +/** + * A regular event emitter that also makes sure contributions are instantiated if necessary + */ +class InteractionEmitter extends Emitter { + + constructor( + private readonly _contributions: CodeEditorContributions, + deliveryQueue: EventDeliveryQueue + ) { + super({ deliveryQueue }); + } + + override fire(event: T): void { + this._contributions.onBeforeInteractionEvent(); + super.fire(event); + } +} + class EditorContextKeysManager extends Disposable { private readonly _editor: CodeEditorWidget; diff --git a/src/vs/editor/contrib/anchorSelect/browser/anchorSelect.ts b/src/vs/editor/contrib/anchorSelect/browser/anchorSelect.ts index 6972a300abb..ab93153c7e8 100644 --- a/src/vs/editor/contrib/anchorSelect/browser/anchorSelect.ts +++ b/src/vs/editor/contrib/anchorSelect/browser/anchorSelect.ts @@ -9,7 +9,7 @@ import { KeyChord, KeyCode, KeyMod } from 'vs/base/common/keyCodes'; import { IDisposable } from 'vs/base/common/lifecycle'; import 'vs/css!./anchorSelect'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, registerEditorAction, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; +import { EditorAction, EditorContributionInstantiation, registerEditorAction, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; import { Selection } from 'vs/editor/common/core/selection'; import { IEditorContribution } from 'vs/editor/common/editorCommon'; import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; @@ -174,7 +174,7 @@ class CancelSelectionAnchor extends EditorAction { } } -registerEditorContribution(SelectionAnchorController.ID, SelectionAnchorController); +registerEditorContribution(SelectionAnchorController.ID, SelectionAnchorController, EditorContributionInstantiation.Lazy); registerEditorAction(SetSelectionAnchor); registerEditorAction(GoToSelectionAnchor); registerEditorAction(SelectFromAnchorToCursor); diff --git a/src/vs/editor/contrib/bracketMatching/browser/bracketMatching.ts b/src/vs/editor/contrib/bracketMatching/browser/bracketMatching.ts index 2068b85d0d8..09b0cb279b4 100644 --- a/src/vs/editor/contrib/bracketMatching/browser/bracketMatching.ts +++ b/src/vs/editor/contrib/bracketMatching/browser/bracketMatching.ts @@ -8,7 +8,7 @@ import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; import { Disposable } from 'vs/base/common/lifecycle'; import 'vs/css!./bracketMatching'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, registerEditorAction, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; +import { EditorAction, EditorContributionInstantiation, registerEditorAction, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; import { EditorOption } from 'vs/editor/common/config/editorOptions'; import { Position } from 'vs/editor/common/core/position'; import { Range } from 'vs/editor/common/core/range'; @@ -356,7 +356,7 @@ export class BracketMatchingController extends Disposable implements IEditorCont } } -registerEditorContribution(BracketMatchingController.ID, BracketMatchingController); +registerEditorContribution(BracketMatchingController.ID, BracketMatchingController, EditorContributionInstantiation.AfterFirstRender); registerEditorAction(SelectToBracketAction); registerEditorAction(JumpToBracketAction); diff --git a/src/vs/editor/contrib/codeAction/browser/codeActionContributions.ts b/src/vs/editor/contrib/codeAction/browser/codeActionContributions.ts index 24b8b5b6bed..8629326b68e 100644 --- a/src/vs/editor/contrib/codeAction/browser/codeActionContributions.ts +++ b/src/vs/editor/contrib/codeAction/browser/codeActionContributions.ts @@ -10,7 +10,7 @@ import * as nls from 'vs/nls'; import { ConfigurationScope, Extensions, IConfigurationRegistry } from 'vs/platform/configuration/common/configurationRegistry'; import { Registry } from 'vs/platform/registry/common/platform'; -registerEditorContribution(CodeActionController.ID, CodeActionController, EditorContributionInstantiation.Idle); +registerEditorContribution(CodeActionController.ID, CodeActionController, EditorContributionInstantiation.Eventually); registerEditorAction(QuickFixAction); registerEditorAction(RefactorAction); registerEditorAction(RefactorPreview); diff --git a/src/vs/editor/contrib/codelens/browser/codelensController.ts b/src/vs/editor/contrib/codelens/browser/codelensController.ts index 8f6603ee10e..6eab699bd4f 100644 --- a/src/vs/editor/contrib/codelens/browser/codelensController.ts +++ b/src/vs/editor/contrib/codelens/browser/codelensController.ts @@ -9,7 +9,7 @@ import { onUnexpectedError, onUnexpectedExternalError } from 'vs/base/common/err import { DisposableStore, toDisposable } from 'vs/base/common/lifecycle'; import { StableEditorScrollState } from 'vs/editor/browser/stableEditorScroll'; import { IActiveCodeEditor, ICodeEditor, IViewZoneChangeAccessor, MouseTargetType } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, registerEditorAction, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; +import { EditorAction, EditorContributionInstantiation, registerEditorAction, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; import { EditorOption, EDITOR_FONT_DEFAULTS } from 'vs/editor/common/config/editorOptions'; import { IEditorContribution } from 'vs/editor/common/editorCommon'; import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; @@ -444,7 +444,7 @@ export class CodeLensContribution implements IEditorContribution { } } -registerEditorContribution(CodeLensContribution.ID, CodeLensContribution); +registerEditorContribution(CodeLensContribution.ID, CodeLensContribution, EditorContributionInstantiation.AfterFirstRender); registerEditorAction(class ShowLensesInCurrentLine extends EditorAction { diff --git a/src/vs/editor/contrib/colorPicker/browser/colorContributions.ts b/src/vs/editor/contrib/colorPicker/browser/colorContributions.ts index 585c705984e..4b4e0fdb380 100644 --- a/src/vs/editor/contrib/colorPicker/browser/colorContributions.ts +++ b/src/vs/editor/contrib/colorPicker/browser/colorContributions.ts @@ -5,7 +5,7 @@ import { Disposable } from 'vs/base/common/lifecycle'; import { ICodeEditor, IEditorMouseEvent, MouseTargetType } from 'vs/editor/browser/editorBrowser'; -import { registerEditorContribution } from 'vs/editor/browser/editorExtensions'; +import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; import { Range } from 'vs/editor/common/core/range'; import { IEditorContribution } from 'vs/editor/common/editorCommon'; import { ColorDecorationInjectedTextMarker } from 'vs/editor/contrib/colorPicker/browser/colorDetector'; @@ -60,5 +60,5 @@ export class ColorContribution extends Disposable implements IEditorContribution } } -registerEditorContribution(ColorContribution.ID, ColorContribution); +registerEditorContribution(ColorContribution.ID, ColorContribution, EditorContributionInstantiation.BeforeFirstInteraction); HoverParticipantRegistry.register(ColorHoverParticipant); diff --git a/src/vs/editor/contrib/colorPicker/browser/colorDetector.ts b/src/vs/editor/contrib/colorPicker/browser/colorDetector.ts index d4cd26914b1..fb11e6833b9 100644 --- a/src/vs/editor/contrib/colorPicker/browser/colorDetector.ts +++ b/src/vs/editor/contrib/colorPicker/browser/colorDetector.ts @@ -11,7 +11,7 @@ import { StopWatch } from 'vs/base/common/stopwatch'; import { noBreakWhitespace } from 'vs/base/common/strings'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; import { DynamicCssRules } from 'vs/editor/browser/editorDom'; -import { registerEditorContribution } from 'vs/editor/browser/editorExtensions'; +import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; import { EditorOption } from 'vs/editor/common/config/editorOptions'; import { Position } from 'vs/editor/common/core/position'; import { Range } from 'vs/editor/common/core/range'; @@ -249,4 +249,4 @@ export class ColorDetector extends Disposable implements IEditorContribution { } } -registerEditorContribution(ColorDetector.ID, ColorDetector); +registerEditorContribution(ColorDetector.ID, ColorDetector, EditorContributionInstantiation.AfterFirstRender); diff --git a/src/vs/editor/contrib/contextmenu/browser/contextmenu.ts b/src/vs/editor/contrib/contextmenu/browser/contextmenu.ts index 52b44c8c969..e21a5618319 100644 --- a/src/vs/editor/contrib/contextmenu/browser/contextmenu.ts +++ b/src/vs/editor/contrib/contextmenu/browser/contextmenu.ts @@ -14,7 +14,7 @@ import { ResolvedKeybinding } from 'vs/base/common/keybindings'; import { DisposableStore } from 'vs/base/common/lifecycle'; import { isIOS } from 'vs/base/common/platform'; import { ICodeEditor, IEditorMouseEvent, MouseTargetType } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, registerEditorAction, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; +import { EditorAction, EditorContributionInstantiation, registerEditorAction, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; import { EditorOption } from 'vs/editor/common/config/editorOptions'; import { IEditorContribution, ScrollType } from 'vs/editor/common/editorCommon'; import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; @@ -402,5 +402,5 @@ class ShowContextMenu extends EditorAction { } } -registerEditorContribution(ContextMenuController.ID, ContextMenuController); +registerEditorContribution(ContextMenuController.ID, ContextMenuController, EditorContributionInstantiation.BeforeFirstInteraction); registerEditorAction(ShowContextMenu); diff --git a/src/vs/editor/contrib/copyPaste/browser/copyPasteContribution.ts b/src/vs/editor/contrib/copyPaste/browser/copyPasteContribution.ts index ace4c5b0112..f3501f4b074 100644 --- a/src/vs/editor/contrib/copyPaste/browser/copyPasteContribution.ts +++ b/src/vs/editor/contrib/copyPaste/browser/copyPasteContribution.ts @@ -10,7 +10,7 @@ import * as nls from 'vs/nls'; import { ConfigurationScope, Extensions, IConfigurationRegistry } from 'vs/platform/configuration/common/configurationRegistry'; import { Registry } from 'vs/platform/registry/common/platform'; -registerEditorContribution(CopyPasteController.ID, CopyPasteController, EditorContributionInstantiation.Idle); +registerEditorContribution(CopyPasteController.ID, CopyPasteController, EditorContributionInstantiation.Eager); // eager because it listens to events on the container dom node of the editor Registry.as(Extensions.Configuration).registerConfiguration({ ...editorConfigurationBaseNode, diff --git a/src/vs/editor/contrib/cursorUndo/browser/cursorUndo.ts b/src/vs/editor/contrib/cursorUndo/browser/cursorUndo.ts index e340506126a..bd4c56bc1b1 100644 --- a/src/vs/editor/contrib/cursorUndo/browser/cursorUndo.ts +++ b/src/vs/editor/contrib/cursorUndo/browser/cursorUndo.ts @@ -6,7 +6,7 @@ import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; import { Disposable } from 'vs/base/common/lifecycle'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, registerEditorAction, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; +import { EditorAction, EditorContributionInstantiation, registerEditorAction, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; import { Selection } from 'vs/editor/common/core/selection'; import { IEditorContribution } from 'vs/editor/common/editorCommon'; import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; @@ -160,6 +160,6 @@ export class CursorRedo extends EditorAction { } } -registerEditorContribution(CursorUndoRedoController.ID, CursorUndoRedoController); +registerEditorContribution(CursorUndoRedoController.ID, CursorUndoRedoController, EditorContributionInstantiation.Eager); // eager because it needs to listen to record cursor state ASAP registerEditorAction(CursorUndo); registerEditorAction(CursorRedo); diff --git a/src/vs/editor/contrib/dnd/browser/dnd.ts b/src/vs/editor/contrib/dnd/browser/dnd.ts index f2c075a8122..d4576e66c8d 100644 --- a/src/vs/editor/contrib/dnd/browser/dnd.ts +++ b/src/vs/editor/contrib/dnd/browser/dnd.ts @@ -10,7 +10,7 @@ import { Disposable } from 'vs/base/common/lifecycle'; import { isMacintosh } from 'vs/base/common/platform'; import 'vs/css!./dnd'; import { ICodeEditor, IEditorMouseEvent, IMouseTarget, IPartialEditorMouseEvent, MouseTargetType } from 'vs/editor/browser/editorBrowser'; -import { registerEditorContribution } from 'vs/editor/browser/editorExtensions'; +import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; import { CodeEditorWidget } from 'vs/editor/browser/widget/codeEditorWidget'; import { EditorOption } from 'vs/editor/common/config/editorOptions'; import { CursorChangeReason } from 'vs/editor/common/cursorEvents'; @@ -239,4 +239,4 @@ export class DragAndDropController extends Disposable implements IEditorContribu } } -registerEditorContribution(DragAndDropController.ID, DragAndDropController); +registerEditorContribution(DragAndDropController.ID, DragAndDropController, EditorContributionInstantiation.BeforeFirstInteraction); diff --git a/src/vs/editor/contrib/dropIntoEditor/browser/dropIntoEditorContribution.ts b/src/vs/editor/contrib/dropIntoEditor/browser/dropIntoEditorContribution.ts index 191aac71112..941c0a0d91e 100644 --- a/src/vs/editor/contrib/dropIntoEditor/browser/dropIntoEditorContribution.ts +++ b/src/vs/editor/contrib/dropIntoEditor/browser/dropIntoEditorContribution.ts @@ -178,5 +178,5 @@ class DefaultOnDropProvider implements DocumentOnDropEditProvider { } -registerEditorContribution(DropIntoEditorController.ID, DropIntoEditorController, EditorContributionInstantiation.Idle); +registerEditorContribution(DropIntoEditorController.ID, DropIntoEditorController, EditorContributionInstantiation.BeforeFirstInteraction); diff --git a/src/vs/editor/contrib/find/browser/findController.ts b/src/vs/editor/contrib/find/browser/findController.ts index 676fa5dcbaa..e1d3ae55069 100644 --- a/src/vs/editor/contrib/find/browser/findController.ts +++ b/src/vs/editor/contrib/find/browser/findController.ts @@ -8,7 +8,7 @@ import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; import { Disposable } from 'vs/base/common/lifecycle'; import * as strings from 'vs/base/common/strings'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, EditorCommand, MultiEditorAction, registerEditorAction, registerEditorCommand, registerEditorContribution, registerMultiEditorAction, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; +import { EditorAction, EditorCommand, EditorContributionInstantiation, MultiEditorAction, registerEditorAction, registerEditorCommand, registerEditorContribution, registerMultiEditorAction, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; import { EditorOption } from 'vs/editor/common/config/editorOptions'; import { IEditorContribution } from 'vs/editor/common/editorCommon'; import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; @@ -865,7 +865,7 @@ StartFindReplaceAction.addImplementation(0, (accessor: ServicesAccessor, editor: }); }); -registerEditorContribution(CommonFindController.ID, FindController); +registerEditorContribution(CommonFindController.ID, FindController, EditorContributionInstantiation.Eager); // eager because it uses `saveViewState`/`restoreViewState` registerEditorAction(StartFindWithArgsAction); registerEditorAction(StartFindWithSelectionAction); diff --git a/src/vs/editor/contrib/folding/browser/folding.ts b/src/vs/editor/contrib/folding/browser/folding.ts index 370d424b656..1cd4878299b 100644 --- a/src/vs/editor/contrib/folding/browser/folding.ts +++ b/src/vs/editor/contrib/folding/browser/folding.ts @@ -13,7 +13,7 @@ import * as types from 'vs/base/common/types'; import 'vs/css!./folding'; import { StableEditorScrollState } from 'vs/editor/browser/stableEditorScroll'; import { ICodeEditor, IEditorMouseEvent, MouseTargetType } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, registerEditorAction, registerEditorContribution, registerInstantiatedEditorAction, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; +import { EditorAction, EditorContributionInstantiation, registerEditorAction, registerEditorContribution, registerInstantiatedEditorAction, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; import { ConfigurationChangedEvent, EditorOption } from 'vs/editor/common/config/editorOptions'; import { IPosition } from 'vs/editor/common/core/position'; import { IRange } from 'vs/editor/common/core/range'; @@ -1165,7 +1165,7 @@ class RemoveFoldRangeFromSelectionAction extends FoldingAction { } -registerEditorContribution(FoldingController.ID, FoldingController); +registerEditorContribution(FoldingController.ID, FoldingController, EditorContributionInstantiation.Eager); // eager because it uses `saveViewState`/`restoreViewState` registerEditorAction(UnfoldAction); registerEditorAction(UnFoldRecursivelyAction); registerEditorAction(FoldAction); diff --git a/src/vs/editor/contrib/format/browser/formatActions.ts b/src/vs/editor/contrib/format/browser/formatActions.ts index 466dc5544a0..934d5f4a6cc 100644 --- a/src/vs/editor/contrib/format/browser/formatActions.ts +++ b/src/vs/editor/contrib/format/browser/formatActions.ts @@ -9,7 +9,7 @@ import { onUnexpectedError } from 'vs/base/common/errors'; import { KeyChord, KeyCode, KeyMod } from 'vs/base/common/keyCodes'; import { DisposableStore } from 'vs/base/common/lifecycle'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, registerEditorAction, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; +import { EditorAction, EditorContributionInstantiation, registerEditorAction, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; import { EditorOption } from 'vs/editor/common/config/editorOptions'; import { CharacterSet } from 'vs/editor/common/core/characterClassifier'; @@ -282,8 +282,8 @@ class FormatSelectionAction extends EditorAction { } } -registerEditorContribution(FormatOnType.ID, FormatOnType); -registerEditorContribution(FormatOnPaste.ID, FormatOnPaste); +registerEditorContribution(FormatOnType.ID, FormatOnType, EditorContributionInstantiation.BeforeFirstInteraction); +registerEditorContribution(FormatOnPaste.ID, FormatOnPaste, EditorContributionInstantiation.BeforeFirstInteraction); registerEditorAction(FormatDocumentAction); registerEditorAction(FormatSelectionAction); diff --git a/src/vs/editor/contrib/gotoError/browser/gotoError.ts b/src/vs/editor/contrib/gotoError/browser/gotoError.ts index 111462770fc..032d05c3ebb 100644 --- a/src/vs/editor/contrib/gotoError/browser/gotoError.ts +++ b/src/vs/editor/contrib/gotoError/browser/gotoError.ts @@ -8,7 +8,7 @@ import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; import { DisposableStore } from 'vs/base/common/lifecycle'; import { URI } from 'vs/base/common/uri'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, EditorCommand, IActionOptions, registerEditorAction, registerEditorCommand, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; +import { EditorAction, EditorCommand, EditorContributionInstantiation, IActionOptions, registerEditorAction, registerEditorCommand, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; import { Position } from 'vs/editor/common/core/position'; import { Range } from 'vs/editor/common/core/range'; @@ -277,7 +277,7 @@ class PrevMarkerInFilesAction extends MarkerNavigationAction { } } -registerEditorContribution(MarkerController.ID, MarkerController); +registerEditorContribution(MarkerController.ID, MarkerController, EditorContributionInstantiation.Lazy); registerEditorAction(NextMarkerAction); registerEditorAction(PrevMarkerAction); registerEditorAction(NextMarkerInFilesAction); diff --git a/src/vs/editor/contrib/gotoSymbol/browser/link/goToDefinitionAtPosition.ts b/src/vs/editor/contrib/gotoSymbol/browser/link/goToDefinitionAtPosition.ts index 5d9e2dcd8a0..291288719a5 100644 --- a/src/vs/editor/contrib/gotoSymbol/browser/link/goToDefinitionAtPosition.ts +++ b/src/vs/editor/contrib/gotoSymbol/browser/link/goToDefinitionAtPosition.ts @@ -13,7 +13,7 @@ import { withNullAsUndefined } from 'vs/base/common/types'; import 'vs/css!./goToDefinitionAtPosition'; import { CodeEditorStateFlag, EditorState } from 'vs/editor/contrib/editorState/browser/editorState'; import { ICodeEditor, MouseTargetType } from 'vs/editor/browser/editorBrowser'; -import { registerEditorContribution } from 'vs/editor/browser/editorExtensions'; +import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; import { EditorOption } from 'vs/editor/common/config/editorOptions'; import { Position } from 'vs/editor/common/core/position'; import { IRange, Range } from 'vs/editor/common/core/range'; @@ -315,4 +315,4 @@ export class GotoDefinitionAtPositionEditorContribution implements IEditorContri } } -registerEditorContribution(GotoDefinitionAtPositionEditorContribution.ID, GotoDefinitionAtPositionEditorContribution); +registerEditorContribution(GotoDefinitionAtPositionEditorContribution.ID, GotoDefinitionAtPositionEditorContribution, EditorContributionInstantiation.BeforeFirstInteraction); diff --git a/src/vs/editor/contrib/hover/browser/hover.ts b/src/vs/editor/contrib/hover/browser/hover.ts index ee527899922..a1a0e1e12fd 100644 --- a/src/vs/editor/contrib/hover/browser/hover.ts +++ b/src/vs/editor/contrib/hover/browser/hover.ts @@ -7,7 +7,7 @@ import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent'; import { KeyChord, KeyCode, KeyMod } from 'vs/base/common/keyCodes'; import { DisposableStore, IDisposable } from 'vs/base/common/lifecycle'; import { ICodeEditor, IEditorMouseEvent, IPartialEditorMouseEvent, MouseTargetType } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, registerEditorAction, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; +import { EditorAction, EditorContributionInstantiation, registerEditorAction, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; import { ConfigurationChangedEvent, EditorOption } from 'vs/editor/common/config/editorOptions'; import { Range } from 'vs/editor/common/core/range'; import { IEditorContribution, IScrollEvent } from 'vs/editor/common/editorCommon'; @@ -315,7 +315,7 @@ class ShowDefinitionPreviewHoverAction extends EditorAction { } } -registerEditorContribution(ModesHoverController.ID, ModesHoverController); +registerEditorContribution(ModesHoverController.ID, ModesHoverController, EditorContributionInstantiation.BeforeFirstInteraction); registerEditorAction(ShowHoverAction); registerEditorAction(ShowDefinitionPreviewHoverAction); HoverParticipantRegistry.register(MarkdownHoverParticipant); diff --git a/src/vs/editor/contrib/inPlaceReplace/browser/inPlaceReplace.ts b/src/vs/editor/contrib/inPlaceReplace/browser/inPlaceReplace.ts index 3bdad1e8c83..9d1f8e8bc5e 100644 --- a/src/vs/editor/contrib/inPlaceReplace/browser/inPlaceReplace.ts +++ b/src/vs/editor/contrib/inPlaceReplace/browser/inPlaceReplace.ts @@ -8,7 +8,7 @@ import { onUnexpectedError } from 'vs/base/common/errors'; import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; import { CodeEditorStateFlag, EditorState } from 'vs/editor/contrib/editorState/browser/editorState'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, registerEditorAction, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; +import { EditorAction, EditorContributionInstantiation, registerEditorAction, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; import { Range } from 'vs/editor/common/core/range'; import { Selection } from 'vs/editor/common/core/selection'; import { IEditorContribution, IEditorDecorationsCollection } from 'vs/editor/common/editorCommon'; @@ -176,7 +176,7 @@ class InPlaceReplaceDown extends EditorAction { } } -registerEditorContribution(InPlaceReplaceController.ID, InPlaceReplaceController); +registerEditorContribution(InPlaceReplaceController.ID, InPlaceReplaceController, EditorContributionInstantiation.Lazy); registerEditorAction(InPlaceReplaceUp); registerEditorAction(InPlaceReplaceDown); diff --git a/src/vs/editor/contrib/indentation/browser/indentation.ts b/src/vs/editor/contrib/indentation/browser/indentation.ts index 532e236054b..dcda82dd6d7 100644 --- a/src/vs/editor/contrib/indentation/browser/indentation.ts +++ b/src/vs/editor/contrib/indentation/browser/indentation.ts @@ -6,7 +6,7 @@ import { DisposableStore } from 'vs/base/common/lifecycle'; import * as strings from 'vs/base/common/strings'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, IActionOptions, registerEditorAction, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; +import { EditorAction, EditorContributionInstantiation, IActionOptions, registerEditorAction, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; import { ShiftCommand } from 'vs/editor/common/commands/shiftCommand'; import { EditorAutoIndentStrategy, EditorOption } from 'vs/editor/common/config/editorOptions'; import { EditOperation, ISingleEditOperation } from 'vs/editor/common/core/editOperation'; @@ -720,7 +720,7 @@ export class IndentationToTabsCommand implements ICommand { } } -registerEditorContribution(AutoIndentOnPaste.ID, AutoIndentOnPaste); +registerEditorContribution(AutoIndentOnPaste.ID, AutoIndentOnPaste, EditorContributionInstantiation.BeforeFirstInteraction); registerEditorAction(IndentationToSpacesAction); registerEditorAction(IndentationToTabsAction); registerEditorAction(IndentUsingTabs); diff --git a/src/vs/editor/contrib/inlayHints/browser/inlayHintsContribution.ts b/src/vs/editor/contrib/inlayHints/browser/inlayHintsContribution.ts index 17f44f00108..ae4d54b7d96 100644 --- a/src/vs/editor/contrib/inlayHints/browser/inlayHintsContribution.ts +++ b/src/vs/editor/contrib/inlayHints/browser/inlayHintsContribution.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { registerEditorContribution } from 'vs/editor/browser/editorExtensions'; +import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; import { HoverParticipantRegistry } from 'vs/editor/contrib/hover/browser/hoverTypes'; import { InlayHintsController } from 'vs/editor/contrib/inlayHints/browser/inlayHintsController'; import { InlayHintsHover } from 'vs/editor/contrib/inlayHints/browser/inlayHintsHover'; -registerEditorContribution(InlayHintsController.ID, InlayHintsController); +registerEditorContribution(InlayHintsController.ID, InlayHintsController, EditorContributionInstantiation.AfterFirstRender); HoverParticipantRegistry.register(InlayHintsHover); diff --git a/src/vs/editor/contrib/linkedEditing/browser/linkedEditing.ts b/src/vs/editor/contrib/linkedEditing/browser/linkedEditing.ts index c5e20edfe5f..c75f8ccb0d4 100644 --- a/src/vs/editor/contrib/linkedEditing/browser/linkedEditing.ts +++ b/src/vs/editor/contrib/linkedEditing/browser/linkedEditing.ts @@ -14,7 +14,7 @@ import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; import * as strings from 'vs/base/common/strings'; import { URI } from 'vs/base/common/uri'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, EditorCommand, registerEditorAction, registerEditorCommand, registerEditorContribution, registerModelAndPositionCommand, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; +import { EditorAction, EditorCommand, EditorContributionInstantiation, registerEditorAction, registerEditorCommand, registerEditorContribution, registerModelAndPositionCommand, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; import { EditorOption } from 'vs/editor/common/config/editorOptions'; import { IPosition, Position } from 'vs/editor/common/core/position'; @@ -467,5 +467,5 @@ registerModelAndPositionCommand('_executeLinkedEditingProvider', (_accessor, mod return getLinkedEditingRanges(linkedEditingRangeProvider, model, position, CancellationToken.None); }); -registerEditorContribution(LinkedEditingContribution.ID, LinkedEditingContribution); +registerEditorContribution(LinkedEditingContribution.ID, LinkedEditingContribution, EditorContributionInstantiation.AfterFirstRender); registerEditorAction(LinkedEditingAction); diff --git a/src/vs/editor/contrib/links/browser/links.ts b/src/vs/editor/contrib/links/browser/links.ts index 1ae0d15b9a9..3786b9daa87 100644 --- a/src/vs/editor/contrib/links/browser/links.ts +++ b/src/vs/editor/contrib/links/browser/links.ts @@ -15,7 +15,7 @@ import { StopWatch } from 'vs/base/common/stopwatch'; import { URI } from 'vs/base/common/uri'; import 'vs/css!./links'; import { ICodeEditor, MouseTargetType } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, registerEditorAction, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; +import { EditorAction, EditorContributionInstantiation, registerEditorAction, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; import { EditorOption } from 'vs/editor/common/config/editorOptions'; import { Position } from 'vs/editor/common/core/position'; import { IEditorContribution } from 'vs/editor/common/editorCommon'; @@ -421,5 +421,5 @@ class OpenLinkAction extends EditorAction { } } -registerEditorContribution(LinkDetector.ID, LinkDetector); +registerEditorContribution(LinkDetector.ID, LinkDetector, EditorContributionInstantiation.AfterFirstRender); registerEditorAction(OpenLinkAction); diff --git a/src/vs/editor/contrib/longLinesHelper/browser/longLinesHelper.ts b/src/vs/editor/contrib/longLinesHelper/browser/longLinesHelper.ts index 0df6e8ee2f1..6ac8f6f7d88 100644 --- a/src/vs/editor/contrib/longLinesHelper/browser/longLinesHelper.ts +++ b/src/vs/editor/contrib/longLinesHelper/browser/longLinesHelper.ts @@ -5,7 +5,7 @@ import { Disposable } from 'vs/base/common/lifecycle'; import { ICodeEditor, MouseTargetType } from 'vs/editor/browser/editorBrowser'; -import { registerEditorContribution } from 'vs/editor/browser/editorExtensions'; +import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; import { EditorOption } from 'vs/editor/common/config/editorOptions'; import { IEditorContribution } from 'vs/editor/common/editorCommon'; @@ -32,4 +32,4 @@ class LongLinesHelper extends Disposable implements IEditorContribution { } } -registerEditorContribution(LongLinesHelper.ID, LongLinesHelper); +registerEditorContribution(LongLinesHelper.ID, LongLinesHelper, EditorContributionInstantiation.BeforeFirstInteraction); diff --git a/src/vs/editor/contrib/message/browser/messageController.ts b/src/vs/editor/contrib/message/browser/messageController.ts index 04177380066..20176e5221d 100644 --- a/src/vs/editor/contrib/message/browser/messageController.ts +++ b/src/vs/editor/contrib/message/browser/messageController.ts @@ -9,7 +9,7 @@ import { KeyCode } from 'vs/base/common/keyCodes'; import { DisposableStore, IDisposable, MutableDisposable } from 'vs/base/common/lifecycle'; import 'vs/css!./messageController'; import { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition } from 'vs/editor/browser/editorBrowser'; -import { EditorCommand, registerEditorCommand, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; +import { EditorCommand, EditorContributionInstantiation, registerEditorCommand, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; import { IPosition } from 'vs/editor/common/core/position'; import { Range } from 'vs/editor/common/core/range'; import { IEditorContribution, ScrollType } from 'vs/editor/common/editorCommon'; @@ -188,4 +188,4 @@ class MessageWidget implements IContentWidget { } -registerEditorContribution(MessageController.ID, MessageController); +registerEditorContribution(MessageController.ID, MessageController, EditorContributionInstantiation.Lazy); diff --git a/src/vs/editor/contrib/multicursor/browser/multicursor.ts b/src/vs/editor/contrib/multicursor/browser/multicursor.ts index aed9742b372..ce576bbfcad 100644 --- a/src/vs/editor/contrib/multicursor/browser/multicursor.ts +++ b/src/vs/editor/contrib/multicursor/browser/multicursor.ts @@ -9,7 +9,7 @@ import { KeyChord, KeyCode, KeyMod } from 'vs/base/common/keyCodes'; import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; import { Constants } from 'vs/base/common/uint'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, registerEditorAction, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; +import { EditorAction, EditorContributionInstantiation, registerEditorAction, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; import { EditorOption } from 'vs/editor/common/config/editorOptions'; import { CursorState } from 'vs/editor/common/cursorCommon'; import { CursorChangeReason, ICursorSelectionChangedEvent } from 'vs/editor/common/cursorEvents'; @@ -900,6 +900,7 @@ export class SelectionHighlighter extends Disposable implements IEditorContribut this._update(); })); } + this.updateSoon.schedule(); } private _update(): void { @@ -1169,8 +1170,8 @@ export class FocusPreviousCursor extends EditorAction { } } -registerEditorContribution(MultiCursorSelectionController.ID, MultiCursorSelectionController); -registerEditorContribution(SelectionHighlighter.ID, SelectionHighlighter); +registerEditorContribution(MultiCursorSelectionController.ID, MultiCursorSelectionController, EditorContributionInstantiation.Lazy); +registerEditorContribution(SelectionHighlighter.ID, SelectionHighlighter, EditorContributionInstantiation.AfterFirstRender); registerEditorAction(InsertCursorAbove); registerEditorAction(InsertCursorBelow); diff --git a/src/vs/editor/contrib/parameterHints/browser/parameterHints.ts b/src/vs/editor/contrib/parameterHints/browser/parameterHints.ts index c4b31f6a167..25cb7827b7c 100644 --- a/src/vs/editor/contrib/parameterHints/browser/parameterHints.ts +++ b/src/vs/editor/contrib/parameterHints/browser/parameterHints.ts @@ -96,7 +96,7 @@ export class TriggerParameterHintsAction extends EditorAction { } } -registerEditorContribution(ParameterHintsController.ID, ParameterHintsController, EditorContributionInstantiation.Idle); +registerEditorContribution(ParameterHintsController.ID, ParameterHintsController, EditorContributionInstantiation.BeforeFirstInteraction); registerEditorAction(TriggerParameterHintsAction); const weight = KeybindingWeight.EditorContrib + 75; diff --git a/src/vs/editor/contrib/peekView/browser/peekView.ts b/src/vs/editor/contrib/peekView/browser/peekView.ts index 51e6e4b8991..6bbf18383b5 100644 --- a/src/vs/editor/contrib/peekView/browser/peekView.ts +++ b/src/vs/editor/contrib/peekView/browser/peekView.ts @@ -14,7 +14,7 @@ import { IDisposable } from 'vs/base/common/lifecycle'; import * as objects from 'vs/base/common/objects'; import 'vs/css!./media/peekViewWidget'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { registerEditorContribution } from 'vs/editor/browser/editorExtensions'; +import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; import { EmbeddedCodeEditorWidget } from 'vs/editor/browser/widget/embeddedCodeEditorWidget'; import { EditorOption } from 'vs/editor/common/config/editorOptions'; @@ -76,7 +76,7 @@ class PeekContextController implements IEditorContribution { dispose(): void { } } -registerEditorContribution(PeekContextController.ID, PeekContextController); +registerEditorContribution(PeekContextController.ID, PeekContextController, EditorContributionInstantiation.Eager); // eager because it needs to define a context key export function getOuterEditor(accessor: ServicesAccessor): ICodeEditor | null { const editor = accessor.get(ICodeEditorService).getFocusedCodeEditor(); diff --git a/src/vs/editor/contrib/readOnlyMessage/browser/contribution.ts b/src/vs/editor/contrib/readOnlyMessage/browser/contribution.ts index c4df6086148..138f8527bba 100644 --- a/src/vs/editor/contrib/readOnlyMessage/browser/contribution.ts +++ b/src/vs/editor/contrib/readOnlyMessage/browser/contribution.ts @@ -5,7 +5,7 @@ import { Disposable } from 'vs/base/common/lifecycle'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { registerEditorContribution } from 'vs/editor/browser/editorExtensions'; +import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; import { IEditorContribution } from 'vs/editor/common/editorCommon'; import { MessageController } from 'vs/editor/contrib/message/browser/messageController'; import * as nls from 'vs/nls'; @@ -33,4 +33,4 @@ export class ReadOnlyMessageController extends Disposable implements IEditorCont } } -registerEditorContribution(ReadOnlyMessageController.ID, ReadOnlyMessageController); +registerEditorContribution(ReadOnlyMessageController.ID, ReadOnlyMessageController, EditorContributionInstantiation.BeforeFirstInteraction); diff --git a/src/vs/editor/contrib/rename/browser/rename.ts b/src/vs/editor/contrib/rename/browser/rename.ts index e58b089edd9..6b9f4f50237 100644 --- a/src/vs/editor/contrib/rename/browser/rename.ts +++ b/src/vs/editor/contrib/rename/browser/rename.ts @@ -319,7 +319,7 @@ export class RenameAction extends EditorAction { } } -registerEditorContribution(RenameController.ID, RenameController, EditorContributionInstantiation.Idle); +registerEditorContribution(RenameController.ID, RenameController, EditorContributionInstantiation.Lazy); registerEditorAction(RenameAction); const RenameCommand = EditorCommand.bindToContribution(RenameController.get); diff --git a/src/vs/editor/contrib/smartSelect/browser/smartSelect.ts b/src/vs/editor/contrib/smartSelect/browser/smartSelect.ts index c20ce76405e..662b3dacf90 100644 --- a/src/vs/editor/contrib/smartSelect/browser/smartSelect.ts +++ b/src/vs/editor/contrib/smartSelect/browser/smartSelect.ts @@ -9,7 +9,7 @@ import { onUnexpectedExternalError } from 'vs/base/common/errors'; import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; import { IDisposable } from 'vs/base/common/lifecycle'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, IActionOptions, registerEditorAction, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; +import { EditorAction, EditorContributionInstantiation, IActionOptions, registerEditorAction, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; import { EditorOption } from 'vs/editor/common/config/editorOptions'; import { Position } from 'vs/editor/common/core/position'; import { Range } from 'vs/editor/common/core/range'; @@ -202,7 +202,7 @@ class ShrinkSelectionAction extends AbstractSmartSelect { } } -registerEditorContribution(SmartSelectController.ID, SmartSelectController); +registerEditorContribution(SmartSelectController.ID, SmartSelectController, EditorContributionInstantiation.Lazy); registerEditorAction(GrowSelectionAction); registerEditorAction(ShrinkSelectionAction); diff --git a/src/vs/editor/contrib/snippet/browser/snippetController2.ts b/src/vs/editor/contrib/snippet/browser/snippetController2.ts index 19187239da7..e44288ff401 100644 --- a/src/vs/editor/contrib/snippet/browser/snippetController2.ts +++ b/src/vs/editor/contrib/snippet/browser/snippetController2.ts @@ -7,7 +7,7 @@ import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; import { DisposableStore } from 'vs/base/common/lifecycle'; import { assertType } from 'vs/base/common/types'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorCommand, registerEditorCommand, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; +import { EditorCommand, EditorContributionInstantiation, registerEditorCommand, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; import { Position } from 'vs/editor/common/core/position'; import { Range } from 'vs/editor/common/core/range'; import { IEditorContribution } from 'vs/editor/common/editorCommon'; @@ -301,7 +301,7 @@ export class SnippetController2 implements IEditorContribution { } -registerEditorContribution(SnippetController2.ID, SnippetController2); +registerEditorContribution(SnippetController2.ID, SnippetController2, EditorContributionInstantiation.Lazy); const CommandCtor = EditorCommand.bindToContribution(SnippetController2.get); diff --git a/src/vs/editor/contrib/stickyScroll/browser/stickyScrollContribution.ts b/src/vs/editor/contrib/stickyScroll/browser/stickyScrollContribution.ts index 8f33016efb7..e45781b33f8 100644 --- a/src/vs/editor/contrib/stickyScroll/browser/stickyScrollContribution.ts +++ b/src/vs/editor/contrib/stickyScroll/browser/stickyScrollContribution.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { registerEditorContribution } from 'vs/editor/browser/editorExtensions'; +import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; import { ToggleStickyScroll } from 'vs/editor/contrib/stickyScroll/browser/stickyScrollActions'; import { StickyScrollController } from 'vs/editor/contrib/stickyScroll/browser/stickyScrollController'; import { registerAction2 } from 'vs/platform/actions/common/actions'; -registerEditorContribution(StickyScrollController.ID, StickyScrollController); +registerEditorContribution(StickyScrollController.ID, StickyScrollController, EditorContributionInstantiation.AfterFirstRender); registerAction2(ToggleStickyScroll); diff --git a/src/vs/editor/contrib/suggest/browser/suggestController.ts b/src/vs/editor/contrib/suggest/browser/suggestController.ts index 0d38e6b78f4..35e15d9a165 100644 --- a/src/vs/editor/contrib/suggest/browser/suggestController.ts +++ b/src/vs/editor/contrib/suggest/browser/suggestController.ts @@ -726,7 +726,7 @@ export class TriggerSuggestAction extends EditorAction { } } -registerEditorContribution(SuggestController.ID, SuggestController, EditorContributionInstantiation.Eager); // eager because it needs to listen to editor typing event +registerEditorContribution(SuggestController.ID, SuggestController, EditorContributionInstantiation.BeforeFirstInteraction); registerEditorAction(TriggerSuggestAction); const weight = KeybindingWeight.EditorContrib + 90; diff --git a/src/vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.ts b/src/vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.ts index bd6d9cd9b84..9cb1e2b67e0 100644 --- a/src/vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.ts +++ b/src/vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.ts @@ -12,7 +12,7 @@ import * as platform from 'vs/base/common/platform'; import { InvisibleCharacters } from 'vs/base/common/strings'; import 'vs/css!./unicodeHighlighter'; import { IActiveCodeEditor, ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, registerEditorAction, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; +import { EditorAction, EditorContributionInstantiation, registerEditorAction, registerEditorContribution, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; import { InUntrustedWorkspace, inUntrustedWorkspace, EditorOption, InternalUnicodeHighlightOptions, unicodeHighlightConfigKeys } from 'vs/editor/common/config/editorOptions'; import { Range } from 'vs/editor/common/core/range'; import { IEditorContribution } from 'vs/editor/common/editorCommon'; @@ -803,5 +803,5 @@ registerEditorAction(DisableHighlightingOfAmbiguousCharactersAction); registerEditorAction(DisableHighlightingOfInvisibleCharactersAction); registerEditorAction(DisableHighlightingOfNonBasicAsciiCharactersAction); registerEditorAction(ShowExcludeOptions); -registerEditorContribution(UnicodeHighlighter.ID, UnicodeHighlighter); +registerEditorContribution(UnicodeHighlighter.ID, UnicodeHighlighter, EditorContributionInstantiation.AfterFirstRender); HoverParticipantRegistry.register(UnicodeHighlighterHoverParticipant); diff --git a/src/vs/editor/contrib/unusualLineTerminators/browser/unusualLineTerminators.ts b/src/vs/editor/contrib/unusualLineTerminators/browser/unusualLineTerminators.ts index bfe0c3ef82f..2b2c9f47145 100644 --- a/src/vs/editor/contrib/unusualLineTerminators/browser/unusualLineTerminators.ts +++ b/src/vs/editor/contrib/unusualLineTerminators/browser/unusualLineTerminators.ts @@ -6,7 +6,7 @@ import { Disposable } from 'vs/base/common/lifecycle'; import { basename } from 'vs/base/common/resources'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { registerEditorContribution } from 'vs/editor/browser/editorExtensions'; +import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; import { EditorOption } from 'vs/editor/common/config/editorOptions'; import { IEditorContribution } from 'vs/editor/common/editorCommon'; @@ -57,6 +57,8 @@ export class UnusualLineTerminatorsDetector extends Disposable implements IEdito } this._checkForUnusualLineTerminators(); })); + + this._checkForUnusualLineTerminators(); } private async _checkForUnusualLineTerminators(): Promise { @@ -116,4 +118,4 @@ export class UnusualLineTerminatorsDetector extends Disposable implements IEdito } } -registerEditorContribution(UnusualLineTerminatorsDetector.ID, UnusualLineTerminatorsDetector); +registerEditorContribution(UnusualLineTerminatorsDetector.ID, UnusualLineTerminatorsDetector, EditorContributionInstantiation.AfterFirstRender); diff --git a/src/vs/editor/contrib/viewportSemanticTokens/browser/viewportSemanticTokens.ts b/src/vs/editor/contrib/viewportSemanticTokens/browser/viewportSemanticTokens.ts index b3bb9805623..98842559f70 100644 --- a/src/vs/editor/contrib/viewportSemanticTokens/browser/viewportSemanticTokens.ts +++ b/src/vs/editor/contrib/viewportSemanticTokens/browser/viewportSemanticTokens.ts @@ -6,7 +6,7 @@ import { CancelablePromise, createCancelablePromise, RunOnceScheduler } from 'vs/base/common/async'; import { Disposable } from 'vs/base/common/lifecycle'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { registerEditorContribution } from 'vs/editor/browser/editorExtensions'; +import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; import { Range } from 'vs/editor/common/core/range'; import { IEditorContribution } from 'vs/editor/common/editorCommon'; import { ITextModel } from 'vs/editor/common/model'; @@ -80,6 +80,7 @@ class ViewportSemanticTokensContribution extends Disposable implements IEditorCo this._cancelAll(); scheduleTokenizeViewport(); })); + scheduleTokenizeViewport(); } private _cancelAll(): void { @@ -140,4 +141,4 @@ class ViewportSemanticTokensContribution extends Disposable implements IEditorCo } } -registerEditorContribution(ViewportSemanticTokensContribution.ID, ViewportSemanticTokensContribution); +registerEditorContribution(ViewportSemanticTokensContribution.ID, ViewportSemanticTokensContribution, EditorContributionInstantiation.AfterFirstRender); diff --git a/src/vs/editor/contrib/wordHighlighter/browser/wordHighlighter.ts b/src/vs/editor/contrib/wordHighlighter/browser/wordHighlighter.ts index d29d0d84b21..94d572b366c 100644 --- a/src/vs/editor/contrib/wordHighlighter/browser/wordHighlighter.ts +++ b/src/vs/editor/contrib/wordHighlighter/browser/wordHighlighter.ts @@ -12,7 +12,7 @@ import { onUnexpectedError, onUnexpectedExternalError } from 'vs/base/common/err import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; import { IActiveCodeEditor, ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, IActionOptions, registerEditorAction, registerEditorContribution, registerModelAndPositionCommand } from 'vs/editor/browser/editorExtensions'; +import { EditorAction, EditorContributionInstantiation, IActionOptions, registerEditorAction, registerEditorContribution, registerModelAndPositionCommand } from 'vs/editor/browser/editorExtensions'; import { EditorOption } from 'vs/editor/common/config/editorOptions'; import { CursorChangeReason, ICursorPositionChangedEvent } from 'vs/editor/common/cursorEvents'; import { Position } from 'vs/editor/common/core/position'; @@ -654,7 +654,7 @@ class TriggerWordHighlightAction extends EditorAction { } } -registerEditorContribution(WordHighlighterContribution.ID, WordHighlighterContribution); +registerEditorContribution(WordHighlighterContribution.ID, WordHighlighterContribution, EditorContributionInstantiation.Eager); // eager because it uses `saveViewState`/`restoreViewState` registerEditorAction(NextWordHighlightAction); registerEditorAction(PrevWordHighlightAction); registerEditorAction(TriggerWordHighlightAction); diff --git a/src/vs/editor/standalone/browser/accessibilityHelp/accessibilityHelp.ts b/src/vs/editor/standalone/browser/accessibilityHelp/accessibilityHelp.ts index f0a3c0a2355..0a4f69a2f8e 100644 --- a/src/vs/editor/standalone/browser/accessibilityHelp/accessibilityHelp.ts +++ b/src/vs/editor/standalone/browser/accessibilityHelp/accessibilityHelp.ts @@ -15,7 +15,7 @@ import * as platform from 'vs/base/common/platform'; import * as strings from 'vs/base/common/strings'; import { URI } from 'vs/base/common/uri'; import { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, EditorCommand, registerEditorAction, registerEditorCommand, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; +import { EditorAction, EditorCommand, EditorContributionInstantiation, registerEditorAction, registerEditorCommand, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; import { Selection } from 'vs/editor/common/core/selection'; import { IEditorContribution } from 'vs/editor/common/editorCommon'; import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; @@ -342,7 +342,7 @@ class ShowAccessibilityHelpAction extends EditorAction { } } -registerEditorContribution(AccessibilityHelpController.ID, AccessibilityHelpController); +registerEditorContribution(AccessibilityHelpController.ID, AccessibilityHelpController, EditorContributionInstantiation.Lazy); registerEditorAction(ShowAccessibilityHelpAction); const AccessibilityHelpCommand = EditorCommand.bindToContribution(AccessibilityHelpController.get); diff --git a/src/vs/editor/standalone/browser/iPadShowKeyboard/iPadShowKeyboard.ts b/src/vs/editor/standalone/browser/iPadShowKeyboard/iPadShowKeyboard.ts index 88d026ac38e..9ac07b2b232 100644 --- a/src/vs/editor/standalone/browser/iPadShowKeyboard/iPadShowKeyboard.ts +++ b/src/vs/editor/standalone/browser/iPadShowKeyboard/iPadShowKeyboard.ts @@ -7,7 +7,7 @@ import 'vs/css!./iPadShowKeyboard'; import * as dom from 'vs/base/browser/dom'; import { Disposable } from 'vs/base/common/lifecycle'; import { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition, OverlayWidgetPositionPreference } from 'vs/editor/browser/editorBrowser'; -import { registerEditorContribution } from 'vs/editor/browser/editorExtensions'; +import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; import { IEditorContribution } from 'vs/editor/common/editorCommon'; import { EditorOption } from 'vs/editor/common/config/editorOptions'; import { isIOS } from 'vs/base/common/platform'; @@ -99,4 +99,4 @@ class ShowKeyboardWidget extends Disposable implements IOverlayWidget { } } -registerEditorContribution(IPadShowKeyboard.ID, IPadShowKeyboard); +registerEditorContribution(IPadShowKeyboard.ID, IPadShowKeyboard, EditorContributionInstantiation.Eventually); diff --git a/src/vs/editor/standalone/browser/inspectTokens/inspectTokens.ts b/src/vs/editor/standalone/browser/inspectTokens/inspectTokens.ts index 030c8f1da2a..65557a70065 100644 --- a/src/vs/editor/standalone/browser/inspectTokens/inspectTokens.ts +++ b/src/vs/editor/standalone/browser/inspectTokens/inspectTokens.ts @@ -10,7 +10,7 @@ import { Color } from 'vs/base/common/color'; import { KeyCode } from 'vs/base/common/keyCodes'; import { Disposable } from 'vs/base/common/lifecycle'; import { ContentWidgetPositionPreference, IActiveCodeEditor, ICodeEditor, IContentWidget, IContentWidgetPosition } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, ServicesAccessor, registerEditorAction, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; +import { EditorAction, ServicesAccessor, registerEditorAction, registerEditorContribution, EditorContributionInstantiation } from 'vs/editor/browser/editorExtensions'; import { Position } from 'vs/editor/common/core/position'; import { IEditorContribution } from 'vs/editor/common/editorCommon'; import { ITextModel } from 'vs/editor/common/model'; @@ -329,7 +329,7 @@ class InspectTokensWidget extends Disposable implements IContentWidget { } } -registerEditorContribution(InspectTokensController.ID, InspectTokensController); +registerEditorContribution(InspectTokensController.ID, InspectTokensController, EditorContributionInstantiation.Lazy); registerEditorAction(InspectTokens); registerThemingParticipant((theme, collector) => { diff --git a/src/vs/editor/standalone/browser/referenceSearch/standaloneReferenceSearch.ts b/src/vs/editor/standalone/browser/referenceSearch/standaloneReferenceSearch.ts index e726783017d..23f8f72cced 100644 --- a/src/vs/editor/standalone/browser/referenceSearch/standaloneReferenceSearch.ts +++ b/src/vs/editor/standalone/browser/referenceSearch/standaloneReferenceSearch.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { registerEditorContribution } from 'vs/editor/browser/editorExtensions'; +import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; import { ReferencesController } from 'vs/editor/contrib/gotoSymbol/browser/peek/referencesController'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; @@ -37,4 +37,4 @@ export class StandaloneReferencesController extends ReferencesController { } } -registerEditorContribution(ReferencesController.ID, StandaloneReferencesController); +registerEditorContribution(ReferencesController.ID, StandaloneReferencesController, EditorContributionInstantiation.Lazy); diff --git a/src/vs/editor/test/browser/testCodeEditor.ts b/src/vs/editor/test/browser/testCodeEditor.ts index b9f488595a2..7568be86d1d 100644 --- a/src/vs/editor/test/browser/testCodeEditor.ts +++ b/src/vs/editor/test/browser/testCodeEditor.ts @@ -87,7 +87,7 @@ export class TestCodeEditor extends CodeEditorWidget implements ICodeEditor { } public registerAndInstantiateContribution(id: string, ctor: new (editor: ICodeEditor, ...services: BrandedService[]) => T): T { const r: T = this._instantiationService.createInstance(ctor, this); - this._contributions.set(id, r); + this._contributions2.set(id, r); return r; } public registerDisposable(disposable: IDisposable): void { diff --git a/src/vs/workbench/browser/parts/editor/editor.contribution.ts b/src/vs/workbench/browser/parts/editor/editor.contribution.ts index d38d510d380..2f42bb51fca 100644 --- a/src/vs/workbench/browser/parts/editor/editor.contribution.ts +++ b/src/vs/workbench/browser/parts/editor/editor.contribution.ts @@ -54,7 +54,7 @@ import { inQuickPickContext, getQuickNavigateHandler } from 'vs/workbench/browse import { KeybindingsRegistry, KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; import { ContextKeyExpr, ContextKeyExpression } from 'vs/platform/contextkey/common/contextkey'; import { isMacintosh } from 'vs/base/common/platform'; -import { registerEditorContribution } from 'vs/editor/browser/editorExtensions'; +import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; import { FloatingClickMenu } from 'vs/workbench/browser/codeeditor'; import { Extensions as WorkbenchExtensions, IWorkbenchContributionsRegistry } from 'vs/workbench/common/contributions'; import { LifecyclePhase } from 'vs/workbench/services/lifecycle/common/lifecycle'; @@ -128,7 +128,7 @@ Registry.as(WorkbenchExtensions.Workbench).regi Registry.as(WorkbenchExtensions.Workbench).registerWorkbenchContribution(UntitledTextEditorWorkingCopyEditorHandler, LifecyclePhase.Ready); Registry.as(WorkbenchExtensions.Workbench).registerWorkbenchContribution(DynamicEditorConfigurations, LifecyclePhase.Ready); -registerEditorContribution(FloatingClickMenu.ID, FloatingClickMenu); +registerEditorContribution(FloatingClickMenu.ID, FloatingClickMenu, EditorContributionInstantiation.AfterFirstRender); //#endregion //#region Quick Access diff --git a/src/vs/workbench/contrib/codeEditor/browser/accessibility/accessibility.ts b/src/vs/workbench/contrib/codeEditor/browser/accessibility/accessibility.ts index e3ace7a45e9..29b21c4dee1 100644 --- a/src/vs/workbench/contrib/codeEditor/browser/accessibility/accessibility.ts +++ b/src/vs/workbench/contrib/codeEditor/browser/accessibility/accessibility.ts @@ -16,7 +16,7 @@ import * as platform from 'vs/base/common/platform'; import * as strings from 'vs/base/common/strings'; import { URI } from 'vs/base/common/uri'; import { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition } from 'vs/editor/browser/editorBrowser'; -import { EditorCommand, registerEditorContribution, registerEditorCommand } from 'vs/editor/browser/editorExtensions'; +import { EditorCommand, registerEditorContribution, registerEditorCommand, EditorContributionInstantiation } from 'vs/editor/browser/editorExtensions'; import { IEditorOptions, EditorOption } from 'vs/editor/common/config/editorOptions'; import { IEditorContribution } from 'vs/editor/common/editorCommon'; import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; @@ -312,7 +312,7 @@ class ShowAccessibilityHelpAction extends Action2 { } } -registerEditorContribution(AccessibilityHelpController.ID, AccessibilityHelpController); +registerEditorContribution(AccessibilityHelpController.ID, AccessibilityHelpController, EditorContributionInstantiation.Lazy); registerAction2(ShowAccessibilityHelpAction); const AccessibilityHelpCommand = EditorCommand.bindToContribution(AccessibilityHelpController.get); diff --git a/src/vs/workbench/contrib/codeEditor/browser/inspectEditorTokens/inspectEditorTokens.ts b/src/vs/workbench/contrib/codeEditor/browser/inspectEditorTokens/inspectEditorTokens.ts index fc66d5ddbaa..1857e893281 100644 --- a/src/vs/workbench/contrib/codeEditor/browser/inspectEditorTokens/inspectEditorTokens.ts +++ b/src/vs/workbench/contrib/codeEditor/browser/inspectEditorTokens/inspectEditorTokens.ts @@ -11,7 +11,7 @@ import { Color } from 'vs/base/common/color'; import { KeyCode } from 'vs/base/common/keyCodes'; import { Disposable } from 'vs/base/common/lifecycle'; import { ContentWidgetPositionPreference, IActiveCodeEditor, ICodeEditor, IContentWidget, IContentWidgetPosition } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, ServicesAccessor, registerEditorAction, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; +import { EditorAction, ServicesAccessor, registerEditorAction, registerEditorContribution, EditorContributionInstantiation } from 'vs/editor/browser/editorExtensions'; import { Position } from 'vs/editor/common/core/position'; import { Range } from 'vs/editor/common/core/range'; import { IEditorContribution } from 'vs/editor/common/editorCommon'; @@ -668,7 +668,7 @@ class InspectEditorTokensWidget extends Disposable implements IContentWidget { } } -registerEditorContribution(InspectEditorTokensController.ID, InspectEditorTokensController); +registerEditorContribution(InspectEditorTokensController.ID, InspectEditorTokensController, EditorContributionInstantiation.Lazy); registerEditorAction(InspectEditorTokens); registerThemingParticipant((theme, collector) => { diff --git a/src/vs/workbench/contrib/codeEditor/browser/largeFileOptimizations.ts b/src/vs/workbench/contrib/codeEditor/browser/largeFileOptimizations.ts index 0d817416672..80e766a2a4f 100644 --- a/src/vs/workbench/contrib/codeEditor/browser/largeFileOptimizations.ts +++ b/src/vs/workbench/contrib/codeEditor/browser/largeFileOptimizations.ts @@ -7,7 +7,7 @@ import * as nls from 'vs/nls'; import * as path from 'vs/base/common/path'; import { Disposable } from 'vs/base/common/lifecycle'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { registerEditorContribution } from 'vs/editor/browser/editorExtensions'; +import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; import { IEditorContribution } from 'vs/editor/common/editorCommon'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { INotificationService, Severity } from 'vs/platform/notification/common/notification'; @@ -26,39 +26,42 @@ export class LargeFileOptimizationsWarner extends Disposable implements IEditorC ) { super(); - this._register(this._editor.onDidChangeModel((e) => { - const model = this._editor.getModel(); - if (!model) { - return; - } + this._register(this._editor.onDidChangeModel((e) => this._update())); + this._update(); + } - if (model.isTooLargeForTokenization()) { - const message = nls.localize( - { - key: 'largeFile', - comment: [ - 'Variable 0 will be a file name.' - ] - }, - "{0}: tokenization, wrapping and folding have been turned off for this large file in order to reduce memory usage and avoid freezing or crashing.", - path.basename(model.uri.path) - ); + private _update(): void { + const model = this._editor.getModel(); + if (!model) { + return; + } - this._notificationService.prompt(Severity.Info, message, [ - { - label: nls.localize('removeOptimizations', "Forcefully Enable Features"), - run: () => { - this._configurationService.updateValue(`editor.largeFileOptimizations`, false).then(() => { - this._notificationService.info(nls.localize('reopenFilePrompt', "Please reopen file in order for this setting to take effect.")); - }, (err) => { - this._notificationService.error(err); - }); - } + if (model.isTooLargeForTokenization()) { + const message = nls.localize( + { + key: 'largeFile', + comment: [ + 'Variable 0 will be a file name.' + ] + }, + "{0}: tokenization, wrapping and folding have been turned off for this large file in order to reduce memory usage and avoid freezing or crashing.", + path.basename(model.uri.path) + ); + + this._notificationService.prompt(Severity.Info, message, [ + { + label: nls.localize('removeOptimizations', "Forcefully Enable Features"), + run: () => { + this._configurationService.updateValue(`editor.largeFileOptimizations`, false).then(() => { + this._notificationService.info(nls.localize('reopenFilePrompt', "Please reopen file in order for this setting to take effect.")); + }, (err) => { + this._notificationService.error(err); + }); } - ], { neverShowAgain: { id: 'editor.contrib.largeFileOptimizationsWarner' } }); - } - })); + } + ], { neverShowAgain: { id: 'editor.contrib.largeFileOptimizationsWarner' } }); + } } } -registerEditorContribution(LargeFileOptimizationsWarner.ID, LargeFileOptimizationsWarner); +registerEditorContribution(LargeFileOptimizationsWarner.ID, LargeFileOptimizationsWarner, EditorContributionInstantiation.AfterFirstRender); diff --git a/src/vs/workbench/contrib/codeEditor/browser/menuPreventer.ts b/src/vs/workbench/contrib/codeEditor/browser/menuPreventer.ts index 4e62cd2f4c0..93018cf4929 100644 --- a/src/vs/workbench/contrib/codeEditor/browser/menuPreventer.ts +++ b/src/vs/workbench/contrib/codeEditor/browser/menuPreventer.ts @@ -6,7 +6,7 @@ import { KeyMod } from 'vs/base/common/keyCodes'; import { Disposable } from 'vs/base/common/lifecycle'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { registerEditorContribution } from 'vs/editor/browser/editorExtensions'; +import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; import { IEditorContribution } from 'vs/editor/common/editorCommon'; /** @@ -57,4 +57,4 @@ export class MenuPreventer extends Disposable implements IEditorContribution { } } -registerEditorContribution(MenuPreventer.ID, MenuPreventer); +registerEditorContribution(MenuPreventer.ID, MenuPreventer, EditorContributionInstantiation.BeforeFirstInteraction); diff --git a/src/vs/workbench/contrib/codeEditor/browser/toggleWordWrap.ts b/src/vs/workbench/contrib/codeEditor/browser/toggleWordWrap.ts index dac8f6f94cf..85be3c855a2 100644 --- a/src/vs/workbench/contrib/codeEditor/browser/toggleWordWrap.ts +++ b/src/vs/workbench/contrib/codeEditor/browser/toggleWordWrap.ts @@ -7,7 +7,7 @@ import * as nls from 'vs/nls'; import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; import { IActiveCodeEditor, ICodeEditor, IDiffEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, ServicesAccessor, registerEditorAction, registerEditorContribution, registerDiffEditorContribution } from 'vs/editor/browser/editorExtensions'; +import { EditorAction, ServicesAccessor, registerEditorAction, registerEditorContribution, registerDiffEditorContribution, EditorContributionInstantiation } from 'vs/editor/browser/editorExtensions'; import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; import { EditorOption } from 'vs/editor/common/config/editorOptions'; import { IDiffEditorContribution, IEditorContribution } from 'vs/editor/common/editorCommon'; @@ -315,7 +315,7 @@ class EditorWordWrapContextKeyTracker implements IWorkbenchContribution { const workbenchRegistry = Registry.as(Extensions.Workbench); workbenchRegistry.registerWorkbenchContribution(EditorWordWrapContextKeyTracker, LifecyclePhase.Ready); -registerEditorContribution(ToggleWordWrapController.ID, ToggleWordWrapController); +registerEditorContribution(ToggleWordWrapController.ID, ToggleWordWrapController, EditorContributionInstantiation.Eager); // eager because it needs to change the editor word wrap configuration registerDiffEditorContribution(DiffToggleWordWrapController.ID, DiffToggleWordWrapController); registerEditorAction(ToggleWordWrapAction); diff --git a/src/vs/workbench/contrib/codeEditor/browser/untitledTextEditorHint/untitledTextEditorHint.ts b/src/vs/workbench/contrib/codeEditor/browser/untitledTextEditorHint/untitledTextEditorHint.ts index efea7eaffed..6539a6441ec 100644 --- a/src/vs/workbench/contrib/codeEditor/browser/untitledTextEditorHint/untitledTextEditorHint.ts +++ b/src/vs/workbench/contrib/codeEditor/browser/untitledTextEditorHint/untitledTextEditorHint.ts @@ -15,7 +15,7 @@ import { IEditorContribution } from 'vs/editor/common/editorCommon'; import { Schemas } from 'vs/base/common/network'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { ConfigurationChangedEvent, EditorOption } from 'vs/editor/common/config/editorOptions'; -import { registerEditorContribution } from 'vs/editor/browser/editorExtensions'; +import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService'; import { IContentActionHandler, renderFormattedText } from 'vs/base/browser/formattedTextRenderer'; @@ -192,4 +192,4 @@ class UntitledTextEditorHintContentWidget implements IContentWidget { } } -registerEditorContribution(UntitledTextEditorHintContribution.ID, UntitledTextEditorHintContribution); +registerEditorContribution(UntitledTextEditorHintContribution.ID, UntitledTextEditorHintContribution, EditorContributionInstantiation.Eager); // eager because it needs to render a help message diff --git a/src/vs/workbench/contrib/codeEditor/browser/workbenchReferenceSearch.ts b/src/vs/workbench/contrib/codeEditor/browser/workbenchReferenceSearch.ts index f338f336250..101e10012ea 100644 --- a/src/vs/workbench/contrib/codeEditor/browser/workbenchReferenceSearch.ts +++ b/src/vs/workbench/contrib/codeEditor/browser/workbenchReferenceSearch.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { registerEditorContribution } from 'vs/editor/browser/editorExtensions'; +import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; import { ReferencesController } from 'vs/editor/contrib/gotoSymbol/browser/peek/referencesController'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; @@ -37,4 +37,4 @@ export class WorkbenchReferencesController extends ReferencesController { } } -registerEditorContribution(ReferencesController.ID, WorkbenchReferencesController); +registerEditorContribution(ReferencesController.ID, WorkbenchReferencesController, EditorContributionInstantiation.Lazy); diff --git a/src/vs/workbench/contrib/codeEditor/electron-sandbox/selectionClipboard.ts b/src/vs/workbench/contrib/codeEditor/electron-sandbox/selectionClipboard.ts index b0c66b9acb9..eadd523ded5 100644 --- a/src/vs/workbench/contrib/codeEditor/electron-sandbox/selectionClipboard.ts +++ b/src/vs/workbench/contrib/codeEditor/electron-sandbox/selectionClipboard.ts @@ -8,7 +8,7 @@ import { RunOnceScheduler } from 'vs/base/common/async'; import { Disposable } from 'vs/base/common/lifecycle'; import * as platform from 'vs/base/common/platform'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { registerEditorContribution, EditorAction, ServicesAccessor, registerEditorAction } from 'vs/editor/browser/editorExtensions'; +import { registerEditorContribution, EditorAction, ServicesAccessor, registerEditorAction, EditorContributionInstantiation } from 'vs/editor/browser/editorExtensions'; import { ConfigurationChangedEvent, EditorOption } from 'vs/editor/common/config/editorOptions'; import { ICursorSelectionChangedEvent } from 'vs/editor/common/cursorEvents'; import { Range } from 'vs/editor/common/core/range'; @@ -134,7 +134,7 @@ class PasteSelectionClipboardAction extends EditorAction { } } -registerEditorContribution(SelectionClipboardContributionID, SelectionClipboard); +registerEditorContribution(SelectionClipboardContributionID, SelectionClipboard, EditorContributionInstantiation.Eager); // eager because it needs to listen to selection change events Registry.as(WorkbenchExtensions.Workbench).registerWorkbenchContribution(SelectionClipboardPastePreventer, LifecyclePhase.Ready); if (platform.isLinux) { registerEditorAction(PasteSelectionClipboardAction); diff --git a/src/vs/workbench/contrib/comments/browser/commentsEditorContribution.ts b/src/vs/workbench/contrib/comments/browser/commentsEditorContribution.ts index 7abc2a28242..75f63a51ed0 100644 --- a/src/vs/workbench/contrib/comments/browser/commentsEditorContribution.ts +++ b/src/vs/workbench/contrib/comments/browser/commentsEditorContribution.ts @@ -12,7 +12,7 @@ import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; import { DisposableStore, dispose, IDisposable } from 'vs/base/common/lifecycle'; import 'vs/css!./media/review'; import { IActiveCodeEditor, ICodeEditor, IEditorMouseEvent, isCodeEditor, isDiffEditor, IViewZone } from 'vs/editor/browser/editorBrowser'; -import { EditorAction, registerEditorAction, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; +import { EditorAction, EditorContributionInstantiation, registerEditorAction, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; import { IRange, Range } from 'vs/editor/common/core/range'; import { IEditorContribution, IModelChangedEvent } from 'vs/editor/common/editorCommon'; @@ -1084,7 +1084,7 @@ export class PreviousCommentThreadAction extends EditorAction { } -registerEditorContribution(ID, CommentController); +registerEditorContribution(ID, CommentController, EditorContributionInstantiation.AfterFirstRender); registerEditorAction(NextCommentThreadAction); registerEditorAction(PreviousCommentThreadAction); diff --git a/src/vs/workbench/contrib/comments/browser/simpleCommentEditor.ts b/src/vs/workbench/contrib/comments/browser/simpleCommentEditor.ts index 14fb4f0b6fa..b1baca4d50a 100644 --- a/src/vs/workbench/contrib/comments/browser/simpleCommentEditor.ts +++ b/src/vs/workbench/contrib/comments/browser/simpleCommentEditor.ts @@ -51,11 +51,11 @@ export class SimpleCommentEditor extends CodeEditorWidget { const codeEditorWidgetOptions: ICodeEditorWidgetOptions = { isSimpleWidget: true, contributions: [ - { id: MenuPreventer.ID, ctor: MenuPreventer, instantiation: EditorContributionInstantiation.Eager }, - { id: ContextMenuController.ID, ctor: ContextMenuController, instantiation: EditorContributionInstantiation.Eager }, + { id: MenuPreventer.ID, ctor: MenuPreventer, instantiation: EditorContributionInstantiation.BeforeFirstInteraction }, + { id: ContextMenuController.ID, ctor: ContextMenuController, instantiation: EditorContributionInstantiation.BeforeFirstInteraction }, { id: SuggestController.ID, ctor: SuggestController, instantiation: EditorContributionInstantiation.Eager }, - { id: SnippetController2.ID, ctor: SnippetController2, instantiation: EditorContributionInstantiation.Eager }, - { id: TabCompletionController.ID, ctor: TabCompletionController, instantiation: EditorContributionInstantiation.Eager }, + { id: SnippetController2.ID, ctor: SnippetController2, instantiation: EditorContributionInstantiation.Lazy }, + { id: TabCompletionController.ID, ctor: TabCompletionController, instantiation: EditorContributionInstantiation.Eager }, // eager because it needs to define a context key ] }; diff --git a/src/vs/workbench/contrib/inlayHints/browser/inlayHintsAccessibilty.ts b/src/vs/workbench/contrib/inlayHints/browser/inlayHintsAccessibilty.ts index 38ea286744c..7bd383b7932 100644 --- a/src/vs/workbench/contrib/inlayHints/browser/inlayHintsAccessibilty.ts +++ b/src/vs/workbench/contrib/inlayHints/browser/inlayHintsAccessibilty.ts @@ -8,7 +8,7 @@ import { CancellationTokenSource } from 'vs/base/common/cancellation'; import { KeyCode } from 'vs/base/common/keyCodes'; import { DisposableStore } from 'vs/base/common/lifecycle'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { EditorAction2, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; +import { EditorAction2, EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; import { IEditorContribution } from 'vs/editor/common/editorCommon'; import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; import { InlayHintItem, asCommandLink } from 'vs/editor/contrib/inlayHints/browser/inlayHints'; @@ -213,4 +213,4 @@ registerAction2(class StopReadHints extends EditorAction2 { } }); -registerEditorContribution(InlayHintsAccessibility.ID, InlayHintsAccessibility); +registerEditorContribution(InlayHintsAccessibility.ID, InlayHintsAccessibility, EditorContributionInstantiation.Lazy); diff --git a/src/vs/workbench/contrib/preferences/browser/keybindingsEditorContribution.ts b/src/vs/workbench/contrib/preferences/browser/keybindingsEditorContribution.ts index fd43f3b24f5..c3daa708ed2 100644 --- a/src/vs/workbench/contrib/preferences/browser/keybindingsEditorContribution.ts +++ b/src/vs/workbench/contrib/preferences/browser/keybindingsEditorContribution.ts @@ -14,7 +14,7 @@ import { IInstantiationService } from 'vs/platform/instantiation/common/instanti import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; import { Range } from 'vs/editor/common/core/range'; import { IEditorContribution } from 'vs/editor/common/editorCommon'; -import { registerEditorContribution, ServicesAccessor, registerEditorCommand, EditorCommand } from 'vs/editor/browser/editorExtensions'; +import { registerEditorContribution, ServicesAccessor, registerEditorCommand, EditorCommand, EditorContributionInstantiation } from 'vs/editor/browser/editorExtensions'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; import { SnippetController2 } from 'vs/editor/contrib/snippet/browser/snippetController2'; import { SmartSnippetInserter } from 'vs/workbench/contrib/preferences/common/smartSnippetInserter'; @@ -383,5 +383,5 @@ function isInterestingEditorModel(editor: ICodeEditor, userDataProfileService: I return isEqual(model.uri, userDataProfileService.currentProfile.keybindingsResource); } -registerEditorContribution(DefineKeybindingController.ID, DefineKeybindingController); +registerEditorContribution(DefineKeybindingController.ID, DefineKeybindingController, EditorContributionInstantiation.AfterFirstRender); registerEditorCommand(new DefineKeybindingCommand()); diff --git a/src/vs/workbench/contrib/preferences/browser/preferences.contribution.ts b/src/vs/workbench/contrib/preferences/browser/preferences.contribution.ts index 2e3ffc352c1..a845e611842 100644 --- a/src/vs/workbench/contrib/preferences/browser/preferences.contribution.ts +++ b/src/vs/workbench/contrib/preferences/browser/preferences.contribution.ts @@ -9,7 +9,7 @@ import { Schemas } from 'vs/base/common/network'; import { isObject } from 'vs/base/common/types'; import { URI } from 'vs/base/common/uri'; import 'vs/css!./media/preferences'; -import { registerEditorContribution } from 'vs/editor/browser/editorExtensions'; +import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; import { Context as SuggestContext } from 'vs/editor/contrib/suggest/browser/suggest'; import * as nls from 'vs/nls'; import { Action2, MenuId, MenuRegistry, registerAction2 } from 'vs/platform/actions/common/actions'; @@ -1263,7 +1263,7 @@ const workbenchContributionsRegistry = Registry.as(TabCompletionController.get); diff --git a/src/vs/workbench/contrib/testing/browser/testing.contribution.ts b/src/vs/workbench/contrib/testing/browser/testing.contribution.ts index 828affe2faf..2bccbdac914 100644 --- a/src/vs/workbench/contrib/testing/browser/testing.contribution.ts +++ b/src/vs/workbench/contrib/testing/browser/testing.contribution.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { registerEditorContribution } from 'vs/editor/browser/editorExtensions'; +import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; import { localize } from 'vs/nls'; import { registerAction2 } from 'vs/platform/actions/common/actions'; import { CommandsRegistry, ICommandService } from 'vs/platform/commands/common/commands'; @@ -106,8 +106,8 @@ Registry.as(WorkbenchExtensions.Workbench).regi Registry.as(WorkbenchExtensions.Workbench).registerWorkbenchContribution(TestingPeekOpener, LifecyclePhase.Eventually); Registry.as(WorkbenchExtensions.Workbench).registerWorkbenchContribution(TestingProgressTrigger, LifecyclePhase.Eventually); -registerEditorContribution(Testing.OutputPeekContributionId, TestingOutputPeekController); -registerEditorContribution(Testing.DecorationsContributionId, TestingDecorations); +registerEditorContribution(Testing.OutputPeekContributionId, TestingOutputPeekController, EditorContributionInstantiation.AfterFirstRender); +registerEditorContribution(Testing.DecorationsContributionId, TestingDecorations, EditorContributionInstantiation.AfterFirstRender); CommandsRegistry.registerCommand({ id: '_revealTestInExplorer', diff --git a/src/vs/workbench/contrib/userDataSync/browser/userDataSyncConflictsView.ts b/src/vs/workbench/contrib/userDataSync/browser/userDataSyncConflictsView.ts index ce438d3e689..c9389521982 100644 --- a/src/vs/workbench/contrib/userDataSync/browser/userDataSyncConflictsView.ts +++ b/src/vs/workbench/contrib/userDataSync/browser/userDataSyncConflictsView.ts @@ -31,7 +31,7 @@ import { Disposable, dispose } from 'vs/base/common/lifecycle'; import { IEditorContribution } from 'vs/editor/common/editorCommon'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; import { FloatingClickWidget } from 'vs/workbench/browser/codeeditor'; -import { registerEditorContribution } from 'vs/editor/browser/editorExtensions'; +import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; import { DEFAULT_EDITOR_ASSOCIATION } from 'vs/workbench/common/editor'; type UserDataSyncConflictResource = IUserDataSyncResource & IResourcePreview; @@ -324,4 +324,4 @@ class AcceptChangesContribution extends Disposable implements IEditorContributio } } -registerEditorContribution(AcceptChangesContribution.ID, AcceptChangesContribution); +registerEditorContribution(AcceptChangesContribution.ID, AcceptChangesContribution, EditorContributionInstantiation.AfterFirstRender);