How JavaScript Studio works

The analyzer will parse your source code into an AST. It will then evaluate the AST dynamically, trying to reach every possible execution branch. If a global entry point is specified, every exposed function will be evaluated, including functions that are returned by other functions. This allows to automatically scan the entire API of a library. The number of unique AST nodes and exposed functions that have been effectively analyzed are shown in each report.

Call tree

Each report visualizes how JavaScript Studio crawled your source code. It shows the exposed API and where exceptions are thrown.

• test() index.js
[click Event]
ƒ(event) RUNTIME ERROR

More call tree examples

Runtime errors

JavaScript Studio can find runtime errors without any test data or type annotations. No source code changes are required.

function test(arg) {
  if (Object.prototype.toString.call(arg) === '[object Boolean]') {
    return arg.substring(1); // TypeError: substring is not a function
  }
}

More runtime error examples

Event handlers

Events are invoked automatically. No manual event triggers or configuration is required.

function test() {
  document.body.addEventListener('click', function (event) {
    event.avoidPropagation(); // TypeError: avoidPropagation is not a function
  });
}

More about event handlers

Timers

Timers are fired in the virtual execution environment without the need wait for long timeouts.

function test() {
  setTimeout(function () {
    location.refresh(); // TypeError: refresh is not a function
  }, 60000);
}

More about timers