Как стать автором
Обновить

Комментарии 8

Чтобы найти что заменять всё равно нужно протраверситься по всему дереву. Сделать при этом замену некоторых узлов — капля в море. А если для этого надо менять смещения для всех остальных узлов — это какой-то кривой АСТ.

Да — MagicString тоже нужно AST. Прирост производительности они дают за счет отсутствия необходимости использовать трансформеры.

Как уже говорил мы можем поменять данные только в одном узле, но как только мы обратно конвертируем AST -> text у нас возможны 2 варианты:

1) Конвертор AST -> text использует при сериализации start, end индексы. В этом случае у нас будут лишние пробелы (как на примере из статьи)

2) Конвертор AST -> text игнорирует start, end индексы. Весь текст будет переформатирован. В результате diff для данного изменения будет длинной в сам файл, хотя мы изменили 2 строчки.

Плюс есть еще ряд других проблем связанных с повторным проходом по тому-же AST. К примеру. Что если мы сначало заменили один узел и проигнорировали сотальные а потом ищем узел который начинается на нужном индексе? Индексы же не валидные :/

Так что пока трансформации простые. Все хорошо. Но как только делаем что-то более или менее сложное — трансформаторам придется обновлять эти несчастные координаты. Без этого увы не получиться.

Добавьте пункт "гифка не отобразилась" или просто 'какая гифка? "

Ок :) учту в следующих статьях
Мы знаем, что все последующие замены должны иметь index на 2 меньше (var меньше const на 2 символа, строка короче)

Не совсем понял, надо запоминать, на сколько символов поменялась строка?

MagicString сам запомнить смешение и после выполнения каждого из операторов обновить индексы для других операторов. Вам об этом не нужно думать, если вы используете MagicString. В этом и их плюс :)
НЛО прилетело и опубликовало эту надпись здесь
Да, это вариант. Проблема в том что изменения могут накладываться друг на друга. К примеру я заменяю const на var а потом удаляю эту строчку (пример глупый но все-же). Так-что сортировка в данном случае подходит лишь для некоторых сценариев.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.