Как можно использовать API компилятора для преобразования Typescript в Typescript? - PullRequest
2 голосов
/ 29 апреля 2019

Я хотел бы создать инструмент для выполнения преобразований в коде машинописного текста и их выдачи в виде машинописного текста (а не javascript) в качестве части единовременного пути обновления в существующей кодовой базе.Возможно ли это и если да, то как?Я не нашел исчерпывающих и четких ссылок на API компилятора.Будем благодарны за любые ссылки на ссылки или реальный код.

1 Ответ

2 голосов
/ 29 апреля 2019

Вы можете сделать следующее:

  1. Разобрать все исходные файлы, используя ts.createSourceFile - создать AST / ts.SourceFile для каждого файла.
  2. Преобразуйте каждый исходный файл, используя ts.transform. Предоставьте это с вашими преобразованиями для использования.
  3. Используйте ts.createPrinter для создания принтера и распечатки преобразованных исходных файлов.
  4. Записать распечатанные исходные файлы в файловую систему.

Пример кода приведен в моем ответе здесь .

Alternative

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

Если вы хотите сохранить форматирование в файлах, вы можете вместо этого сделать следующее:

  1. Разобрать все исходные файлы в AST (так же, как # 1 выше).
  2. Пройдите по всем AST и создайте коллекцию текстовых изменений файла для выполнения в файлах. Пример структуры данных, которую вы, возможно, захотите создать, может быть аналогичен структуре, найденной в API компилятора - FileTextChanges.
  3. Манипулировать текстом непосредственно на основе этих изменений файла текста.
  4. Сохранить текст для каждого файла в файловой системе.

Альтернатива 2

Поскольку вы будете выполнять это только один раз на базе кода, вы, вероятно, сэкономите много времени, используя вместо этого мою библиотеку ts-morph .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...