Security News
ESLint is Now Language-Agnostic: Linting JSON, Markdown, and Beyond
ESLint has added JSON and Markdown linting support with new officially-supported plugins, expanding its versatility beyond JavaScript.
estraverse
Advanced tools
The estraverse npm package is a utility for traversing and updating ECMAScript (JavaScript) abstract syntax trees (ASTs). It is commonly used in the development of JavaScript code analysis and transformation tools.
Traversing an AST
This feature allows you to traverse an AST, visiting all nodes in a depth-first order. You can perform actions when entering or leaving each node.
const estraverse = require('estraverse');
const ast = { /* some AST object */ };
estraverse.traverse(ast, {
enter: function (node) {
console.log('Entering node:', node.type);
},
leave: function (node) {
console.log('Leaving node:', node.type);
}
});
Updating an AST
This feature allows you to update nodes in an AST during traversal. In this example, it renames identifiers from 'oldName' to 'newName'.
const estraverse = require('estraverse');
const ast = { /* some AST object */ };
estraverse.replace(ast, {
enter: function (node) {
if (node.type === 'Identifier' && node.name === 'oldName') {
node.name = 'newName';
return node;
}
}
});
Acorn is a tiny, fast JavaScript parser that produces an AST which can be used by tools like estraverse. While Acorn focuses on parsing, estraverse focuses on traversal and modification.
Babel-traverse is part of the Babel compiler ecosystem. It allows for traversing the Babel-generated AST and has more features specific to Babel's AST format, compared to estraverse which is more generic.
Esquery is a package for querying an AST using a CSS-like query syntax. It is different from estraverse in that it focuses on selecting nodes based on complex patterns rather than traversing every node.
Recast provides AST traversal and transformation capabilities, similar to estraverse, but also includes pretty-printing and source map support, which estraverse does not.
Estraverse (estraverse) is ECMAScript traversal functions from esmangle project.
The following code will output all variables declared at the root of a file.
estraverse.traverse(ast, {
enter: function (node, parent) {
if (node.type == 'FunctionExpression' || node.type == 'FunctionDeclaration')
return estraverse.VisitorOption.Skip;
},
leave: function (node, parent) {
if (node.type == 'VariableDeclarator')
console.log(node.id.name);
}
});
We can use this.skip
and this.break
functions instead of using Skip and Break.
estraverse.traverse(ast, {
enter: function (node) {
this.break();
}
});
And estraverse provides estraverse.replace
function. When returning node from enter
/leave
, current node is replaced with it.
result = estraverse.replace(tree, {
enter: function (node) {
// Replace it with replaced.
if (node.type === 'Literal')
return replaced;
}
});
Copyright (C) 2012-2013 Yusuke Suzuki (twitter: @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 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.
FAQs
ECMAScript JS AST traversal functions
The npm package estraverse receives a total of 54,956,788 weekly downloads. As such, estraverse popularity was classified as popular.
We found that estraverse demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 3 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
ESLint has added JSON and Markdown linting support with new officially-supported plugins, expanding its versatility beyond JavaScript.
Security News
Members Hub is conducting large-scale campaigns to artificially boost Discord server metrics, undermining community trust and platform integrity.
Security News
NIST has failed to meet its self-imposed deadline of clearing the NVD's backlog by the end of the fiscal year. Meanwhile, CVE's awaiting analysis have increased by 33% since June.