source: imaps-frontend/node_modules/esrecurse/README.md@ d565449

main
Last change on this file since d565449 was d565449, checked in by stefan toskovski <stefantoska84@…>, 4 weeks ago

Update repo after prototype presentation

  • Property mode set to 100644
File size: 5.0 KB
Line 
1### Esrecurse [![Build Status](https://travis-ci.org/estools/esrecurse.svg?branch=master)](https://travis-ci.org/estools/esrecurse)
2
3Esrecurse ([esrecurse](https://github.com/estools/esrecurse)) is
4[ECMAScript](https://www.ecma-international.org/publications/standards/Ecma-262.htm)
5recursive traversing functionality.
6
7### Example Usage
8
9The following code will output all variables declared at the root of a file.
10
11```javascript
12esrecurse.visit(ast, {
13 XXXStatement: function (node) {
14 this.visit(node.left);
15 // do something...
16 this.visit(node.right);
17 }
18});
19```
20
21We can use `Visitor` instance.
22
23```javascript
24var visitor = new esrecurse.Visitor({
25 XXXStatement: function (node) {
26 this.visit(node.left);
27 // do something...
28 this.visit(node.right);
29 }
30});
31
32visitor.visit(ast);
33```
34
35We can inherit `Visitor` instance easily.
36
37```javascript
38class Derived extends esrecurse.Visitor {
39 constructor()
40 {
41 super(null);
42 }
43
44 XXXStatement(node) {
45 }
46}
47```
48
49```javascript
50function DerivedVisitor() {
51 esrecurse.Visitor.call(/* this for constructor */ this /* visitor object automatically becomes this. */);
52}
53util.inherits(DerivedVisitor, esrecurse.Visitor);
54DerivedVisitor.prototype.XXXStatement = function (node) {
55 this.visit(node.left);
56 // do something...
57 this.visit(node.right);
58};
59```
60
61And you can invoke default visiting operation inside custom visit operation.
62
63```javascript
64function DerivedVisitor() {
65 esrecurse.Visitor.call(/* this for constructor */ this /* visitor object automatically becomes this. */);
66}
67util.inherits(DerivedVisitor, esrecurse.Visitor);
68DerivedVisitor.prototype.XXXStatement = function (node) {
69 // do something...
70 this.visitChildren(node);
71};
72```
73
74The `childVisitorKeys` option does customize the behaviour of `this.visitChildren(node)`.
75We can use user-defined node types.
76
77```javascript
78// This tree contains a user-defined `TestExpression` node.
79var tree = {
80 type: 'TestExpression',
81
82 // This 'argument' is the property containing the other **node**.
83 argument: {
84 type: 'Literal',
85 value: 20
86 },
87
88 // This 'extended' is the property not containing the other **node**.
89 extended: true
90};
91esrecurse.visit(
92 ast,
93 {
94 Literal: function (node) {
95 // do something...
96 }
97 },
98 {
99 // Extending the existing traversing rules.
100 childVisitorKeys: {
101 // TargetNodeName: [ 'keys', 'containing', 'the', 'other', '**node**' ]
102 TestExpression: ['argument']
103 }
104 }
105);
106```
107
108We can use the `fallback` option as well.
109If the `fallback` option is `"iteration"`, `esrecurse` would visit all enumerable properties of unknown nodes.
110Please note circular references cause the stack overflow. AST might have circular references in additional properties for some purpose (e.g. `node.parent`).
111
112```javascript
113esrecurse.visit(
114 ast,
115 {
116 Literal: function (node) {
117 // do something...
118 }
119 },
120 {
121 fallback: 'iteration'
122 }
123);
124```
125
126If the `fallback` option is a function, `esrecurse` calls this function to determine the enumerable properties of unknown nodes.
127Please note circular references cause the stack overflow. AST might have circular references in additional properties for some purpose (e.g. `node.parent`).
128
129```javascript
130esrecurse.visit(
131 ast,
132 {
133 Literal: function (node) {
134 // do something...
135 }
136 },
137 {
138 fallback: function (node) {
139 return Object.keys(node).filter(function(key) {
140 return key !== 'argument'
141 });
142 }
143 }
144);
145```
146
147### License
148
149Copyright (C) 2014 [Yusuke Suzuki](https://github.com/Constellation)
150 (twitter: [@Constellation](https://twitter.com/Constellation)) and other contributors.
151
152Redistribution and use in source and binary forms, with or without
153modification, are permitted provided that the following conditions are met:
154
155 * Redistributions of source code must retain the above copyright
156 notice, this list of conditions and the following disclaimer.
157
158 * Redistributions in binary form must reproduce the above copyright
159 notice, this list of conditions and the following disclaimer in the
160 documentation and/or other materials provided with the distribution.
161
162THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
163AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
164IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
165ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
166DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
167(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
168LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
169ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
170(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
171THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Note: See TracBrowser for help on using the repository browser.