Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F91004911
README.md
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Wed, Nov 6, 20:42
Size
4 KB
Mime Type
text/x-c++
Expires
Fri, Nov 8, 20:42 (1 d, 22 h)
Engine
blob
Format
Raw Data
Handle
22178004
Attached To
rOACCT Open Access Compliance Check Tool (OACCT)
README.md
View Options
###
Esrecurse
[![
Build
Status
](
https
:
//travis-ci.org/estools/esrecurse.svg?branch=master)](https://travis-ci.org/estools/esrecurse)
Esrecurse
([
esrecurse
](
https
:
//github.com/estools/esrecurse)) is
[
ECMAScript
](
https
:
//www.ecma-international.org/publications/standards/Ecma-262.htm)
recursive
traversing
functionality
.
###
Example
Usage
The
following
code
will
output
all
variables
declared
at
the
root
of
a
file
.
```
javascript
esrecurse
.
visit
(
ast
,
{
XXXStatement
:
function
(
node
)
{
this
.
visit
(
node
.
left
);
// do something...
this
.
visit
(
node
.
right
);
}
});
```
We
can
use
`Visitor`
instance
.
```
javascript
var
visitor
=
new
esrecurse
.
Visitor
({
XXXStatement
:
function
(
node
)
{
this
.
visit
(
node
.
left
);
// do something...
this
.
visit
(
node
.
right
);
}
});
visitor
.
visit
(
ast
);
```
We
can
inherit
`Visitor`
instance
easily
.
```
javascript
class
Derived
extends
esrecurse
.
Visitor
{
constructor
()
{
super
(
null
);
}
XXXStatement
(
node
)
{
}
}
```
```
javascript
function
DerivedVisitor
()
{
esrecurse
.
Visitor
.
call
(
/* this for constructor */
this
/* visitor object automatically becomes this. */
);
}
util
.
inherits
(
DerivedVisitor
,
esrecurse
.
Visitor
);
DerivedVisitor
.
prototype
.
XXXStatement
=
function
(
node
)
{
this
.
visit
(
node
.
left
);
// do something...
this
.
visit
(
node
.
right
);
};
```
And
you
can
invoke
default
visiting
operation
inside
custom
visit
operation
.
```
javascript
function
DerivedVisitor
()
{
esrecurse
.
Visitor
.
call
(
/* this for constructor */
this
/* visitor object automatically becomes this. */
);
}
util
.
inherits
(
DerivedVisitor
,
esrecurse
.
Visitor
);
DerivedVisitor
.
prototype
.
XXXStatement
=
function
(
node
)
{
// do something...
this
.
visitChildren
(
node
);
};
```
The
`childVisitorKeys` option does customize the behaviour of `this.visitChildren(node)`
.
We
can
use
user
-
defined
node
types
.
```
javascript
// This tree contains a user-defined `TestExpression` node.
var
tree
=
{
type
:
'
TestExpression
'
,
// This 'argument' is the property containing the other **node**.
argument
:
{
type
:
'
Literal
'
,
value
:
20
},
// This 'extended' is the property not containing the other **node**.
extended
:
true
};
esrecurse
.
visit
(
ast
,
{
Literal
:
function
(
node
)
{
// do something...
}
},
{
// Extending the existing traversing rules.
childVisitorKeys
:
{
// TargetNodeName: [ 'keys', 'containing', 'the', 'other', '**node**' ]
TestExpression
:
[
'
argument
'
]
}
}
);
```
We
can
use
the
`fallback`
option
as
well
.
If
the
`fallback` option is `"iteration"`, `esrecurse`
would
visit
all
enumerable
properties
of
unknown
nodes
.
Please
note
circular
references
cause
the
stack
overflow
.
AST
might
have
circular
references
in
additional
properties
for
some
purpose
(
e
.
g
.
`node.parent`
).
```
javascript
esrecurse
.
visit
(
ast
,
{
Literal
:
function
(
node
)
{
// do something...
}
},
{
fallback
:
'
iteration
'
}
);
```
If
the
`fallback` option is a function, `esrecurse`
calls
this
function
to
determine
the
enumerable
properties
of
unknown
nodes
.
Please
note
circular
references
cause
the
stack
overflow
.
AST
might
have
circular
references
in
additional
properties
for
some
purpose
(
e
.
g
.
`node.parent`
).
```
javascript
esrecurse
.
visit
(
ast
,
{
Literal
:
function
(
node
)
{
// do something...
}
},
{
fallback
:
function
(
node
)
{
return
Object
.
keys
(
node
).
filter
(
function
(
key
)
{
return
key
!==
'
argument
'
});
}
}
);
```
###
License
Copyright
(
C
)
2014
[
Yusuke
Suzuki
](
https
:
//github.com/Constellation)
(
twitter
:
[@
Constellation
](
https
:
//twitter.com/Constellation)) and other contributors.
Redistribution
and
use
in
source
and
binary
forms
,
with
or
without
modification
,
are
permitted
provided
that
the
following
conditions
are
met
:
*
Redistributions
of
source
code
must
retain
the
above
copyright
notice
,
this
list
of
conditions
and
the
following
disclaimer
.
*
Redistributions
in
binary
form
must
reproduce
the
above
copyright
notice
,
this
list
of
conditions
and
the
following
disclaimer
in
the
documentation
and
/
or
other
materials
provided
with
the
distribution
.
THIS
SOFTWARE
IS
PROVIDED
BY
THE
COPYRIGHT
HOLDERS
AND
CONTRIBUTORS
"AS IS"
AND
ANY
EXPRESS
OR
IMPLIED
WARRANTIES
,
INCLUDING
,
BUT
NOT
LIMITED
TO
,
THE
IMPLIED
WARRANTIES
OF
MERCHANTABILITY
AND
FITNESS
FOR
A
PARTICULAR
PURPOSE
ARE
DISCLAIMED
.
IN
NO
EVENT
SHALL
<
COPYRIGHT
HOLDER
>
BE
LIABLE
FOR
ANY
DIRECT
,
INDIRECT
,
INCIDENTAL
,
SPECIAL
,
EXEMPLARY
,
OR
CONSEQUENTIAL
DAMAGES
(
INCLUDING
,
BUT
NOT
LIMITED
TO
,
PROCUREMENT
OF
SUBSTITUTE
GOODS
OR
SERVICES
;
LOSS
OF
USE
,
DATA
,
OR
PROFITS
;
OR
BUSINESS
INTERRUPTION
)
HOWEVER
CAUSED
AND
ON
ANY
THEORY
OF
LIABILITY
,
WHETHER
IN
CONTRACT
,
STRICT
LIABILITY
,
OR
TORT
(
INCLUDING
NEGLIGENCE
OR
OTHERWISE
)
ARISING
IN
ANY
WAY
OUT
OF
THE
USE
OF
THIS
SOFTWARE
,
EVEN
IF
ADVISED
OF
THE
POSSIBILITY
OF
SUCH
DAMAGE
.
Event Timeline
Log In to Comment