Cache document symbol navtree requests

Fixes #64570
This commit is contained in:
Matt Bierner
2018-12-06 16:26:39 -08:00
parent 99929b581d
commit 07f6967a68
2 changed files with 8 additions and 5 deletions

View File

@@ -8,6 +8,7 @@ import * as Proto from '../protocol';
import * as PConst from '../protocol.const';
import { ITypeScriptServiceClient } from '../typescriptService';
import * as typeConverters from '../utils/typeConverters';
import { CachedResponse } from './baseCodeLensProvider';
const getSymbolKind = (kind: string): vscode.SymbolKind => {
switch (kind) {
@@ -30,7 +31,8 @@ const getSymbolKind = (kind: string): vscode.SymbolKind => {
class TypeScriptDocumentSymbolProvider implements vscode.DocumentSymbolProvider {
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> {
@@ -40,8 +42,8 @@ class TypeScriptDocumentSymbolProvider implements vscode.DocumentSymbolProvider
}
const args: Proto.FileRequestArgs = { file };
const response = await this.client.execute('navtree', args, token);
if (response.type !== 'response' || !response.body) {
const response = await this.cachedResponse.execute(resource, () => this.client.execute('navtree', args, token));
if (!response || response.type !== 'response' || !response.body) {
return undefined;
}
@@ -97,7 +99,8 @@ class TypeScriptDocumentSymbolProvider implements vscode.DocumentSymbolProvider
export function register(
selector: vscode.DocumentSelector,
client: ITypeScriptServiceClient,
cachedResponse: CachedResponse<Proto.NavTreeResponse>,
) {
return vscode.languages.registerDocumentSymbolProvider(selector,
new TypeScriptDocumentSymbolProvider(client), { label: 'TypeScript' });
new TypeScriptDocumentSymbolProvider(client, cachedResponse), { label: 'TypeScript' });
}

View File

@@ -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/directiveCommentCompletions')).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/formatting')).register(selector, this.description.id, this.client, this.fileConfigurationManager));
this._register((await import('./features/hover')).register(selector, this.client));