Я уже спрашивал об этом на вялом канале Babel пару дней назад, но ответа так и не получил.Я создал плагин для преобразования функций в карри ( npm ).Несмотря на мой успех в создании плагинов, у меня есть пара проблем, для которых я нашел обходной путь, но я бы предпочел упростить мою логику и, следовательно, сделать ее более надежной и надежной.
Мой первый подход заключался в созданиипосетитель для FunctionDeclaration
.Это было очень просто: разверните каждый аргумент в ArrowFunctionExpression
, а затем замените текущий узел новым FunctionDeclaration
, который возвращает эти функции.
Проблема возникает, когда вы хотите иметь дело с FunctionExpression
s,Как вы, вероятно, знаете, FunctionExpression
может появляться в нескольких местах AST:
- как часть объявления переменной
- как часть
AssignmentExpression
- Как анонимная функция, переданная другой функции
Все они являются допустимыми FunctionExpressions, которые создают проблему: я заменял текущий узел на functionDeclaration, но, похоже, babel отказывается заменить любую из этих функций.с functionDeclaration
.Это заставило меня заменить весь родительский узел, воссоздав его.До сих пор это работало для выражений присваивания и объявлений переменных, которые содержат выражение functionExpression, но я должен воссоздать их точно, чтобы не нарушать код.Это становится сложнее, так как вы хотите поддерживать больше сценариев.
Для меня идеальной ситуацией будет просто заменить текущий узел и вообще не беспокоиться о том, где он находится, но, как я уже сказал, babel отказываетсязамените текущий узел, когда он находится внутри объявления переменной.
Код можно увидеть здесь .Примечание: я не уверен, должен ли я также публиковать код здесь, кажется, не является необходимым
С уважением