mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-27 03:54:24 +01:00
Add Type Definition Provider API (#19699)
* Add Type Definition Provider API Adds a new API to support type definition providers and adds an initial type definition provider for TypeScript * Fix comment * Addressing comments * Fixer menu option ordering * Added simple test
This commit is contained in:
@@ -14,7 +14,12 @@ export default class TypeScriptDefinitionProviderBase {
|
||||
constructor(
|
||||
private client: ITypescriptServiceClient) { }
|
||||
|
||||
protected getSymbolLocations(definitionType: 'definition' | 'implementation', document: TextDocument, position: Position, token: CancellationToken | boolean): Promise<Location[] | null> {
|
||||
protected getSymbolLocations(
|
||||
definitionType: 'definition' | 'implementation' | 'typeDefinition',
|
||||
document: TextDocument,
|
||||
position: Position,
|
||||
token: CancellationToken | boolean
|
||||
): Promise<Location[] | null> {
|
||||
const filepath = this.client.normalizePath(document.uri);
|
||||
if (!filepath) {
|
||||
return Promise.resolve(null);
|
||||
|
||||
21
extensions/typescript/src/features/typeDefinitionProvider.ts
Normal file
21
extensions/typescript/src/features/typeDefinitionProvider.ts
Normal file
@@ -0,0 +1,21 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import { TypeDefinitionProvider, TextDocument, Position, CancellationToken, Definition } from 'vscode';
|
||||
|
||||
import { ITypescriptServiceClient } from '../typescriptService';
|
||||
import DefinitionProviderBase from './definitionProviderBase';
|
||||
|
||||
export default class TypeScriptTypeDefinitionProvider extends DefinitionProviderBase implements TypeDefinitionProvider {
|
||||
constructor(client: ITypescriptServiceClient) {
|
||||
super(client);
|
||||
}
|
||||
|
||||
public provideTypeDefinition(document: TextDocument, position: Position, token: CancellationToken | boolean): Promise<Definition | null> {
|
||||
return this.getSymbolLocations('typeDefinition', document, position, token);
|
||||
}
|
||||
}
|
||||
@@ -26,6 +26,7 @@ import { ITypescriptServiceClientHost } from './typescriptService';
|
||||
import HoverProvider from './features/hoverProvider';
|
||||
import DefinitionProvider from './features/definitionProvider';
|
||||
import ImplementationProvider from './features/ImplementationProvider';
|
||||
import TypeDefintionProvider from './features/typeDefinitionProvider';
|
||||
import DocumentHighlightProvider from './features/documentHighlightProvider';
|
||||
import ReferenceProvider from './features/referenceProvider';
|
||||
import DocumentSymbolProvider from './features/documentSymbolProvider';
|
||||
@@ -155,6 +156,7 @@ class LanguageProvider {
|
||||
let hoverProvider = new HoverProvider(client);
|
||||
let definitionProvider = new DefinitionProvider(client);
|
||||
let implementationProvider = new ImplementationProvider(client);
|
||||
const typeDefinitionProvider = new TypeDefintionProvider(client);
|
||||
let documentHighlightProvider = new DocumentHighlightProvider(client);
|
||||
let referenceProvider = new ReferenceProvider(client);
|
||||
let documentSymbolProvider = new DocumentSymbolProvider(client);
|
||||
@@ -181,6 +183,9 @@ class LanguageProvider {
|
||||
// TODO: TS 2.1.5 returns incorrect results for implementation locations.
|
||||
languages.registerImplementationProvider(selector, implementationProvider);
|
||||
}
|
||||
if (client.apiVersion.has213Features()) {
|
||||
languages.registerTypeDefinitionProvider(selector, typeDefinitionProvider);
|
||||
}
|
||||
languages.registerDocumentHighlightProvider(selector, documentHighlightProvider);
|
||||
languages.registerReferenceProvider(selector, referenceProvider);
|
||||
languages.registerDocumentSymbolProvider(selector, documentSymbolProvider);
|
||||
|
||||
@@ -88,6 +88,7 @@ export interface ITypescriptServiceClient {
|
||||
execute(commant: 'signatureHelp', args: Proto.SignatureHelpRequestArgs, token?: CancellationToken): Promise<Proto.SignatureHelpResponse>;
|
||||
execute(command: 'definition', args: Proto.FileLocationRequestArgs, token?: CancellationToken): Promise<Proto.DefinitionResponse>;
|
||||
execute(command: 'implementation', args: Proto.FileLocationRequestArgs, token?: CancellationToken): Promise<Proto.ImplementationResponse>;
|
||||
execute(command: 'typeDefinition', args: Proto.FileLocationRequestArgs, token?: CancellationToken): Promise<Proto.TypeDefinitionResponse>;
|
||||
execute(command: 'references', args: Proto.FileLocationRequestArgs, token?: CancellationToken): Promise<Proto.ReferencesResponse>;
|
||||
execute(command: 'navto', args: Proto.NavtoRequestArgs, token?: CancellationToken): Promise<Proto.NavtoResponse>;
|
||||
execute(command: 'navbar', args: Proto.FileRequestArgs, token?: CancellationToken): Promise<Proto.NavBarResponse>;
|
||||
|
||||
Reference in New Issue
Block a user