From 888170e18ef1e8fc64e1f61691eee7740eb7bd21 Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Mon, 31 Jan 2022 09:31:16 +0100 Subject: [PATCH] replace `InlayHintsProviderRegistry` with service property --- src/vs/editor/browser/widget/codeEditorWidget.ts | 4 ++-- src/vs/editor/common/languages.ts | 5 ----- src/vs/editor/common/services/languageFeatures.ts | 4 +++- .../common/services/languageFeaturesService.ts | 4 +++- .../editor/contrib/inlayHints/browser/inlayHints.ts | 7 ++++--- .../inlayHints/browser/inlayHintsController.ts | 13 ++++++++----- .../standalone/browser/standaloneLanguages.ts | 3 ++- .../api/browser/mainThreadLanguageFeatures.ts | 2 +- 8 files changed, 23 insertions(+), 19 deletions(-) diff --git a/src/vs/editor/browser/widget/codeEditorWidget.ts b/src/vs/editor/browser/widget/codeEditorWidget.ts index 785a0e6d5a4..6ccee7f5717 100644 --- a/src/vs/editor/browser/widget/codeEditorWidget.ts +++ b/src/vs/editor/browser/widget/codeEditorWidget.ts @@ -1960,7 +1960,7 @@ export class EditorModeContext extends Disposable { this._register(modes.DocumentFormattingEditProviderRegistry.onDidChange(update)); this._register(modes.DocumentRangeFormattingEditProviderRegistry.onDidChange(update)); this._register(modes.SignatureHelpProviderRegistry.onDidChange(update)); - this._register(modes.InlayHintsProviderRegistry.onDidChange(update)); + this._register(_languageFeaturesService.inlayHintsProvider.onDidChange(update)); update(); } @@ -2012,7 +2012,7 @@ export class EditorModeContext extends Disposable { this._hasReferenceProvider.set(this._languageFeaturesService.referenceProvider.has(model)); this._hasRenameProvider.set(this._languageFeaturesService.renameProvider.has(model)); this._hasSignatureHelpProvider.set(modes.SignatureHelpProviderRegistry.has(model)); - this._hasInlayHintsProvider.set(modes.InlayHintsProviderRegistry.has(model)); + this._hasInlayHintsProvider.set(this._languageFeaturesService.inlayHintsProvider.has(model)); this._hasDocumentFormattingProvider.set(modes.DocumentFormattingEditProviderRegistry.has(model) || modes.DocumentRangeFormattingEditProviderRegistry.has(model)); this._hasDocumentSelectionFormattingProvider.set(modes.DocumentRangeFormattingEditProviderRegistry.has(model)); this._hasMultipleDocumentFormattingProvider.set(modes.DocumentFormattingEditProviderRegistry.all(model).length + modes.DocumentRangeFormattingEditProviderRegistry.all(model).length > 1); diff --git a/src/vs/editor/common/languages.ts b/src/vs/editor/common/languages.ts index 9ffe77f0676..eed17ed3d34 100644 --- a/src/vs/editor/common/languages.ts +++ b/src/vs/editor/common/languages.ts @@ -1952,11 +1952,6 @@ export const TypeDefinitionProviderRegistry = new LanguageFeatureRegistry(); -/** - * @internal - */ -export const InlayHintsProviderRegistry = new LanguageFeatureRegistry(); - /** * @internal */ diff --git a/src/vs/editor/common/services/languageFeatures.ts b/src/vs/editor/common/services/languageFeatures.ts index 03f524c7fd5..61b382bddac 100644 --- a/src/vs/editor/common/services/languageFeatures.ts +++ b/src/vs/editor/common/services/languageFeatures.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry'; -import { DocumentSymbolProvider, ReferenceProvider, RenameProvider } from 'vs/editor/common/languages'; +import { DocumentSymbolProvider, InlayHintsProvider, ReferenceProvider, RenameProvider } from 'vs/editor/common/languages'; import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; export const ILanguageFeaturesService = createDecorator('ILanguageFeaturesService'); @@ -18,4 +18,6 @@ export interface ILanguageFeaturesService { readonly renameProvider: LanguageFeatureRegistry; readonly documentSymbolProvider: LanguageFeatureRegistry; + + readonly inlayHintsProvider: LanguageFeatureRegistry; } diff --git a/src/vs/editor/common/services/languageFeaturesService.ts b/src/vs/editor/common/services/languageFeaturesService.ts index 2ceb1e81ae6..b4fba8aa8c1 100644 --- a/src/vs/editor/common/services/languageFeaturesService.ts +++ b/src/vs/editor/common/services/languageFeaturesService.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry'; -import { DocumentSymbolProvider, ReferenceProvider, RenameProvider } from 'vs/editor/common/languages'; +import { DocumentSymbolProvider, InlayHintsProvider, ReferenceProvider, RenameProvider } from 'vs/editor/common/languages'; import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; import { registerSingleton } from 'vs/platform/instantiation/common/extensions'; @@ -17,6 +17,8 @@ export class LanguageFeatureService implements ILanguageFeaturesService { readonly renameProvider = new LanguageFeatureRegistry(); readonly documentSymbolProvider = new LanguageFeatureRegistry(); + + readonly inlayHintsProvider = new LanguageFeatureRegistry(); } registerSingleton(ILanguageFeaturesService, LanguageFeatureService, true); diff --git a/src/vs/editor/contrib/inlayHints/browser/inlayHints.ts b/src/vs/editor/contrib/inlayHints/browser/inlayHints.ts index 7aa98ff5cfe..5a9aef1eb78 100644 --- a/src/vs/editor/contrib/inlayHints/browser/inlayHints.ts +++ b/src/vs/editor/contrib/inlayHints/browser/inlayHints.ts @@ -8,7 +8,8 @@ import { CancellationError, onUnexpectedExternalError } from 'vs/base/common/err import { DisposableStore } from 'vs/base/common/lifecycle'; import { IPosition, Position } from 'vs/editor/common/core/position'; import { Range } from 'vs/editor/common/core/range'; -import { InlayHint, InlayHintList, InlayHintsProvider, InlayHintsProviderRegistry } from 'vs/editor/common/languages'; +import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry'; +import { InlayHint, InlayHintList, InlayHintsProvider } from 'vs/editor/common/languages'; import { ITextModel } from 'vs/editor/common/model'; export class InlayHintAnchor { @@ -64,11 +65,11 @@ export class InlayHintItem { export class InlayHintsFragments { - static async create(model: ITextModel, ranges: Range[], token: CancellationToken): Promise { + static async create(registry: LanguageFeatureRegistry, model: ITextModel, ranges: Range[], token: CancellationToken): Promise { const data: [InlayHintList, InlayHintsProvider][] = []; - const promises = InlayHintsProviderRegistry.ordered(model).reverse().map(provider => ranges.map(async range => { + const promises = registry.ordered(model).reverse().map(provider => ranges.map(async range => { try { const result = await provider.provideInlayHints(model, range, token); if (result?.hints.length) { diff --git a/src/vs/editor/contrib/inlayHints/browser/inlayHintsController.ts b/src/vs/editor/contrib/inlayHints/browser/inlayHintsController.ts index 2d880eb98b2..9c43cf1c280 100644 --- a/src/vs/editor/contrib/inlayHints/browser/inlayHintsController.ts +++ b/src/vs/editor/contrib/inlayHints/browser/inlayHintsController.ts @@ -21,6 +21,7 @@ import * as languages from 'vs/editor/common/languages'; import { IModelDeltaDecoration, InjectedTextCursorStops, ITextModel, TrackedRangeStickiness } from 'vs/editor/common/model'; import { ModelDecorationInjectedTextOptions } from 'vs/editor/common/model/textModel'; import { IFeatureDebounceInformation, ILanguageFeatureDebounceService } from 'vs/editor/common/services/languageFeatureDebounce'; +import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; import { ITextModelService } from 'vs/editor/common/services/resolverService'; import { ClickLinkGesture, ClickLinkMouseEvent } from 'vs/editor/contrib/gotoSymbol/browser/link/clickLinkGesture'; import { InlayHintAnchor, InlayHintItem, InlayHintsFragments } from 'vs/editor/contrib/inlayHints/browser/inlayHints'; @@ -96,14 +97,15 @@ export class InlayHintsController implements IEditorContribution { constructor( private readonly _editor: ICodeEditor, + @ILanguageFeaturesService private readonly _languageFeaturesService: ILanguageFeaturesService, @ILanguageFeatureDebounceService _featureDebounce: ILanguageFeatureDebounceService, @IInlayHintsCache private readonly _inlayHintsCache: IInlayHintsCache, @ICommandService private readonly _commandService: ICommandService, @INotificationService private readonly _notificationService: INotificationService, @IInstantiationService private readonly _instaService: IInstantiationService, ) { - this._debounceInfo = _featureDebounce.for(languages.InlayHintsProviderRegistry, 'InlayHint', { min: 25 }); - this._disposables.add(languages.InlayHintsProviderRegistry.onDidChange(() => this._update())); + this._debounceInfo = _featureDebounce.for(_languageFeaturesService.inlayHintsProvider, 'InlayHint', { min: 25 }); + this._disposables.add(_languageFeaturesService.inlayHintsProvider.onDidChange(() => this._update())); this._disposables.add(_editor.onDidChangeModel(() => this._update())); this._disposables.add(_editor.onDidChangeModelLanguage(() => this._update())); this._disposables.add(_editor.onDidChangeConfiguration(e => { @@ -129,7 +131,7 @@ export class InlayHintsController implements IEditorContribution { } const model = this._editor.getModel(); - if (!model || !languages.InlayHintsProviderRegistry.has(model)) { + if (!model || !this._languageFeaturesService.inlayHintsProvider.has(model)) { return; } @@ -157,7 +159,7 @@ export class InlayHintsController implements IEditorContribution { try { const myToken = cts.token; - const inlayHints = await InlayHintsFragments.create(model, this._getHintsRanges(), myToken); + const inlayHints = await InlayHintsFragments.create(this._languageFeaturesService.inlayHintsProvider, model, this._getHintsRanges(), myToken); scheduler.delay = this._debounceInfo.update(model, Date.now() - t1); if (myToken.isCancellationRequested) { inlayHints.dispose(); @@ -517,9 +519,10 @@ CommandsRegistry.registerCommand('_executeInlayHintProvider', async (accessor, . assertType(URI.isUri(uri)); assertType(Range.isIRange(range)); + const { inlayHintsProvider } = accessor.get(ILanguageFeaturesService); const ref = await accessor.get(ITextModelService).createModelReference(uri); try { - const model = await InlayHintsFragments.create(ref.object.textEditorModel, [Range.lift(range)], CancellationToken.None); + const model = await InlayHintsFragments.create(inlayHintsProvider, ref.object.textEditorModel, [Range.lift(range)], CancellationToken.None); const result = model.items.map(i => i.hint); setTimeout(() => model.dispose(), 0); // dispose after sending to ext host return result; diff --git a/src/vs/editor/standalone/browser/standaloneLanguages.ts b/src/vs/editor/standalone/browser/standaloneLanguages.ts index cb919270e2d..426e912e7ce 100644 --- a/src/vs/editor/standalone/browser/standaloneLanguages.ts +++ b/src/vs/editor/standalone/browser/standaloneLanguages.ts @@ -619,7 +619,8 @@ export function registerInlineCompletionsProvider(languageId: string, provider: * Register an inlay hints provider. */ export function registerInlayHintsProvider(languageId: string, provider: languages.InlayHintsProvider): IDisposable { - return languages.InlayHintsProviderRegistry.register(languageId, provider); + const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService); + return languageFeaturesService.inlayHintsProvider.register(languageId, provider); } /** diff --git a/src/vs/workbench/api/browser/mainThreadLanguageFeatures.ts b/src/vs/workbench/api/browser/mainThreadLanguageFeatures.ts index 8ff668fb6c1..f3934bf77c2 100644 --- a/src/vs/workbench/api/browser/mainThreadLanguageFeatures.ts +++ b/src/vs/workbench/api/browser/mainThreadLanguageFeatures.ts @@ -598,7 +598,7 @@ export class MainThreadLanguageFeatures implements MainThreadLanguageFeaturesSha provider.onDidChangeInlayHints = emitter.event; } - this._registrations.set(handle, modes.InlayHintsProviderRegistry.register(selector, provider)); + this._registrations.set(handle, this._languageFeaturesService.inlayHintsProvider.register(selector, provider)); } $emitInlayHintsEvent(eventHandle: number): void {