Показать сообщение отдельно
  #3 (permalink)  
Старый 30.05.2014, 14:07
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Сообщение от 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_;'
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 30.05.2014 в 14:29.
Ответить с цитированием