You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
100 lines
1.9 KiB
Markdown
100 lines
1.9 KiB
Markdown
# lexical-scope
|
|
|
|
detect global and local lexical identifiers from javascript source code
|
|
|
|
[![browser support](http://ci.testling.com/substack/lexical-scope.png)](http://ci.testling.com/substack/lexical-scope)
|
|
|
|
[![build status](https://secure.travis-ci.org/substack/lexical-scope.png)](http://travis-ci.org/substack/lexical-scope)
|
|
|
|
# example
|
|
|
|
``` js
|
|
var detect = require('lexical-scope');
|
|
var fs = require('fs');
|
|
var src = fs.readFileSync(__dirname + '/src.js');
|
|
|
|
var scope = detect(src);
|
|
console.dir(scope);
|
|
```
|
|
|
|
input:
|
|
|
|
```
|
|
var x = 5;
|
|
var y = 3, z = 2;
|
|
|
|
w.foo();
|
|
w = 2;
|
|
|
|
RAWR=444;
|
|
RAWR.foo();
|
|
|
|
BLARG=3;
|
|
|
|
foo(function () {
|
|
var BAR = 3;
|
|
process.nextTick(function (ZZZZZZZZZZZZ) {
|
|
console.log('beep boop');
|
|
var xyz = 4;
|
|
x += 10;
|
|
x.zzzzzz;
|
|
ZZZ=6;
|
|
});
|
|
function doom () {
|
|
}
|
|
ZZZ.foo();
|
|
|
|
});
|
|
|
|
console.log(xyz);
|
|
```
|
|
|
|
output:
|
|
|
|
```
|
|
$ node example/detect.js
|
|
{ locals:
|
|
{ '': [ 'x', 'y', 'z' ],
|
|
'body.7.arguments.0': [ 'BAR', 'doom' ],
|
|
'body.7.arguments.0.body.1.arguments.0': [ 'xyz' ],
|
|
'body.7.arguments.0.body.2': [] },
|
|
globals:
|
|
{ implicit: [ 'w', 'foo', 'process', 'console', 'xyz' ],
|
|
exported: [ 'w', 'RAWR', 'BLARG', 'ZZZ' ] } }
|
|
```
|
|
|
|
# live demo
|
|
|
|
If you are using a modern browser, you can go to http://lexical-scope.forbeslindesay.co.uk/ for a live demo.
|
|
|
|
# methods
|
|
|
|
``` js
|
|
var detect = require('lexical-scope')
|
|
```
|
|
|
|
## var scope = detect(src)
|
|
|
|
Return a `scope` structure from a javascript source string `src`.
|
|
|
|
`scope.locals` maps scope name keys to an array of local variable names declared
|
|
with `var`. The key name `''` refers to the top-level scope.
|
|
|
|
`scope.globals.implicit` contains the global variable names that are expected to
|
|
already exist in the environment by the script.
|
|
|
|
`scope.globals.explicit` contains the global variable names that are exported by
|
|
the script.
|
|
|
|
# install
|
|
|
|
With [npm](https://npmjs.org) do:
|
|
|
|
```
|
|
npm install lexical-scope
|
|
```
|
|
|
|
# license
|
|
|
|
MIT
|