Выполнить "перейти к символу в файле" программно в vscode? - PullRequest
0 голосов
/ 05 января 2019

Можно ли перейти к существующему символу в файле из расширения?

Что-то в этом роде:

goToSymbol(symbol: string)

P.S. Я не хочу предоставлять DocumentSymbolProvider. Как использовать существующие?

1 Ответ

0 голосов
/ 05 января 2019
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 уровня.

Вложенные символы доступны как .children (для каждого элемента symbols)

...