From bbff19b5ba0a13524b89e3a285faf2cc46e1bb9b Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Mon, 4 Oct 2021 12:17:10 +0200 Subject: [PATCH] allow to send onDidChangeInlayHints-event for specific uris, https://github.com/microsoft/vscode/issues/130430 --- src/vs/editor/common/modes.ts | 2 +- src/vs/editor/contrib/inlayHints/inlayHintsController.ts | 6 +++++- src/vs/monaco.d.ts | 2 +- src/vs/vscode.proposed.d.ts | 2 +- .../workbench/api/browser/mainThreadLanguageFeatures.ts | 8 +++++--- src/vs/workbench/api/common/extHost.protocol.ts | 2 +- src/vs/workbench/api/common/extHostLanguageFeatures.ts | 2 +- 7 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/vs/editor/common/modes.ts b/src/vs/editor/common/modes.ts index 501ca10dee2..4326948b352 100644 --- a/src/vs/editor/common/modes.ts +++ b/src/vs/editor/common/modes.ts @@ -1755,7 +1755,7 @@ export interface InlayHint { } export interface InlayHintsProvider { - onDidChangeInlayHints?: Event | undefined; + onDidChangeInlayHints?: Event; provideInlayHints(model: model.ITextModel, range: Range, token: CancellationToken): ProviderResult; } diff --git a/src/vs/editor/contrib/inlayHints/inlayHintsController.ts b/src/vs/editor/contrib/inlayHints/inlayHintsController.ts index 56fda78cf7d..e95ebe3d478 100644 --- a/src/vs/editor/contrib/inlayHints/inlayHintsController.ts +++ b/src/vs/editor/contrib/inlayHints/inlayHintsController.ts @@ -151,7 +151,11 @@ export class InlayHintsController implements IEditorContribution { this._sessionDisposables.add(providerListener); for (const provider of InlayHintsProviderRegistry.all(model)) { if (typeof provider.onDidChangeInlayHints === 'function') { - providerListener.add(provider.onDidChangeInlayHints(() => scheduler.schedule())); + providerListener.add(provider.onDidChangeInlayHints(uri => { + if (!uri || uri.toString() === model.uri.toString()) { + scheduler.schedule(); + } + })); } } } diff --git a/src/vs/monaco.d.ts b/src/vs/monaco.d.ts index 12ca89966ec..5e0533dd41a 100644 --- a/src/vs/monaco.d.ts +++ b/src/vs/monaco.d.ts @@ -6685,7 +6685,7 @@ declare namespace monaco.languages { } export interface InlayHintsProvider { - onDidChangeInlayHints?: IEvent | undefined; + onDidChangeInlayHints?: IEvent; provideInlayHints(model: editor.ITextModel, range: Range, token: CancellationToken): ProviderResult; } diff --git a/src/vs/vscode.proposed.d.ts b/src/vs/vscode.proposed.d.ts index ace9b8a80b4..f5f576fe65c 100644 --- a/src/vs/vscode.proposed.d.ts +++ b/src/vs/vscode.proposed.d.ts @@ -1844,7 +1844,7 @@ declare module 'vscode' { * An optional event to signal that inlay hints have changed. * @see {@link EventEmitter} */ - onDidChangeInlayHints?: Event; + onDidChangeInlayHints?: Event; /** * diff --git a/src/vs/workbench/api/browser/mainThreadLanguageFeatures.ts b/src/vs/workbench/api/browser/mainThreadLanguageFeatures.ts index 45ee8e795fb..cf7262eb262 100644 --- a/src/vs/workbench/api/browser/mainThreadLanguageFeatures.ts +++ b/src/vs/workbench/api/browser/mainThreadLanguageFeatures.ts @@ -16,13 +16,14 @@ import { LanguageConfigurationRegistry } from 'vs/editor/common/modes/languageCo import { LanguageConfiguration, IndentationRule, OnEnterRule } from 'vs/editor/common/modes/languageConfiguration'; import { IModeService } from 'vs/editor/common/services/modeService'; import { extHostNamedCustomer } from 'vs/workbench/api/common/extHostCustomers'; -import { URI } from 'vs/base/common/uri'; +import { URI, UriComponents } from 'vs/base/common/uri'; import { Selection } from 'vs/editor/common/core/selection'; import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions'; import * as callh from 'vs/workbench/contrib/callHierarchy/common/callHierarchy'; import * as typeh from 'vs/workbench/contrib/typeHierarchy/common/typeHierarchy'; import { mixin } from 'vs/base/common/objects'; import { decodeSemanticTokensDto } from 'vs/editor/common/services/semanticTokensDto'; +import { IUriIdentityService } from 'vs/workbench/services/uriIdentity/common/uriIdentity'; @extHostNamedCustomer(MainContext.MainThreadLanguageFeatures) export class MainThreadLanguageFeatures implements MainThreadLanguageFeaturesShape { @@ -34,6 +35,7 @@ export class MainThreadLanguageFeatures implements MainThreadLanguageFeaturesSha constructor( extHostContext: IExtHostContext, @IModeService modeService: IModeService, + @IUriIdentityService private readonly _uriIdentService: IUriIdentityService, ) { this._proxy = extHostContext.getProxy(ExtHostContext.ExtHostLanguageFeatures); this._modeService = modeService; @@ -566,10 +568,10 @@ export class MainThreadLanguageFeatures implements MainThreadLanguageFeaturesSha this._registrations.set(handle, modes.InlayHintsProviderRegistry.register(selector, provider)); } - $emitInlayHintsEvent(eventHandle: number, event?: any): void { + $emitInlayHintsEvent(eventHandle: number, event?: UriComponents): void { const obj = this._registrations.get(eventHandle); if (obj instanceof Emitter) { - obj.fire(event); + obj.fire(event && this._uriIdentService.asCanonicalUri(URI.revive(event))); } } diff --git a/src/vs/workbench/api/common/extHost.protocol.ts b/src/vs/workbench/api/common/extHost.protocol.ts index 0670effe6c0..07fd7393a4e 100644 --- a/src/vs/workbench/api/common/extHost.protocol.ts +++ b/src/vs/workbench/api/common/extHost.protocol.ts @@ -412,7 +412,7 @@ export interface MainThreadLanguageFeaturesShape extends IDisposable { $registerInlineCompletionsSupport(handle: number, selector: IDocumentFilterDto[]): void; $registerSignatureHelpProvider(handle: number, selector: IDocumentFilterDto[], metadata: ISignatureHelpProviderMetadataDto): void; $registerInlayHintsProvider(handle: number, selector: IDocumentFilterDto[], eventHandle: number | undefined): void; - $emitInlayHintsEvent(eventHandle: number, event?: any): void; + $emitInlayHintsEvent(eventHandle: number, event?: UriComponents): void; $registerDocumentLinkProvider(handle: number, selector: IDocumentFilterDto[], supportsResolve: boolean): void; $registerDocumentColorProvider(handle: number, selector: IDocumentFilterDto[]): void; $registerFoldingRangeProvider(handle: number, selector: IDocumentFilterDto[], eventHandle: number | undefined): void; diff --git a/src/vs/workbench/api/common/extHostLanguageFeatures.ts b/src/vs/workbench/api/common/extHostLanguageFeatures.ts index 65e4a91d454..b0c78753fda 100644 --- a/src/vs/workbench/api/common/extHostLanguageFeatures.ts +++ b/src/vs/workbench/api/common/extHostLanguageFeatures.ts @@ -1988,7 +1988,7 @@ export class ExtHostLanguageFeatures implements extHostProtocol.ExtHostLanguageF let result = this._createDisposable(handle); if (eventHandle !== undefined) { - const subscription = provider.onDidChangeInlayHints!(_ => this._proxy.$emitInlayHintsEvent(eventHandle)); + const subscription = provider.onDidChangeInlayHints!(uri => this._proxy.$emitInlayHintsEvent(eventHandle, uri)); result = Disposable.from(result, subscription); } return result;