mirror of
https://github.com/microsoft/vscode.git
synced 2025-12-24 04:09:28 +00:00
💄
This commit is contained in:
@@ -32,6 +32,7 @@ const getSymbolKind = (kind: string): vscode.SymbolKind => {
|
||||
};
|
||||
|
||||
class TypeScriptDocumentSymbolProvider implements vscode.DocumentSymbolProvider {
|
||||
|
||||
public constructor(
|
||||
private readonly client: ITypeScriptServiceClient,
|
||||
private cachedResponse: CachedResponse<Proto.NavTreeResponse>,
|
||||
@@ -45,23 +46,27 @@ class TypeScriptDocumentSymbolProvider implements vscode.DocumentSymbolProvider
|
||||
|
||||
const args: Proto.FileRequestArgs = { file };
|
||||
const response = await this.cachedResponse.execute(document, () => this.client.execute('navtree', args, token));
|
||||
if (response.type !== 'response' || !response.body) {
|
||||
if (response.type !== 'response' || !response.body?.childItems) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
let tree = response.body;
|
||||
if (tree && tree.childItems) {
|
||||
// The root represents the file. Ignore this when showing in the UI
|
||||
const result: vscode.DocumentSymbol[] = [];
|
||||
tree.childItems.forEach(item => TypeScriptDocumentSymbolProvider.convertNavTree(document.uri, result, item));
|
||||
return result;
|
||||
// The root represents the file. Ignore this when showing in the UI
|
||||
const result: vscode.DocumentSymbol[] = [];
|
||||
for (const item of response.body.childItems) {
|
||||
TypeScriptDocumentSymbolProvider.convertNavTree(document.uri, result, item);
|
||||
}
|
||||
|
||||
return undefined;
|
||||
return result;
|
||||
}
|
||||
|
||||
private static convertNavTree(resource: vscode.Uri, bucket: vscode.DocumentSymbol[], item: Proto.NavigationTree): boolean {
|
||||
private static convertNavTree(
|
||||
resource: vscode.Uri,
|
||||
output: vscode.DocumentSymbol[],
|
||||
item: Proto.NavigationTree,
|
||||
): boolean {
|
||||
let shouldInclude = TypeScriptDocumentSymbolProvider.shouldInclueEntry(item);
|
||||
if (!shouldInclude && !item.childItems?.length) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const children = new Set(item.childItems || []);
|
||||
for (const span of item.spans) {
|
||||
@@ -83,7 +88,7 @@ class TypeScriptDocumentSymbolProvider implements vscode.DocumentSymbolProvider
|
||||
}
|
||||
|
||||
if (shouldInclude) {
|
||||
bucket.push(symbolInfo);
|
||||
output.push(symbolInfo);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -98,7 +103,6 @@ class TypeScriptDocumentSymbolProvider implements vscode.DocumentSymbolProvider
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
export function register(
|
||||
selector: vscode.DocumentSelector,
|
||||
client: ITypeScriptServiceClient,
|
||||
|
||||
Reference in New Issue
Block a user