mirror of
https://github.com/microsoft/vscode.git
synced 2025-12-24 12:19:20 +00:00
@@ -8,6 +8,7 @@ import * as Proto from '../protocol';
|
|||||||
import * as PConst from '../protocol.const';
|
import * as PConst from '../protocol.const';
|
||||||
import { ITypeScriptServiceClient } from '../typescriptService';
|
import { ITypeScriptServiceClient } from '../typescriptService';
|
||||||
import * as typeConverters from '../utils/typeConverters';
|
import * as typeConverters from '../utils/typeConverters';
|
||||||
|
import { CachedResponse } from './baseCodeLensProvider';
|
||||||
|
|
||||||
const getSymbolKind = (kind: string): vscode.SymbolKind => {
|
const getSymbolKind = (kind: string): vscode.SymbolKind => {
|
||||||
switch (kind) {
|
switch (kind) {
|
||||||
@@ -30,7 +31,8 @@ const getSymbolKind = (kind: string): vscode.SymbolKind => {
|
|||||||
|
|
||||||
class TypeScriptDocumentSymbolProvider implements vscode.DocumentSymbolProvider {
|
class TypeScriptDocumentSymbolProvider implements vscode.DocumentSymbolProvider {
|
||||||
public constructor(
|
public constructor(
|
||||||
private readonly client: ITypeScriptServiceClient
|
private readonly client: ITypeScriptServiceClient,
|
||||||
|
private cachedResponse: CachedResponse<Proto.NavTreeResponse>,
|
||||||
) { }
|
) { }
|
||||||
|
|
||||||
public async provideDocumentSymbols(resource: vscode.TextDocument, token: vscode.CancellationToken): Promise<vscode.DocumentSymbol[] | undefined> {
|
public async provideDocumentSymbols(resource: vscode.TextDocument, token: vscode.CancellationToken): Promise<vscode.DocumentSymbol[] | undefined> {
|
||||||
@@ -40,8 +42,8 @@ class TypeScriptDocumentSymbolProvider implements vscode.DocumentSymbolProvider
|
|||||||
}
|
}
|
||||||
|
|
||||||
const args: Proto.FileRequestArgs = { file };
|
const args: Proto.FileRequestArgs = { file };
|
||||||
const response = await this.client.execute('navtree', args, token);
|
const response = await this.cachedResponse.execute(resource, () => this.client.execute('navtree', args, token));
|
||||||
if (response.type !== 'response' || !response.body) {
|
if (!response || response.type !== 'response' || !response.body) {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -97,7 +99,8 @@ class TypeScriptDocumentSymbolProvider implements vscode.DocumentSymbolProvider
|
|||||||
export function register(
|
export function register(
|
||||||
selector: vscode.DocumentSelector,
|
selector: vscode.DocumentSelector,
|
||||||
client: ITypeScriptServiceClient,
|
client: ITypeScriptServiceClient,
|
||||||
|
cachedResponse: CachedResponse<Proto.NavTreeResponse>,
|
||||||
) {
|
) {
|
||||||
return vscode.languages.registerDocumentSymbolProvider(selector,
|
return vscode.languages.registerDocumentSymbolProvider(selector,
|
||||||
new TypeScriptDocumentSymbolProvider(client), { label: 'TypeScript' });
|
new TypeScriptDocumentSymbolProvider(client, cachedResponse), { label: 'TypeScript' });
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ export default class LanguageProvider extends Disposable {
|
|||||||
this._register((await import('./features/definitions')).register(selector, this.client));
|
this._register((await import('./features/definitions')).register(selector, this.client));
|
||||||
this._register((await import('./features/directiveCommentCompletions')).register(selector, this.client));
|
this._register((await import('./features/directiveCommentCompletions')).register(selector, this.client));
|
||||||
this._register((await import('./features/documentHighlight')).register(selector, this.client));
|
this._register((await import('./features/documentHighlight')).register(selector, this.client));
|
||||||
this._register((await import('./features/documentSymbol')).register(selector, this.client));
|
this._register((await import('./features/documentSymbol')).register(selector, this.client, cachedResponse));
|
||||||
this._register((await import('./features/folding')).register(selector, this.client));
|
this._register((await import('./features/folding')).register(selector, this.client));
|
||||||
this._register((await import('./features/formatting')).register(selector, this.description.id, this.client, this.fileConfigurationManager));
|
this._register((await import('./features/formatting')).register(selector, this.description.id, this.client, this.fileConfigurationManager));
|
||||||
this._register((await import('./features/hover')).register(selector, this.client));
|
this._register((await import('./features/hover')).register(selector, this.client));
|
||||||
|
|||||||
Reference in New Issue
Block a user