Сообщение от nerv_
|
kobezzza, а зачем это? (любопытно)
Что-то вроде String Templates in ES6?
Я почему спрашиваю: ты говорил, что пишешь на es6. В es6 это встроенный функционал.
|
Ты не понял что делает либа
Попробую объяснить на примере:
// Допустим есть функция
function foo() {
var a = 'this'; /* this */
var b = /this/;
}
Внутри Collection для оптимизации я изучаю тело функции на наличие this, т.е. делаю поиск по регулярке для foo.toString(), но перед тем как это делать нужно "заэкранировать" все литералы и комментарии, чтобы пример выше вернул, что this внутри функции не используется.
Задача на первый взгляд простая, но это обман
Т.к. могут быть очень хитрые литералы, а строить AST для такой вещи - это гемор, да и работать это будет медленней.
Вот я делаю
Escaper.replace(foo.toString(), true)
И функция мне вернёт что-то вроде (строку):
"function foo() {\
var a = __ESCAPER_QUOT__0_; __ESCAPER_QUOT__1_\
var b = __ESCAPER_QUOT__2_;\
}"
Т.е. всё содержимое литералов было заменено на специальные константы и дальше я уже спокойно работаю со строкой. Ну и разумеется есть обратная replace операция - paste, которая принимает экранированную строку и возвращает её к прежнему виду (если это нужно).
Эту либу я юзаю вместе с Collection и Snakeskin, а также в других своих разработках.
Сообщение от nerv_
|
Я почему спрашиваю: ты говорил, что пишешь на es6. В es6 это встроенный функционал.
|
Юзаю, поэтому сегодня как раз добавил поддержку строк-шаблонов
'`this ${this}`'
=>
'__ESCAPER_QUOT__0_this__ESCAPER_QUOT__1_;'