在vscode中以编程方式执行“转到文件中的符号”?

问题描述 投票:0回答:1

是否可以从Extension中跳转到文件中的现有符号?

某种东西:

goToSymbol(symbol: string)

附:我不想提供DocumentSymbolProvider。如何使用现有的?

visual-studio-code vscode-extensions
1个回答
1
投票
async function getSymbols(document: TextDocument): Promise<DocumentSymbol[]> {
    return await commands.executeCommand<DocumentSymbol[]>('vscode.executeDocumentSymbolProvider', document.uri) || [];
}

async function goToSymbol(document: TextDocument, symbolName: string) {
    const symbols = await getSymbols(document);
    const findSymbol = symbols.find(symbol => symbol.name === symbolName);
    const activeTextEditor = window.activeTextEditor;
    if (findSymbol && activeTextEditor) {
        activeTextEditor.revealRange(findSymbol.range, vscode.TextEditorRevealType.AtTop);
        activeTextEditor.selection = new Selection(findSymbol.range.start, findSymbol.range.start);
    }
}

注意:上面的代码应该足以转到1 lvl的符号。

可以作为.children访问的嵌套符号(在symbols的每个元素上)

© www.soinside.com 2019 - 2024. All rights reserved.