Как получить объект в расширении vscode?

При разработке нового расширения для Visual Studio Code, как я могу получить текущий класс, на который указывает мой курсор?

Например:

export class MyClassA {

  parameter1: number = 5;

  myFunc() {
    return parameter1 * 2;
  }

}

export class MyClassB {
   anotherParamenter = null;
}

Если мой курсор находится внутри области myFunc, и я вызываю registerHoverProvider или что-то еще, я хочу знать, что я внутри класса MyClassA.

Можно ли получить объект или только позицию курсора?


person Gustavo Lopes    schedule 30.03.2018    source источник
comment
Я думаю, вам нужно использовать один из методов для извлечения текста из документа (используя позицию курсора), а затем использовать api поиска символов после некоторого анализа, чтобы выяснить фактические данные класса. Не уверен, хотя, похоже, это должен быть лучший способ, но именно так я подходил к этому в прошлом.   -  person Catalyst    schedule 31.03.2018


Ответы (1)


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

Следовательно, первое, что вам нужно сделать для этого, - это реализовать синтаксический анализатор или использовать службу синтаксического анализа, предоставляемую другими инструментами. Как только это будет сделано, вы можете запросить это, чтобы найти синтаксический контекст (например, myFunc в MyClassA в модуле foo), а затем действовать в соответствии с ним, чтобы сгенерировать информацию для вашего провайдера наведения.

person Mike Lischke    schedule 31.03.2018