Как мне разобрать TS для символов, используя протокол Language Server? - PullRequest
1 голос
/ 10 июля 2019

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

// some ts file
export function yell(output: string) {
  alert(output + "!!");
}

создаст что-то вроде этого:

{
  symbols: [
    { type: "comment", text: "// some ts file" },
    "\n",
    { type: "module", text: "export" },
    " ",
    { type: "function", symbols: [
      { type: "name", text: "yell" },
      ... it goes on
    ]}
  ]
}

Я почти уверен, что эта символизация /Токенизация является частью фазы инициализации языкового сервера, пытаясь извлечь из этой проблемы (https://github.com/Microsoft/language-server-protocol/issues/33).

Но я прочитал документы по инициализации (https://microsoft.github.io/language-server-protocol/specification#initialize), и я не смог 'не могу найти (ctrl-f) ничего о возвращаемых символах или токенах.

Некоторое время назад я работал с Монако, и я знаю, что целью языковых серверов является в значительной степени стандартизация токенизации и связывания / навигации по коду., поэтому я уверен, что это правильный инструмент для него. Но документы довольно плотные и, кажется, гораздо больше сфокусированы на взаимодействиях кода, чем на разборе кода.

Как я могу разобрать TSдля символов, использующих протокол языкового сервера?

РЕДАКТИРОВАТЬ: хорошо упомянуть, на случай, если это проект сам по себе: я не ищу полный код для этого или что-то. Просто какой-тосГрубый обзор того, что происходит, и, возможно, несколько ссылок / отрывков на соответствующие документы.

РЕДАКТИРОВАТЬ 2: Я нашел очень похожий вопрос здесь ( TypeScript: получить синтаксическое дерево ), но этоне упоминает о языковых серверах и, похоже, пришел раньше, чем они.

РЕДАКТИРОВАТЬ 3: Похоже, что правильный термин, который я искал, это AST.Нашел действительно классный онлайн-инструмент для TypeScript (https://ts -ast-viewer.com / )

1 Ответ

1 голос
/ 10 июля 2019

Как оказалось, языковые серверы не предоставляют AST (абстрактное синтаксическое дерево).

Я нашел эту проблему с цитатой:

Я могу видеть, как и AST может помочь здесь, но в настоящее время нет планов выставить AST через LSP. Вся идея LSP состоит в том, чтобы этого не делать, поскольку он очень затрудняет стандартизацию разных языков и инструментов

https://github.com/Microsoft/language-server-protocol/issues/258

К счастью, для машинописи есть несколько способов сделать это (https://github.com/microsoft/TypeScript/wiki/Using-the-Compiler-API#using-the-type-checker).

Я обновлю, как только разберусь с этим альтернативным способом.

...