replace ImplementationProviderRegistry with service property

This commit is contained in:
Johannes Rieken
2022-01-31 11:57:22 +01:00
parent 60bf54dcd9
commit dfe1ebf8c9
9 changed files with 21 additions and 17 deletions
@@ -1950,7 +1950,7 @@ export class EditorModeContext extends Disposable {
this._register(_languageFeaturesService.codeLensProvider.onDidChange(update));
this._register(_languageFeaturesService.definitionProvider.onDidChange(update));
this._register(_languageFeaturesService.declarationProvider.onDidChange(update));
this._register(modes.ImplementationProviderRegistry.onDidChange(update));
this._register(_languageFeaturesService.implementationProvider.onDidChange(update));
this._register(_languageFeaturesService.typeDefinitionProvider.onDidChange(update));
this._register(modes.HoverProviderRegistry.onDidChange(update));
this._register(modes.DocumentHighlightProviderRegistry.onDidChange(update));
@@ -2004,7 +2004,7 @@ export class EditorModeContext extends Disposable {
this._hasCodeLensProvider.set(this._languageFeaturesService.codeLensProvider.has(model));
this._hasDefinitionProvider.set(this._languageFeaturesService.definitionProvider.has(model));
this._hasDeclarationProvider.set(this._languageFeaturesService.declarationProvider.has(model));
this._hasImplementationProvider.set(modes.ImplementationProviderRegistry.has(model));
this._hasImplementationProvider.set(this._languageFeaturesService.implementationProvider.has(model));
this._hasTypeDefinitionProvider.set(this._languageFeaturesService.typeDefinitionProvider.has(model));
this._hasHoverProvider.set(modes.HoverProviderRegistry.has(model));
this._hasDocumentHighlightProvider.set(modes.DocumentHighlightProviderRegistry.has(model));
-5
View File
@@ -1927,11 +1927,6 @@ export const DocumentHighlightProviderRegistry = new LanguageFeatureRegistry<Doc
*/
export const LinkedEditingRangeProviderRegistry = new LanguageFeatureRegistry<LinkedEditingRangeProvider>();
/**
* @internal
*/
export const ImplementationProviderRegistry = new LanguageFeatureRegistry<ImplementationProvider>();
/**
* @internal
*/
@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/
import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry';
import { CodeLensProvider, DeclarationProvider, DefinitionProvider, DocumentFormattingEditProvider, DocumentRangeFormattingEditProvider, DocumentSymbolProvider, InlayHintsProvider, OnTypeFormattingEditProvider, ReferenceProvider, RenameProvider, TypeDefinitionProvider } from 'vs/editor/common/languages';
import { CodeLensProvider, DeclarationProvider, DefinitionProvider, DocumentFormattingEditProvider, DocumentRangeFormattingEditProvider, DocumentSymbolProvider, ImplementationProvider, InlayHintsProvider, OnTypeFormattingEditProvider, ReferenceProvider, RenameProvider, TypeDefinitionProvider } from 'vs/editor/common/languages';
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
export const ILanguageFeaturesService = createDecorator<ILanguageFeaturesService>('ILanguageFeaturesService');
@@ -21,6 +21,8 @@ export interface ILanguageFeaturesService {
readonly declarationProvider: LanguageFeatureRegistry<DeclarationProvider>;
readonly implementationProvider: LanguageFeatureRegistry<ImplementationProvider>;
readonly renameProvider: LanguageFeatureRegistry<RenameProvider>;
readonly documentSymbolProvider: LanguageFeatureRegistry<DocumentSymbolProvider>;
@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/
import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry';
import { CodeLensProvider, DeclarationProvider, DefinitionProvider, DocumentFormattingEditProvider, DocumentRangeFormattingEditProvider, DocumentSymbolProvider, InlayHintsProvider, OnTypeFormattingEditProvider, ReferenceProvider, RenameProvider, TypeDefinitionProvider } from 'vs/editor/common/languages';
import { CodeLensProvider, DeclarationProvider, DefinitionProvider, DocumentFormattingEditProvider, DocumentRangeFormattingEditProvider, DocumentSymbolProvider, ImplementationProvider, InlayHintsProvider, OnTypeFormattingEditProvider, ReferenceProvider, RenameProvider, TypeDefinitionProvider } from 'vs/editor/common/languages';
import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures';
import { registerSingleton } from 'vs/platform/instantiation/common/extensions';
@@ -22,6 +22,8 @@ export class LanguageFeatureService implements ILanguageFeaturesService {
readonly declarationProvider = new LanguageFeatureRegistry<DeclarationProvider>();
readonly implementationProvider = new LanguageFeatureRegistry<ImplementationProvider>();
readonly documentSymbolProvider = new LanguageFeatureRegistry<DocumentSymbolProvider>();
readonly inlayHintsProvider = new LanguageFeatureRegistry<InlayHintsProvider>();
@@ -518,7 +518,7 @@ registerGoToAction(class PeekTypeDefinitionAction extends TypeDefinitionAction {
class ImplementationAction extends SymbolNavigationAction {
protected async _getLocationModel(languageFeaturesService: ILanguageFeaturesService, model: ITextModel, position: corePosition.Position, token: CancellationToken): Promise<ReferencesModel> {
return new ReferencesModel(await getImplementationsAtPosition(model, position, token), nls.localize('impl.title', 'Implementations'));
return new ReferencesModel(await getImplementationsAtPosition(languageFeaturesService.implementationProvider, model, position, token), nls.localize('impl.title', 'Implementations'));
}
protected _getNoResultFoundMessage(info: IWordAtPosition | null): string {
@@ -8,7 +8,7 @@ import { onUnexpectedExternalError } from 'vs/base/common/errors';
import { registerModelAndPositionCommand } from 'vs/editor/browser/editorExtensions';
import { Position } from 'vs/editor/common/core/position';
import { ITextModel } from 'vs/editor/common/model';
import { DeclarationProvider, DefinitionProvider, ImplementationProviderRegistry, LocationLink, ProviderResult, ReferenceProvider, TypeDefinitionProvider } from 'vs/editor/common/languages';
import { DeclarationProvider, DefinitionProvider, ImplementationProvider, LocationLink, ProviderResult, ReferenceProvider, TypeDefinitionProvider } from 'vs/editor/common/languages';
import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry';
import { ReferencesModel } from 'vs/editor/contrib/gotoSymbol/browser/referencesModel';
import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures';
@@ -54,8 +54,8 @@ export function getDeclarationsAtPosition(registry: LanguageFeatureRegistry<Decl
});
}
export function getImplementationsAtPosition(model: ITextModel, position: Position, token: CancellationToken): Promise<LocationLink[]> {
return getLocationLinks(model, position, ImplementationProviderRegistry, (provider, model, position) => {
export function getImplementationsAtPosition(registry: LanguageFeatureRegistry<ImplementationProvider>, model: ITextModel, position: Position, token: CancellationToken): Promise<LocationLink[]> {
return getLocationLinks(model, position, registry, (provider, model, position) => {
return provider.provideImplementation(model, position, token);
});
}
@@ -114,4 +114,8 @@ registerModelAndPositionCommand('_executeReferenceProvider', (accessor, model, p
return _sortedAndDeduped(() => promise);
});
registerModelAndPositionCommand('_executeImplementationProvider', (_accessor, model, position) => _sortedAndDeduped(() => getImplementationsAtPosition(model, position, CancellationToken.None)));
registerModelAndPositionCommand('_executeImplementationProvider', (accessor, model, position) => {
const languageFeaturesService = accessor.get(ILanguageFeaturesService);
const promise = getImplementationsAtPosition(languageFeaturesService.implementationProvider, model, position, CancellationToken.None);
_sortedAndDeduped(() => promise);
});
@@ -490,7 +490,8 @@ export function registerDefinitionProvider(languageId: string, provider: languag
* Register a implementation provider (used by e.g. go to implementation).
*/
export function registerImplementationProvider(languageId: string, provider: languages.ImplementationProvider): IDisposable {
return languages.ImplementationProviderRegistry.register(languageId, provider);
const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
return languageFeaturesService.implementationProvider.register(languageId, provider);
}
/**
@@ -229,7 +229,7 @@ export class MainThreadLanguageFeatures implements MainThreadLanguageFeaturesSha
}
$registerImplementationSupport(handle: number, selector: IDocumentFilterDto[]): void {
this._registrations.set(handle, modes.ImplementationProviderRegistry.register(selector, <modes.ImplementationProvider>{
this._registrations.set(handle, this._languageFeaturesService.implementationProvider.register(selector, <modes.ImplementationProvider>{
provideImplementation: (model, position, token): Promise<modes.LocationLink[]> => {
return this._proxy.$provideImplementation(handle, model.uri, position, token).then(MainThreadLanguageFeatures._reviveLocationLinkDto);
}
@@ -374,7 +374,7 @@ suite('ExtHostLanguageFeatures', function () {
}));
await rpcProtocol.sync();
let value = await getImplementationsAtPosition(model, new EditorPosition(1, 1), CancellationToken.None);
let value = await getImplementationsAtPosition(languageFeaturesService.implementationProvider, model, new EditorPosition(1, 1), CancellationToken.None);
assert.strictEqual(value.length, 1);
let [entry] = value;
assert.deepStrictEqual(entry.range, { startLineNumber: 2, startColumn: 3, endLineNumber: 4, endColumn: 5 });