статически анализирующие Lua кодируют для потенциальных ошибок

Поскольку вы создаете новый экземпляр класса, он будет продолжать вызывать testMethod. Вы можете следить за testMethod и callFake вместо вызова метода. Вы также можете использовать beforeAll вместо beforeEach, чтобы компонент создавался только один раз для теста. Таким образом, метод будет вызываться только при создании компонента.

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

10
задан Chris 14 May 2009 в 22:48
поделиться

3 ответа

Автоматический статический анализ кода для Lua в целом - непростая задача. Однако для ограниченного набора практических задач это вполне выполнимо.

Быстрый поиск в Google для "lua lint" дает следующие два инструмента: lua-checker и Lua lint .

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

Metalua - один из самых мощных инструментов для статического анализа кода Lua. Например, см. metalint , инструмент для анализа использования глобальных переменных.

Пожалуйста, не стесняйтесь размещать свой вопрос в списке рассылки Metalua . Там обычно очень отзывчивые люди.

9
ответ дан 3 December 2019 в 22:38
поделиться

For checking globals, see this lua-l posting. Checking locals is harder.

2
ответ дан 3 December 2019 в 22:38
поделиться

Вам необходимо найти синтаксический анализатор для lua ( должен быть доступен как открытый исходный код) и использовать его для синтаксического анализа скрипта в правильное дерево AST. Используйте это дерево и простой трекер видимости переменных, чтобы узнать, когда переменная определена или не определена.

Обычно правила области видимости просты:

  • начать с верхнего узла AST и пустой области видимости
  • элемента поиска в дочерних операторах для этого узла. Каждое объявление переменной должно быть добавлено в текущую область видимости.
  • , если новая область действия запускается (например, с помощью оператора {), создать новую область видимости переменных, наследуя переменные в текущей области).
  • когда область действия заканчивается (например, через}) удаляет текущую область дочерней переменной и возвращается к родительской.
  • Итерируйте осторожно.

Это даст вам представление о том, какие переменные видны внутри AST. Вы можете использовать эту информацию, и если вы также проверите узлы AST выражений (чтение / запись переменных), вы сможете узнать свою информацию.

1
ответ дан 3 December 2019 в 22:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: