Socket
Socket
Sign inDemoInstall

ast-types

Package Overview
Dependencies
11
Maintainers
1
Versions
172
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.2.15 to 0.2.16

lib/traverse.js

27

def/core.js

@@ -113,12 +113,20 @@ var types = require("../lib/types");

.bases("Statement")
.build("block", "handlers", "finalizer")
.build("block", "handler", "finalizer")
.field("block", def("BlockStatement"))
// The Mozilla Parser API calls for the commented-out fields below,
// but Esprima behaves the other way. TODO Report this.
// .field("handler", or(def("CatchClause"), null))
// .field("guardedHandlers", [def("CatchClause")])
.field("handlers", [def("CatchClause")])
.field("handler", or(def("CatchClause"), null), function() {
return this.handlers && this.handlers[0] || null;
})
.field("handlers", [def("CatchClause")], function() {
return this.handler ? [this.handler] : [];
}, true) // Indicates this field is hidden from eachField iteration.
.field("guardedHandlers", [def("CatchClause")], defaults.emptyArray)
.field("finalizer", or(def("BlockStatement"), null), defaults.null);
def("CatchClause")
.bases("Node")
.build("param", "guard", "body")
.field("param", def("Pattern"))
.field("guard", or(def("Expression"), null), defaults.null)
.field("body", def("BlockStatement"));
def("WhileStatement")

@@ -328,9 +336,2 @@ .bases("Statement")

def("CatchClause")
.bases("Node")
.build("param", "guard", "body")
.field("param", def("Pattern"))
.field("guard", or(def("Expression"), null), defaults.null)
.field("body", def("BlockStatement"));
def("Identifier")

@@ -337,0 +338,0 @@ // But aren't Expressions and Patterns already Nodes? TODO Report this.

@@ -203,3 +203,3 @@ var assert = require("assert");

function Field(name, type, defaultFn) {
function Field(name, type, defaultFn, hidden) {
var self = this;

@@ -214,3 +214,4 @@

name: { value: name },
type: { value: type }
type: { value: type },
hidden: { value: !!hidden }
};

@@ -496,5 +497,5 @@

// any number of arguments to specify the field.
Dp.field = function(name, type, defaultFn) {
Dp.field = function(name, type, defaultFn, hidden) {
assert.strictEqual(this.finalized, false);
this.ownFields[name] = new Field(name, type, defaultFn);
this.ownFields[name] = new Field(name, type, defaultFn, hidden);
return this; // For chaining.

@@ -534,3 +535,6 @@ };

Object.keys(all).forEach(function(name) {
callback.call(this, name, all[name].getValue(object));
var field = all[name];
if (!field.hidden) {
callback.call(this, name, field.getValue(object));
}
}, context);

@@ -537,0 +541,0 @@ }

@@ -20,2 +20,3 @@ var types = require("./lib/types");

exports.eachField = types.eachField;
exports.traverse = require("./lib/traverse");
exports.finalize = types.finalize;

@@ -21,3 +21,3 @@ {

],
"version": "0.2.15",
"version": "0.2.16",
"homepage": "http://github.com/benjamn/ast-types",

@@ -24,0 +24,0 @@ "repository": {

@@ -195,2 +195,16 @@ var types = require("../main");

type: "TryStatement",
}, "handler"),
null
);
assert.deepEqual(
types.getFieldValue({
type: "TryStatement",
}, "handlers"),
[]
);
assert.deepEqual(
types.getFieldValue({
type: "TryStatement",
}, "guardedHandlers"),

@@ -236,3 +250,4 @@ []

check({ type: "TryStatement" }, [
"type", "block", "handlers", "guardedHandlers", "finalizer", "loc"
// Note that the "handlers" field is now hidden from eachField.
"type", "block", "handler", "guardedHandlers", "finalizer", "loc"
]);

@@ -248,1 +263,43 @@

};
exports.testTraverse = function(t, assert) {
var traverse = types.traverse;
var call = b.expressionStatement(
b.callExpression(
b.memberExpression(
b.identifier("foo"),
b.identifier("bar"),
false
),
[b.literal("baz")]
)
);
var ts = b.tryStatement(
b.blockStatement([call, call]),
b.catchClause(
b.identifier("err"),
null,
b.blockStatement([])
)
);
var literalCount = 0;
traverse(ts, function(node) {
if (n.Literal.check(node)) {
literalCount += 1;
assert.strictEqual(node.value, "baz");
assert.strictEqual(this.parent.node, call.expression);
assert.strictEqual(this.parent.parent.node, call);
assert.strictEqual(this.parent.parent.parent.node, ts.block);
assert.strictEqual(this.parent.parent.parent.parent.node, ts);
assert.strictEqual(this.parent.parent.parent.parent.parent, null);
}
});
assert.strictEqual(literalCount, 2);
t.finish();
};
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc