Комментарии 8
Чтобы найти что заменять всё равно нужно протраверситься по всему дереву. Сделать при этом замену некоторых узлов — капля в море. А если для этого надо менять смещения для всех остальных узлов — это какой-то кривой АСТ.
+1
Да — MagicString тоже нужно AST. Прирост производительности они дают за счет отсутствия необходимости использовать трансформеры.
Как уже говорил мы можем поменять данные только в одном узле, но как только мы обратно конвертируем AST -> text у нас возможны 2 варианты:
1) Конвертор AST -> text использует при сериализации start, end индексы. В этом случае у нас будут лишние пробелы (как на примере из статьи)
2) Конвертор AST -> text игнорирует start, end индексы. Весь текст будет переформатирован. В результате diff для данного изменения будет длинной в сам файл, хотя мы изменили 2 строчки.
Плюс есть еще ряд других проблем связанных с повторным проходом по тому-же AST. К примеру. Что если мы сначало заменили один узел и проигнорировали сотальные а потом ищем узел который начинается на нужном индексе? Индексы же не валидные :/
Так что пока трансформации простые. Все хорошо. Но как только делаем что-то более или менее сложное — трансформаторам придется обновлять эти несчастные координаты. Без этого увы не получиться.
Как уже говорил мы можем поменять данные только в одном узле, но как только мы обратно конвертируем AST -> text у нас возможны 2 варианты:
1) Конвертор AST -> text использует при сериализации start, end индексы. В этом случае у нас будут лишние пробелы (как на примере из статьи)
2) Конвертор AST -> text игнорирует start, end индексы. Весь текст будет переформатирован. В результате diff для данного изменения будет длинной в сам файл, хотя мы изменили 2 строчки.
Плюс есть еще ряд других проблем связанных с повторным проходом по тому-же AST. К примеру. Что если мы сначало заменили один узел и проигнорировали сотальные а потом ищем узел который начинается на нужном индексе? Индексы же не валидные :/
Так что пока трансформации простые. Все хорошо. Но как только делаем что-то более или менее сложное — трансформаторам придется обновлять эти несчастные координаты. Без этого увы не получиться.
0
Добавьте пункт "гифка не отобразилась" или просто 'какая гифка? "
+1
Мы знаем, что все последующие замены должны иметь index на 2 меньше (var меньше const на 2 символа, строка короче)
Не совсем понял, надо запоминать, на сколько символов поменялась строка?
+1
НЛО прилетело и опубликовало эту надпись здесь
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.
Что такое MagicString и настолько ли эти строки волшебные?