Файл src/compiler/Context.ts, см. TODO на строке 23
При процессинге шаблона компилятор будет создавать функции верхнего уровня, в которых будут находится фрагменты для рендеринга шаблона. Но чтобы убедиться, что не будет никаких пересечений с названиями уже существующих символов (импорты, переменные, функции), нужно собрать все объявления символов на верхнем уровне модуля и записать их как declarations у this.scope.
Возможно, для этого можно использовать модуль estraverse для обхода дерева. Либо пройтись по корню this.ast, этого может хватить для сбора данных. Пример использования обхода можно посмотреть в src/compiler/analyze.ts.
Подсказка: если используешь estraverse, нужно не забывать вызывать this.skip(), чтобы не заходить в дебри AST и сэкономить ресурсы
При процессинге шаблона компилятор будет создавать функции верхнего уровня, в которых будут находится фрагменты для рендеринга шаблона. Но чтобы убедиться, что не будет никаких пересечений с названиями уже существующих символов (импорты, переменные, функции), нужно собрать все объявления символов на верхнем уровне модуля и записать их как
declarationsуthis.scope.Возможно, для этого можно использовать модуль
estraverseдля обхода дерева. Либо пройтись по корнюthis.ast, этого может хватить для сбора данных. Пример использования обхода можно посмотреть вsrc/compiler/analyze.ts.Подсказка: если используешь
estraverse, нужно не забывать вызыватьthis.skip(), чтобы не заходить в дебри AST и сэкономить ресурсы