Нужно инструмент Javascript: вызовы функций / аргументы - ANTLR? - PullRequest
4 голосов
/ 28 февраля 2012

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

У меня есть недоделанный способ сделать это с помощью Python: использовать ключевые слова 're' для соответствия 'функции' - но это действительно довольно примитивно (не касается комментариев и т. Д.).

Я не эксперт (очень далек от этого) с ANTRL: но насколько легко я могу использовать уже созданный Javascript Parser для выполнения этого? (Можем ли мы «подключить» стандартную java для динамического создания нужного мне кода в нужной точке?)

Кстати: собственно запись в журнал (вероятно) будет выполняться с помощью log4javascript; но я мог бы также просто использовать «оповещения» - сложная задача - заставить внедрение кода работать ....

Так, например, мне нужно включить что-то вроде:

function foo(bar) {
...
}

в:

function foo(bar) {
alert("<scriptname.js>: foo was called with arguments: [bar="+bar+"]");
...
}

Ответы [ 2 ]

5 голосов
/ 28 февраля 2012

Регулярные выражения этого не сделают. Если вы хотите надежно кодировать инструмент, вам нужны надежные парсеры и надежные механизмы для вставки инструментария.

См. Мою статью о построении инструментов тестирования покрытия с помощью кода . В нем описывается, как обрабатывать код в очень общем виде, используя преобразования программы «источник-источник», для выполнения таких задач, как то, что вы хотите.

Моя компания строит линию надежных инструментов тестирования покрытия таким образом.

Вы можете делать такие вещи с ANTLR, но это намного более неуклюже; Вы должны написать преобразования процедурно, а затем вам нужно восстановить исходный код из дерева разбора. Это намного сложнее, чем кажется .

2 голосов
/ 25 мая 2016

Вы можете использовать свой код JavaScript с помощью Google Tracing Framework . Он обеспечивает функции инструментов .

Существует также Скрипка , которая является экспериментом по инструментарию приложений JavaScript.

Поскольку вы хотите знать параметры, с которыми были вызваны ваши функции, я могу предложить вам Theseus . Он предоставляет асинхронное дерево вызовов с вызовами функций и аргументами.

Вот пример того, как захватить ваши аргументы с помощью Тесея:

function foo(bar) {
  theseus.traceEnter("function-id", "...");
  try {
    // original code
  } catch (error) {
    theseus.traceException("function-id", error);
  } finally {
    theseus.traceExit("function-id", "...");
  }
}

Ваши аргументы передаются в traceEnter и traceExit для сохранения. Вы можете прочитать больше об этом на Инструментарий JavaScript в JavaScript .

...