[ID CC2023] jsx в .idjs (ExtendScript в UXP)

Skvoznyak

Топикстартер
15 лет на форуме
Сообщения
5 500
Реакции
2 168
Итак, господа, в неопределенном будущем близится закат ExtendScript, а наши друзья из Adobe опубликовали методичку по переделке в UXP


выглядит не особо сложно, но отлавливать каждый случай использования индизайновских классов для замены руками [] на item() и далее по тексту - imho нереально при объеме чуть более 100 строк

есть идея запилить конвертер. понятно что просто текстовыми заменами не обойтись, нужен синтаксический анализ, отслеживание содержимого переменных и т.п.

для иллюстрации подводных камней:

Код:
var paragraphs = [1];
var paras = app.selection[0].paragraphs;
for (j = 0; j < app.selection[0].paragraphs.length; j++){               
  var  item = app.selection[0].paragraphs[j];
  var nextItem = paras[j];
  var anotherItem = paragraphs[j];
  var test = "";
}

должно стать

Код:
var paragraphs = [1,2,3];
var paras = app.selection[0].paragraphs;
for (j = 0; j < app.selection[0].paragraphs.length; j++){               
  var  item = app.selection[0].paragraphs.item(j);
  var nextItem = paras.item(j);
  var anotherItem = paragraphs[j];
  var test = "";
}


думаю сделать это в виде плагина Babel или ESLint.
полезный отладчик с AST - AST explorer

буду держать в курсе по мере успехов, у кого есть/будут мысли и идеи - welcome! 'cooll)'
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Через try...catch если?
 

Oleg Butrin

20 лет на форуме
Сообщения
1 989
Реакции
1 213
Версию реализации JS не подняли хотя бы до ES7?
 

Skvoznyak

Топикстартер
15 лет на форуме
Сообщения
5 500
Реакции
2 168
Через try...catch если?
ну а хочется одной кнопкой. мне кажется, реально. надо отслеживать, что у выражения или переменной в предках "app". чтобы отличать коллекции от массивов - в явном виде список классов задать
 

Skvoznyak

Топикстартер
15 лет на форуме
Сообщения
5 500
Реакции
2 168
в принципе никто не мешает, а даже наоборот, поощряется писать на самом новом стандарте, а потом через вышеупомянутый babel прогонять для совместимости с ES6