mirror of
https://github.com/microsoft/vscode.git
synced 2026-05-14 20:34:30 +01:00
replace ImplementationProviderRegistry with service property
This commit is contained in:
@@ -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));
|
||||
|
||||
@@ -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 });
|
||||
|
||||
Reference in New Issue
Block a user