replace DeclarationProviderRegistry with service property

This commit is contained in:
Johannes Rieken
2022-01-31 10:43:54 +01:00
parent 98ed6e1eb4
commit 60bf54dcd9
9 changed files with 23 additions and 19 deletions
@@ -1949,7 +1949,7 @@ export class EditorModeContext extends Disposable {
this._register(modes.CodeActionProviderRegistry.onDidChange(update));
this._register(_languageFeaturesService.codeLensProvider.onDidChange(update));
this._register(_languageFeaturesService.definitionProvider.onDidChange(update));
this._register(modes.DeclarationProviderRegistry.onDidChange(update));
this._register(_languageFeaturesService.declarationProvider.onDidChange(update));
this._register(modes.ImplementationProviderRegistry.onDidChange(update));
this._register(_languageFeaturesService.typeDefinitionProvider.onDidChange(update));
this._register(modes.HoverProviderRegistry.onDidChange(update));
@@ -2003,7 +2003,7 @@ export class EditorModeContext extends Disposable {
this._hasCodeActionsProvider.set(modes.CodeActionProviderRegistry.has(model));
this._hasCodeLensProvider.set(this._languageFeaturesService.codeLensProvider.has(model));
this._hasDefinitionProvider.set(this._languageFeaturesService.definitionProvider.has(model));
this._hasDeclarationProvider.set(modes.DeclarationProviderRegistry.has(model));
this._hasDeclarationProvider.set(this._languageFeaturesService.declarationProvider.has(model));
this._hasImplementationProvider.set(modes.ImplementationProviderRegistry.has(model));
this._hasTypeDefinitionProvider.set(this._languageFeaturesService.typeDefinitionProvider.has(model));
this._hasHoverProvider.set(modes.HoverProviderRegistry.has(model));
-5
View File
@@ -1927,11 +1927,6 @@ export const DocumentHighlightProviderRegistry = new LanguageFeatureRegistry<Doc
*/
export const LinkedEditingRangeProviderRegistry = new LanguageFeatureRegistry<LinkedEditingRangeProvider>();
/**
* @internal
*/
export const DeclarationProviderRegistry = new LanguageFeatureRegistry<DeclarationProvider>();
/**
* @internal
*/
@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/
import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry';
import { CodeLensProvider, DefinitionProvider, DocumentFormattingEditProvider, DocumentRangeFormattingEditProvider, DocumentSymbolProvider, InlayHintsProvider, OnTypeFormattingEditProvider, ReferenceProvider, RenameProvider, TypeDefinitionProvider } from 'vs/editor/common/languages';
import { CodeLensProvider, DeclarationProvider, DefinitionProvider, DocumentFormattingEditProvider, DocumentRangeFormattingEditProvider, DocumentSymbolProvider, InlayHintsProvider, OnTypeFormattingEditProvider, ReferenceProvider, RenameProvider, TypeDefinitionProvider } from 'vs/editor/common/languages';
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
export const ILanguageFeaturesService = createDecorator<ILanguageFeaturesService>('ILanguageFeaturesService');
@@ -19,6 +19,8 @@ export interface ILanguageFeaturesService {
readonly typeDefinitionProvider: LanguageFeatureRegistry<TypeDefinitionProvider>;
readonly declarationProvider: LanguageFeatureRegistry<DeclarationProvider>;
readonly renameProvider: LanguageFeatureRegistry<RenameProvider>;
readonly documentSymbolProvider: LanguageFeatureRegistry<DocumentSymbolProvider>;
@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/
import { LanguageFeatureRegistry } from 'vs/editor/common/languageFeatureRegistry';
import { CodeLensProvider, DefinitionProvider, DocumentFormattingEditProvider, DocumentRangeFormattingEditProvider, DocumentSymbolProvider, InlayHintsProvider, OnTypeFormattingEditProvider, ReferenceProvider, RenameProvider, TypeDefinitionProvider } from 'vs/editor/common/languages';
import { CodeLensProvider, DeclarationProvider, DefinitionProvider, DocumentFormattingEditProvider, DocumentRangeFormattingEditProvider, DocumentSymbolProvider, 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';
@@ -20,6 +20,8 @@ export class LanguageFeatureService implements ILanguageFeaturesService {
readonly typeDefinitionProvider = new LanguageFeatureRegistry<TypeDefinitionProvider>();
readonly declarationProvider = new LanguageFeatureRegistry<DeclarationProvider>();
readonly documentSymbolProvider = new LanguageFeatureRegistry<DocumentSymbolProvider>();
readonly inlayHintsProvider = new LanguageFeatureRegistry<InlayHintsProvider>();
@@ -357,7 +357,7 @@ registerGoToAction(class PeekDefinitionAction extends DefinitionAction {
class DeclarationAction extends SymbolNavigationAction {
protected async _getLocationModel(languageFeaturesService: ILanguageFeaturesService, model: ITextModel, position: corePosition.Position, token: CancellationToken): Promise<ReferencesModel> {
return new ReferencesModel(await getDeclarationsAtPosition(model, position, token), nls.localize('decl.title', 'Declarations'));
return new ReferencesModel(await getDeclarationsAtPosition(languageFeaturesService.declarationProvider, model, position, token), nls.localize('decl.title', 'Declarations'));
}
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 { DeclarationProviderRegistry, DefinitionProvider, ImplementationProviderRegistry, LocationLink, ProviderResult, ReferenceProvider, TypeDefinitionProvider } from 'vs/editor/common/languages';
import { DeclarationProvider, DefinitionProvider, ImplementationProviderRegistry, 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';
@@ -48,8 +48,8 @@ export function getDefinitionsAtPosition(registry: LanguageFeatureRegistry<Defin
});
}
export function getDeclarationsAtPosition(model: ITextModel, position: Position, token: CancellationToken): Promise<LocationLink[]> {
return getLocationLinks(model, position, DeclarationProviderRegistry, (provider, model, position) => {
export function getDeclarationsAtPosition(registry: LanguageFeatureRegistry<DeclarationProvider>, model: ITextModel, position: Position, token: CancellationToken): Promise<LocationLink[]> {
return getLocationLinks(model, position, registry, (provider, model, position) => {
return provider.provideDeclaration(model, position, token);
});
}
@@ -93,16 +93,20 @@ async function _sortedAndDeduped(callback: () => Promise<LocationLink[]>): Promi
registerModelAndPositionCommand('_executeDefinitionProvider', (accessor, model, position) => {
const languageFeaturesService = accessor.get(ILanguageFeaturesService);
const promise = getDefinitionsAtPosition(languageFeaturesService.definitionProvider, model, position, CancellationToken.None);
_sortedAndDeduped(() => promise);
return _sortedAndDeduped(() => promise);
});
registerModelAndPositionCommand('_executeTypeDefinitionProvider', (accessor, model, position) => {
const languageFeaturesService = accessor.get(ILanguageFeaturesService);
const promise = getTypeDefinitionsAtPosition(languageFeaturesService.typeDefinitionProvider, model, position, CancellationToken.None);
_sortedAndDeduped(() => promise);
return _sortedAndDeduped(() => promise);
});
registerModelAndPositionCommand('_executeDeclarationProvider', (_accessor, model, position) => _sortedAndDeduped(() => getDeclarationsAtPosition(model, position, CancellationToken.None)));
registerModelAndPositionCommand('_executeDeclarationProvider', (accessor, model, position) => {
const languageFeaturesService = accessor.get(ILanguageFeaturesService);
const promise = getDeclarationsAtPosition(languageFeaturesService.declarationProvider, model, position, CancellationToken.None);
return _sortedAndDeduped(() => promise);
});
registerModelAndPositionCommand('_executeReferenceProvider', (accessor, model, position) => {
const languageFeaturesService = accessor.get(ILanguageFeaturesService);
@@ -582,7 +582,8 @@ export function registerFoldingRangeProvider(languageId: string, provider: langu
* Register a declaration provider
*/
export function registerDeclarationProvider(languageId: string, provider: languages.DeclarationProvider): IDisposable {
return languages.DeclarationProviderRegistry.register(languageId, provider);
const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
return languageFeaturesService.declarationProvider.register(languageId, provider);
}
/**
@@ -221,7 +221,7 @@ export class MainThreadLanguageFeatures implements MainThreadLanguageFeaturesSha
}
$registerDeclarationSupport(handle: number, selector: IDocumentFilterDto[]): void {
this._registrations.set(handle, modes.DeclarationProviderRegistry.register(selector, <modes.DeclarationProvider>{
this._registrations.set(handle, this._languageFeaturesService.declarationProvider.register(selector, <modes.DeclarationProvider>{
provideDeclaration: (model, position, token) => {
return this._proxy.$provideDeclaration(handle, model.uri, position, token).then(MainThreadLanguageFeatures._reviveLocationLinkDto);
}
@@ -356,7 +356,7 @@ suite('ExtHostLanguageFeatures', function () {
}));
await rpcProtocol.sync();
let value = await getDeclarationsAtPosition(model, new EditorPosition(1, 1), CancellationToken.None);
let value = await getDeclarationsAtPosition(languageFeaturesService.declarationProvider, 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 });