mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-21 17:19:01 +01:00
Move all version dep providers to use generic helper class
This commit is contained in:
@@ -3,12 +3,29 @@
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { ImplementationProvider, TextDocument, Position, CancellationToken, Definition } from 'vscode';
|
||||
|
||||
import * as vscode from 'vscode';
|
||||
import { ITypeScriptServiceClient } from '../typescriptService';
|
||||
import API from '../utils/api';
|
||||
import { VersionDependentRegistration } from '../utils/versionDependentRegistration';
|
||||
import DefinitionProviderBase from './definitionProviderBase';
|
||||
|
||||
export default class TypeScriptImplementationProvider extends DefinitionProviderBase implements ImplementationProvider {
|
||||
public provideImplementation(document: TextDocument, position: Position, token: CancellationToken | boolean): Promise<Definition | undefined> {
|
||||
class TypeScriptImplementationProvider extends DefinitionProviderBase implements vscode.ImplementationProvider {
|
||||
public provideImplementation(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken | boolean): Promise<vscode.Definition | undefined> {
|
||||
return this.getSymbolLocations('implementation', document, position, token);
|
||||
}
|
||||
}
|
||||
|
||||
export function register(
|
||||
selector: vscode.DocumentSelector,
|
||||
client: ITypeScriptServiceClient,
|
||||
) {
|
||||
return new VersionDependentRegistration(client, {
|
||||
isSupportedVersion(api: API) {
|
||||
return api.has220Features();
|
||||
},
|
||||
register() {
|
||||
return vscode.languages.registerImplementationProvider(selector,
|
||||
new TypeScriptImplementationProvider(client));
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -10,6 +10,7 @@ import { ITypeScriptServiceClient } from '../typescriptService';
|
||||
import { Command, CommandManager } from '../utils/commandManager';
|
||||
import * as typeconverts from '../utils/typeConverters';
|
||||
import FileConfigurationManager from './fileConfigurationManager';
|
||||
import { VersionDependentRegistration } from '../utils/versionDependentRegistration';
|
||||
|
||||
const localize = nls.loadMessageBundle();
|
||||
|
||||
@@ -82,4 +83,23 @@ export class OrganizeImportsCodeActionProvider implements vscode.CodeActionProvi
|
||||
action.command = { title: '', command: OrganizeImportsCommand.Id, arguments: [file] };
|
||||
return [action];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export function register(
|
||||
selector: vscode.DocumentSelector,
|
||||
client: ITypeScriptServiceClient,
|
||||
commandManager: CommandManager,
|
||||
fileConfigurationManager: FileConfigurationManager
|
||||
) {
|
||||
return new VersionDependentRegistration(client, {
|
||||
isSupportedVersion(api) {
|
||||
return api.has280Features();
|
||||
},
|
||||
register() {
|
||||
const organizeImportsProvider = new OrganizeImportsCodeActionProvider(client, commandManager, fileConfigurationManager);
|
||||
return vscode.languages.registerCodeActionsProvider(selector,
|
||||
organizeImportsProvider,
|
||||
organizeImportsProvider.metadata);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -3,12 +3,29 @@
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { TypeDefinitionProvider, TextDocument, Position, CancellationToken, Definition } from 'vscode';
|
||||
|
||||
import * as vscode from 'vscode';
|
||||
import { ITypeScriptServiceClient } from '../typescriptService';
|
||||
import { VersionDependentRegistration } from '../utils/versionDependentRegistration';
|
||||
import DefinitionProviderBase from './definitionProviderBase';
|
||||
import API from '../utils/api';
|
||||
|
||||
export default class TypeScriptTypeDefinitionProvider extends DefinitionProviderBase implements TypeDefinitionProvider {
|
||||
public provideTypeDefinition(document: TextDocument, position: Position, token: CancellationToken | boolean): Promise<Definition | undefined> {
|
||||
export default class TypeScriptTypeDefinitionProvider extends DefinitionProviderBase implements vscode.TypeDefinitionProvider {
|
||||
public provideTypeDefinition(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken | boolean): Promise<vscode.Definition | undefined> {
|
||||
return this.getSymbolLocations('typeDefinition', document, position, token);
|
||||
}
|
||||
}
|
||||
|
||||
export function register(
|
||||
selector: vscode.DocumentSelector,
|
||||
client: ITypeScriptServiceClient,
|
||||
) {
|
||||
return new VersionDependentRegistration(client, {
|
||||
isSupportedVersion(api: API) {
|
||||
return api.has213Features();
|
||||
},
|
||||
register() {
|
||||
return vscode.languages.registerTypeDefinitionProvider(selector,
|
||||
new TypeScriptTypeDefinitionProvider(client));
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -36,7 +36,6 @@ export default class LanguageProvider {
|
||||
private _enableSuggestionDiagnostics: boolean = true;
|
||||
|
||||
private readonly disposables: vscode.Disposable[] = [];
|
||||
private readonly versionDependentDisposables: vscode.Disposable[] = [];
|
||||
|
||||
private readonly renameHandler: UpdateImportsOnFileRenameHandler;
|
||||
|
||||
@@ -75,7 +74,6 @@ export default class LanguageProvider {
|
||||
|
||||
public dispose(): void {
|
||||
disposeAll(this.disposables);
|
||||
disposeAll(this.versionDependentDisposables);
|
||||
|
||||
this.diagnosticsManager.dispose();
|
||||
this.bufferSyncSupport.dispose();
|
||||
@@ -109,17 +107,18 @@ export default class LanguageProvider {
|
||||
this.disposables.push((await import('./features/directiveCommentCompletionProvider')).register(selector, client));
|
||||
this.disposables.push((await import('./features/documentHighlightProvider')).register(selector, client));
|
||||
this.disposables.push((await import('./features/documentSymbolProvider')).register(selector, client));
|
||||
this.disposables.push((await import('./features/foldingProvider')).register(selector, client));
|
||||
this.disposables.push((await import('./features/formattingProvider')).register(selector, this.description.id, config, client, this.fileConfigurationManager));
|
||||
this.disposables.push((await import('./features/hoverProvider')).register(selector, client));
|
||||
this.disposables.push((await import('./features/implementationProvider')).register(selector, this.client));
|
||||
this.disposables.push((await import('./features/jsDocCompletionProvider')).register(selector, client, commandManager));
|
||||
this.disposables.push((await import('./features/organizeImports')).register(selector, this.client, this.commandManager, this.fileConfigurationManager));
|
||||
this.disposables.push((await import('./features/quickFixProvider')).register(selector, client, this.fileConfigurationManager, commandManager, this.diagnosticsManager, this.bufferSyncSupport, this.telemetryReporter));
|
||||
this.disposables.push((await import('./features/refactorProvider')).register(selector, client, this.fileConfigurationManager, commandManager));
|
||||
this.disposables.push((await import('./features/referenceProvider')).register(selector, client));
|
||||
this.disposables.push((await import('./features/renameProvider')).register(selector, client));
|
||||
this.disposables.push((await import('./features/signatureHelpProvider')).register(selector, client));
|
||||
this.disposables.push((await import('./features/foldingProvider')).register(selector, client));
|
||||
|
||||
this.registerVersionDependentProviders();
|
||||
this.disposables.push((await import('./features/typeDefinitionProvider')).register(selector, this.client));
|
||||
|
||||
const referenceCodeLensProvider = new (await import('./features/referencesCodeLensProvider')).default(client, this.description.id, cachedResponse);
|
||||
referenceCodeLensProvider.updateConfiguration();
|
||||
@@ -194,35 +193,12 @@ export default class LanguageProvider {
|
||||
this.bufferSyncSupport.reOpenDocuments();
|
||||
this.bufferSyncSupport.requestAllDiagnostics();
|
||||
this.fileConfigurationManager.reset();
|
||||
this.registerVersionDependentProviders();
|
||||
}
|
||||
|
||||
public getErr(resources: vscode.Uri[]) {
|
||||
this.bufferSyncSupport.getErr(resources);
|
||||
}
|
||||
|
||||
private async registerVersionDependentProviders(): Promise<void> {
|
||||
disposeAll(this.versionDependentDisposables);
|
||||
|
||||
if (!this.client) {
|
||||
return;
|
||||
}
|
||||
|
||||
const selector = this.documentSelector;
|
||||
if (this.client.apiVersion.has220Features()) {
|
||||
this.versionDependentDisposables.push(vscode.languages.registerImplementationProvider(selector, new (await import('./features/implementationProvider')).default(this.client)));
|
||||
}
|
||||
|
||||
if (this.client.apiVersion.has213Features()) {
|
||||
this.versionDependentDisposables.push(vscode.languages.registerTypeDefinitionProvider(selector, new (await import('./features/typeDefinitionProvider')).default(this.client)));
|
||||
}
|
||||
|
||||
if (this.client.apiVersion.has280Features()) {
|
||||
const organizeImportsProvider = new (await import('./features/organizeImports')).OrganizeImportsCodeActionProvider(this.client, this.commandManager, this.fileConfigurationManager);
|
||||
this.versionDependentDisposables.push(vscode.languages.registerCodeActionsProvider(selector, organizeImportsProvider, organizeImportsProvider.metadata));
|
||||
}
|
||||
}
|
||||
|
||||
public triggerAllDiagnostics(): void {
|
||||
this.bufferSyncSupport.requestAllDiagnostics();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user