Изменить существующие CodeLens в VS Code Extension - PullRequest
0 голосов
/ 14 января 2019

В VS Code, если ваше языковое расширение предоставляет его, вы получите codelens, чтобы показать вам счетчик ссылок над функциями, переменными и другими символами. Вот так: https://i.imgur.com/HXzgjGh.png

Я принимаю проект, и одна из моих первых задач - реструктуризация. Как часть этого, я хотел бы вытащить ссылки на локальный / внешний без необходимости «показывать все ссылки».

Я просмотрел пример API расширения и просматривал API . После этого я создал несколько, по большей части бессмысленных расширений, чтобы узнать немного больше о том, как они работают. Я могу вставить codelens с любыми данными, которые я хочу, но теперь я застрял. Похоже, не существует способа получить существующие кодовые линзы или сделать что-нибудь, чтобы получить доступ к той информации, которая создала «ссылки на i».

Еще одна подсказка, которую я нашел на своем пути: способ, которым это работает, заключается в языке, определяющем символы. Тем не менее, кажется, нет никакого способа перебрать их тоже? Я мог бы пересмотреть все и сделать свой собственный анализ codelens, но это займет больше времени, чем ручная проверка области. Это также кажется более сложным, чем необходимо.

Я надеялся на событие, которое запускается, когда кодленс генерируется / изменяется и предоставляет мне этот кодленс. Кажется, что кодовые линзы пузырились, и у меня нет к ним доступа.

Мой идеал - два получить две информации:

  1. Получите число i из "я ссылки".
  2. Получите строку, к которой он относится.

Возможно ли это или выходит за рамки API? Я могу переписать синтаксический анализ, но что-то уже генерирует эту информацию, поэтому я предпочел бы получить к ней доступ.

1 Ответ

0 голосов
/ 15 января 2019

Я нашел ответ на свой вопрос, в конце концов. А именно, встроенные команды . Оказывается, вы можете получить символы документа и выполнить поставщик ссылок, используя две команды (которые я здесь превратил в функции):

async function getSymbols(document: TextDocument): Promise<SymbolInformation[]>
{
    return await commands.executeCommand<SymbolInformation[]>('vscode.executeDocumentSymbolProvider', 
                                                                document.uri) || [];
}

async function getReferences(location: Location): Promise<Location[]>
{
    return await commands.executeCommand<Location[]>('vscode.executeReferenceProvider',
                                                    location.uri,
                                                    new Position(
                                                        location.range.start.line,
                                                        location.range.start.character)) || [];
}

Позже я объединю эти два в отдельный вызов функции, включающий определенные условия.

Это не совсем то, что я хотел сделать (получить возвращаемое значение codelens), но это позволяет мне повторно использовать то, что реализовано, без необходимости заново изобретать колесо.

...