command line tool exposing lexical-scope
JavaScript
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
bin
test
README.md
cli.js
globals.js
index.js
package.json

README.md

scoped

scoped is a command line tool to help you reason about your javascript.

scoped is also a library that will give you all of the scope information about a given falafel-generated AST! (it even works with let!)

var scoped = require('scoped')
  , falafel = require('falafel')

falafel('<some javascript>', scoped(function(scope) {
    scope.vars                          // vars declared in this scope
    scope.vars[0].name                  // the name of the var
    scope.vars[0].nodes                 // a list of nodes + kinds of use
    scope.vars[0].nodes[0].kind         // "implicit", "explicit", or "declare"
    scope.vars[0].nodes[0].node         // the esprima AST node.

    scope.children                      // the list of child scopes of this node
    scope.children[0]                   // as an array.

    scope.uses                          // the list of variables that this scope
                                        // "uses" from parent scopes. at top level,
                                        // these are globals.
}))

// you can also tell scoped to ignore certain globals:
falafel('<some javascript>', scoped(['Math', 'module'], function(scope) {

}))

it notifies you of globals -- both explicit (created by assigning) and implicit (use without definition) -- and, when given a position in the file, will let you know what variables are in scope at that point.

example scoped output

usage

scoped path/to/file.js

outputs only global usage/leakage information, with line and column numbers.

scoped path/to/file.js --position=line[,column]

outputs scope chain, with usage/definition for each scope. position is in the form LINE,COLUMN. ,COLUMN may be omitted, if so, it is assumed to be 1. Both line and column are assumed to be 1-indexed (like most editors).

  • Green + signs indicate scope definitions -- i.e., a new variable was created in this scope.

  • Purple * signs indicate use of a variable from a containing scope.

  • If the function is named, it will use that to describe the function.

installation

npm install -g scoped

license

MIT