Как использовать acorn.js или подобную библиотеку, чтобы добавить новый узел в дерево ast?

Я пытался использовать acorn.js вместе с yeoman для добавления кода в существующие js-файлы. Я пытался работать с esprima и acorn, чтобы выполнить эту работу, но я не могу найти никакой документации о добавлении узла в AST.

3 ответа

(с опозданием на три года, но вот ответ)

Сначала вам нужно понять, что нельзя просто добавить новый узел в дерево AST. Поскольку вы указали, что хотите добавить код в файлы js, вам необходимо добавить его в узел с расширением. Как вы манипулируете bodyто же самое, что и с массивами (на примере желудя). Ниже приведен пример того, как вы добавляете узел в FunctionDeclaration узел.

      // astNode is a FunctionDeclaration node with a body that contains more nodes
// newNode is the code you want to insert
astNode.body.push(newNode); // add node at the end of the function block
astNode.body.unshift(newNode); // add node at the beginning of the function block
astNode.body.splice(index, 0, newNode); // add node at index

Что я нашел полезным, так это использование эстраверсии с желудем. Вы можете конвертировать свои JS-файлы в AST с помощью acorn, а затем легко добавлять или заменять узлы на estraverse в соответствии с ECMAscript.

Вам нужно искать API estraverse.replace (..).

Я считаю, что это то, что вы ищете https://github.com/SBoudrias/ast-query

Другие вопросы по тегам