Как избежать оценки состояния вне функции при работе с пользовательским синтаксисом JS? - PullRequest
0 голосов
/ 15 июня 2019

Я пытаюсь создать свой первый пользовательский синтаксис JS, используя Sweet.js

Я пробую разные синтаксисы, используя их онлайн-площадку .

Пока эта упрощенная версия работает для меня:

syntax test = function (ctx) {
  let exp = ctx.expand('expr').value;
  return #`(function (exp) { return exp; }(${exp}))`
};

var a = 1
var b = 2
test !(a > b)

Это успешно компилируется в:

var a = 1;
var b = 2;
function (exp) {
  return exp;
}(!(a > b));

Теперь, если я пытаюсь использовать ${exp} непосредственно в своей функции, я получаю ошибку: Error: Not implemented yet [object Object]

syntax test = function (ctx) {
  let exp = ctx.expand('expr').value;
  return #`(function () { return ${exp}; }())`
};

var a = 1
var b = 2
test !(a > b) // Error: Not implemented yet [object Object]

Я хотел бы получить:

var a = 1;
var b = 2;
function () {
  return !(a > b);
}();

.., чтобы избежать оценки этого состояния вне функции.

Я перепробовал много вариантов, ни один из которых не был успешным, это достижимо или я что-то упустил?Спасибо

...