mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-23 10:08:49 +01:00
Moving features to use registration method
This commit is contained in:
@@ -3,12 +3,20 @@
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { DefinitionProvider, TextDocument, Position, CancellationToken, Definition } from 'vscode';
|
||||
|
||||
import * as vscode from 'vscode';
|
||||
import { ITypeScriptServiceClient } from '../typescriptService';
|
||||
import DefinitionProviderBase from './definitionProviderBase';
|
||||
|
||||
export default class TypeScriptDefinitionProvider extends DefinitionProviderBase implements DefinitionProvider {
|
||||
public provideDefinition(document: TextDocument, position: Position, token: CancellationToken | boolean): Promise<Definition | undefined> {
|
||||
class TypeScriptDefinitionProvider extends DefinitionProviderBase implements vscode.DefinitionProvider {
|
||||
public provideDefinition(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken | boolean): Promise<vscode.Definition | undefined> {
|
||||
return this.getSymbolLocations('definition', document, position, token);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export function register(
|
||||
selector: vscode.DocumentSelector,
|
||||
client: ITypeScriptServiceClient,
|
||||
) {
|
||||
return vscode.languages.registerDefinitionProvider(selector,
|
||||
new TypeScriptDefinitionProvider(client));
|
||||
}
|
||||
|
||||
@@ -3,23 +3,23 @@
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { DocumentHighlightProvider, DocumentHighlight, DocumentHighlightKind, TextDocument, Position, CancellationToken } from 'vscode';
|
||||
import * as vscode from 'vscode';
|
||||
|
||||
import * as Proto from '../protocol';
|
||||
|
||||
import { ITypeScriptServiceClient } from '../typescriptService';
|
||||
import * as typeConverters from '../utils/typeConverters';
|
||||
|
||||
export default class TypeScriptDocumentHighlightProvider implements DocumentHighlightProvider {
|
||||
class TypeScriptDocumentHighlightProvider implements vscode.DocumentHighlightProvider {
|
||||
public constructor(
|
||||
private readonly client: ITypeScriptServiceClient
|
||||
) { }
|
||||
|
||||
public async provideDocumentHighlights(
|
||||
resource: TextDocument,
|
||||
position: Position,
|
||||
token: CancellationToken
|
||||
): Promise<DocumentHighlight[]> {
|
||||
resource: vscode.TextDocument,
|
||||
position: vscode.Position,
|
||||
token: vscode.CancellationToken
|
||||
): Promise<vscode.DocumentHighlight[]> {
|
||||
const file = this.client.normalizePath(resource.uri);
|
||||
if (!file) {
|
||||
return [];
|
||||
@@ -41,8 +41,16 @@ export default class TypeScriptDocumentHighlightProvider implements DocumentHigh
|
||||
}
|
||||
}
|
||||
|
||||
function documentHighlightFromOccurance(occurrence: Proto.OccurrencesResponseItem): DocumentHighlight {
|
||||
return new DocumentHighlight(
|
||||
function documentHighlightFromOccurance(occurrence: Proto.OccurrencesResponseItem): vscode.DocumentHighlight {
|
||||
return new vscode.DocumentHighlight(
|
||||
typeConverters.Range.fromTextSpan(occurrence),
|
||||
occurrence.isWriteAccess ? DocumentHighlightKind.Write : DocumentHighlightKind.Read);
|
||||
occurrence.isWriteAccess ? vscode.DocumentHighlightKind.Write : vscode.DocumentHighlightKind.Read);
|
||||
}
|
||||
|
||||
export function register(
|
||||
selector: vscode.DocumentSelector,
|
||||
client: ITypeScriptServiceClient,
|
||||
) {
|
||||
return vscode.languages.registerDocumentHighlightProvider(selector,
|
||||
new TypeScriptDocumentHighlightProvider(client));
|
||||
}
|
||||
@@ -3,38 +3,38 @@
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { DocumentSymbolProvider, SymbolInformation, SymbolKind, TextDocument, CancellationToken, Uri, Hierarchy, SymbolInformation2 } from 'vscode';
|
||||
import * as vscode from 'vscode';
|
||||
|
||||
import * as Proto from '../protocol';
|
||||
import * as PConst from '../protocol.const';
|
||||
import { ITypeScriptServiceClient } from '../typescriptService';
|
||||
import * as typeConverters from '../utils/typeConverters';
|
||||
|
||||
const getSymbolKind = (kind: string): SymbolKind => {
|
||||
const getSymbolKind = (kind: string): vscode.SymbolKind => {
|
||||
switch (kind) {
|
||||
case PConst.Kind.module: return SymbolKind.Module;
|
||||
case PConst.Kind.class: return SymbolKind.Class;
|
||||
case PConst.Kind.enum: return SymbolKind.Enum;
|
||||
case PConst.Kind.interface: return SymbolKind.Interface;
|
||||
case PConst.Kind.memberFunction: return SymbolKind.Method;
|
||||
case PConst.Kind.memberVariable: return SymbolKind.Property;
|
||||
case PConst.Kind.memberGetAccessor: return SymbolKind.Property;
|
||||
case PConst.Kind.memberSetAccessor: return SymbolKind.Property;
|
||||
case PConst.Kind.variable: return SymbolKind.Variable;
|
||||
case PConst.Kind.const: return SymbolKind.Variable;
|
||||
case PConst.Kind.localVariable: return SymbolKind.Variable;
|
||||
case PConst.Kind.variable: return SymbolKind.Variable;
|
||||
case PConst.Kind.function: return SymbolKind.Function;
|
||||
case PConst.Kind.localFunction: return SymbolKind.Function;
|
||||
case PConst.Kind.module: return vscode.SymbolKind.Module;
|
||||
case PConst.Kind.class: return vscode.SymbolKind.Class;
|
||||
case PConst.Kind.enum: return vscode.SymbolKind.Enum;
|
||||
case PConst.Kind.interface: return vscode.SymbolKind.Interface;
|
||||
case PConst.Kind.memberFunction: return vscode.SymbolKind.Method;
|
||||
case PConst.Kind.memberVariable: return vscode.SymbolKind.Property;
|
||||
case PConst.Kind.memberGetAccessor: return vscode.SymbolKind.Property;
|
||||
case PConst.Kind.memberSetAccessor: return vscode.SymbolKind.Property;
|
||||
case PConst.Kind.variable: return vscode.SymbolKind.Variable;
|
||||
case PConst.Kind.const: return vscode.SymbolKind.Variable;
|
||||
case PConst.Kind.localVariable: return vscode.SymbolKind.Variable;
|
||||
case PConst.Kind.variable: return vscode.SymbolKind.Variable;
|
||||
case PConst.Kind.function: return vscode.SymbolKind.Function;
|
||||
case PConst.Kind.localFunction: return vscode.SymbolKind.Function;
|
||||
}
|
||||
return SymbolKind.Variable;
|
||||
return vscode.SymbolKind.Variable;
|
||||
};
|
||||
|
||||
export default class TypeScriptDocumentSymbolProvider implements DocumentSymbolProvider {
|
||||
class TypeScriptDocumentSymbolProvider implements vscode.DocumentSymbolProvider {
|
||||
public constructor(
|
||||
private readonly client: ITypeScriptServiceClient) { }
|
||||
|
||||
public async provideDocumentSymbols(resource: TextDocument, token: CancellationToken): Promise<any> { // todo@joh `any[]` temporary hack to make typescript happy...
|
||||
public async provideDocumentSymbols(resource: vscode.TextDocument, token: vscode.CancellationToken): Promise<any> { // todo@joh `any[]` temporary hack to make typescript happy...
|
||||
const filepath = this.client.normalizePath(resource.uri);
|
||||
if (!filepath) {
|
||||
return [];
|
||||
@@ -50,7 +50,7 @@ export default class TypeScriptDocumentSymbolProvider implements DocumentSymbolP
|
||||
// The root represents the file. Ignore this when showing in the UI
|
||||
const tree = response.body;
|
||||
if (tree.childItems) {
|
||||
const result = new Array<Hierarchy<SymbolInformation2>>();
|
||||
const result = new Array<vscode.Hierarchy<vscode.SymbolInformation2>>();
|
||||
tree.childItems.forEach(item => TypeScriptDocumentSymbolProvider.convertNavTree(resource.uri, result, item));
|
||||
return result;
|
||||
}
|
||||
@@ -58,9 +58,9 @@ export default class TypeScriptDocumentSymbolProvider implements DocumentSymbolP
|
||||
} else {
|
||||
const response = await this.client.execute('navbar', args, token);
|
||||
if (response.body) {
|
||||
const result = new Array<SymbolInformation>();
|
||||
const foldingMap: ObjectMap<SymbolInformation> = Object.create(null);
|
||||
response.body.forEach(item => TypeScriptDocumentSymbolProvider.convertNavBar(resource.uri, 0, foldingMap, result as SymbolInformation[], item));
|
||||
const result = new Array<vscode.SymbolInformation>();
|
||||
const foldingMap: ObjectMap<vscode.SymbolInformation> = Object.create(null);
|
||||
response.body.forEach(item => TypeScriptDocumentSymbolProvider.convertNavBar(resource.uri, 0, foldingMap, result as vscode.SymbolInformation[], item));
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -70,11 +70,11 @@ export default class TypeScriptDocumentSymbolProvider implements DocumentSymbolP
|
||||
}
|
||||
}
|
||||
|
||||
private static convertNavBar(resource: Uri, indent: number, foldingMap: ObjectMap<SymbolInformation>, bucket: SymbolInformation[], item: Proto.NavigationBarItem, containerLabel?: string): void {
|
||||
private static convertNavBar(resource: vscode.Uri, indent: number, foldingMap: ObjectMap<vscode.SymbolInformation>, bucket: vscode.SymbolInformation[], item: Proto.NavigationBarItem, containerLabel?: string): void {
|
||||
const realIndent = indent + item.indent;
|
||||
const key = `${realIndent}|${item.text}`;
|
||||
if (realIndent !== 0 && !foldingMap[key] && TypeScriptDocumentSymbolProvider.shouldInclueEntry(item)) {
|
||||
const result = new SymbolInformation(item.text,
|
||||
const result = new vscode.SymbolInformation(item.text,
|
||||
getSymbolKind(item.kind),
|
||||
containerLabel ? containerLabel : '',
|
||||
typeConverters.Location.fromTextSpan(resource, item.spans[0]));
|
||||
@@ -88,8 +88,8 @@ export default class TypeScriptDocumentSymbolProvider implements DocumentSymbolP
|
||||
}
|
||||
}
|
||||
|
||||
private static convertNavTree(resource: Uri, bucket: Hierarchy<SymbolInformation>[], item: Proto.NavigationTree): boolean {
|
||||
const symbolInfo = new SymbolInformation2(
|
||||
private static convertNavTree(resource: vscode.Uri, bucket: vscode.Hierarchy<vscode.SymbolInformation>[], item: Proto.NavigationTree): boolean {
|
||||
const symbolInfo = new vscode.SymbolInformation2(
|
||||
item.text,
|
||||
'', // todo@joh detail
|
||||
getSymbolKind(item.kind),
|
||||
@@ -97,7 +97,7 @@ export default class TypeScriptDocumentSymbolProvider implements DocumentSymbolP
|
||||
typeConverters.Location.fromTextSpan(resource, item.spans[0]),
|
||||
);
|
||||
|
||||
const hierarchy = new Hierarchy(symbolInfo);
|
||||
const hierarchy = new vscode.Hierarchy(symbolInfo);
|
||||
let shouldInclude = TypeScriptDocumentSymbolProvider.shouldInclueEntry(item);
|
||||
|
||||
if (item.childItems) {
|
||||
@@ -120,3 +120,12 @@ export default class TypeScriptDocumentSymbolProvider implements DocumentSymbolP
|
||||
return !!(item.text && item.text !== '<function>' && item.text !== '<class>');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
export function register(
|
||||
selector: vscode.DocumentSelector,
|
||||
client: ITypeScriptServiceClient,
|
||||
) {
|
||||
return vscode.languages.registerDocumentSymbolProvider(selector,
|
||||
new TypeScriptDocumentSymbolProvider(client));
|
||||
}
|
||||
|
||||
@@ -3,24 +3,24 @@
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { HoverProvider, Hover, TextDocument, Position, CancellationToken } from 'vscode';
|
||||
import * as vscode from 'vscode';
|
||||
|
||||
import * as Proto from '../protocol';
|
||||
import { ITypeScriptServiceClient } from '../typescriptService';
|
||||
import { tagsMarkdownPreview } from '../utils/previewer';
|
||||
import * as typeConverters from '../utils/typeConverters';
|
||||
|
||||
export default class TypeScriptHoverProvider implements HoverProvider {
|
||||
class TypeScriptHoverProvider implements vscode.HoverProvider {
|
||||
|
||||
public constructor(
|
||||
private readonly client: ITypeScriptServiceClient
|
||||
) { }
|
||||
|
||||
public async provideHover(
|
||||
document: TextDocument,
|
||||
position: Position,
|
||||
token: CancellationToken
|
||||
): Promise<Hover | undefined> {
|
||||
document: vscode.TextDocument,
|
||||
position: vscode.Position,
|
||||
token: vscode.CancellationToken
|
||||
): Promise<vscode.Hover | undefined> {
|
||||
const filepath = this.client.normalizePath(document.uri);
|
||||
if (!filepath) {
|
||||
return undefined;
|
||||
@@ -30,7 +30,7 @@ export default class TypeScriptHoverProvider implements HoverProvider {
|
||||
const response = await this.client.execute('quickinfo', args, token);
|
||||
if (response && response.body) {
|
||||
const data = response.body;
|
||||
return new Hover(
|
||||
return new vscode.Hover(
|
||||
TypeScriptHoverProvider.getContents(data),
|
||||
typeConverters.Range.fromTextSpan(data));
|
||||
}
|
||||
@@ -53,4 +53,12 @@ export default class TypeScriptHoverProvider implements HoverProvider {
|
||||
parts.push(data.documentation + (tags ? '\n\n' + tags : ''));
|
||||
return parts;
|
||||
}
|
||||
}
|
||||
|
||||
export function register(
|
||||
selector: vscode.DocumentSelector,
|
||||
client: ITypeScriptServiceClient
|
||||
): vscode.Disposable {
|
||||
return vscode.languages.registerHoverProvider(selector,
|
||||
new TypeScriptHoverProvider(client));
|
||||
}
|
||||
@@ -3,7 +3,7 @@
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { Position, Range, CompletionItemProvider, CompletionItemKind, TextDocument, CancellationToken, CompletionItem, window, Uri, TextEditor, SnippetString, workspace } from 'vscode';
|
||||
import { Position, Range, CompletionItemProvider, CompletionItemKind, TextDocument, CancellationToken, CompletionItem, window, Uri, TextEditor, SnippetString, workspace, DocumentSelector, languages, Disposable } from 'vscode';
|
||||
|
||||
import { ITypeScriptServiceClient } from '../typescriptService';
|
||||
import * as Proto from '../protocol';
|
||||
@@ -46,7 +46,7 @@ class JsDocCompletionItem extends CompletionItem {
|
||||
}
|
||||
}
|
||||
|
||||
export default class JsDocCompletionProvider implements CompletionItemProvider {
|
||||
class JsDocCompletionProvider implements CompletionItemProvider {
|
||||
|
||||
constructor(
|
||||
private readonly client: ITypeScriptServiceClient,
|
||||
@@ -220,4 +220,14 @@ export function templateToSnippet(template: string): SnippetString {
|
||||
return out;
|
||||
});
|
||||
return new SnippetString(template);
|
||||
}
|
||||
}
|
||||
|
||||
export function register(
|
||||
selector: DocumentSelector,
|
||||
client: ITypeScriptServiceClient,
|
||||
commandManager: CommandManager
|
||||
): Disposable {
|
||||
return languages.registerCompletionItemProvider(selector,
|
||||
new JsDocCompletionProvider(client, commandManager),
|
||||
'*');
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ import * as vscode from 'vscode';
|
||||
import { ITypeScriptServiceClient } from '../typescriptService';
|
||||
import * as typeConverters from '../utils/typeConverters';
|
||||
|
||||
export default class TypeScriptReferenceSupport implements vscode.ReferenceProvider {
|
||||
class TypeScriptReferenceSupport implements vscode.ReferenceProvider {
|
||||
public constructor(
|
||||
private readonly client: ITypeScriptServiceClient) { }
|
||||
|
||||
@@ -44,4 +44,12 @@ export default class TypeScriptReferenceSupport implements vscode.ReferenceProvi
|
||||
return [];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export function register(
|
||||
selector: vscode.DocumentSelector,
|
||||
client: ITypeScriptServiceClient
|
||||
) {
|
||||
return vscode.languages.registerReferenceProvider(selector,
|
||||
new TypeScriptReferenceSupport(client));
|
||||
}
|
||||
@@ -123,13 +123,12 @@ export default class LanguageProvider {
|
||||
|
||||
const cachedResponse = new CachedNavTreeResponse();
|
||||
|
||||
this.disposables.push(vscode.languages.registerCompletionItemProvider(selector, new (await import('./features/jsDocCompletionProvider')).default(client, commandManager), '*'));
|
||||
this.disposables.push(vscode.languages.registerHoverProvider(selector, new (await import('./features/hoverProvider')).default(client)));
|
||||
this.disposables.push(vscode.languages.registerDefinitionProvider(selector, new (await import('./features/definitionProvider')).default(client)));
|
||||
this.disposables.push(vscode.languages.registerDocumentHighlightProvider(selector, new (await import('./features/documentHighlightProvider')).default(client)));
|
||||
this.disposables.push(vscode.languages.registerReferenceProvider(selector, new (await import('./features/referenceProvider')).default(client)));
|
||||
this.disposables.push(vscode.languages.registerDocumentSymbolProvider(selector, new (await import('./features/documentSymbolProvider')).default(client)));
|
||||
|
||||
this.disposables.push((await import('./features/jsDocCompletionProvider')).register(selector, client, commandManager));
|
||||
this.disposables.push((await import('./features/hoverProvider')).register(selector, client));
|
||||
this.disposables.push((await import('./features/definitionProvider')).register(selector, client));
|
||||
this.disposables.push((await import('./features/documentHighlightProvider')).register(selector, client));
|
||||
this.disposables.push((await import('./features/referenceProvider')).register(selector, client));
|
||||
this.disposables.push((await import('./features/documentSymbolProvider')).register(selector, client));
|
||||
|
||||
this.disposables.push(vscode.languages.registerRenameProvider(selector, new (await import('./features/renameProvider')).default(client)));
|
||||
this.disposables.push(vscode.languages.registerCodeActionsProvider(selector, new (await import('./features/quickFixProvider')).default(client, this.fileConfigurationManager, commandManager, this.diagnosticsManager, this.bufferSyncSupport, this.telemetryReporter)));
|
||||
|
||||
Reference in New Issue
Block a user