[Pkg-javascript-commits] [node-ast-types] 01/03: New upstream version 0.9.1
Julien Puydt
julien.puydt at laposte.net
Mon Nov 7 22:38:21 UTC 2016
This is an automated email from the git hooks/post-receive script.
jpuydt-guest pushed a commit to branch master
in repository node-ast-types.
commit cefdb3a9d1675d6f08c1f9ef7a839faadf9160c5
Author: Julien Puydt <julien.puydt at laposte.net>
Date: Mon Nov 7 23:35:55 2016 +0100
New upstream version 0.9.1
---
def/babel6.js | 134 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
def/flow.js | 39 +++++++++++++----
lib/scope.js | 5 ++-
lib/types.js | 2 +-
main.js | 5 ++-
package.json | 5 ++-
test/run.js | 43 +++++++++++++++++++
7 files changed, 218 insertions(+), 15 deletions(-)
diff --git a/def/babel6.js b/def/babel6.js
new file mode 100644
index 0000000..dbca165
--- /dev/null
+++ b/def/babel6.js
@@ -0,0 +1,134 @@
+module.exports = function (fork) {
+ fork.use(require("./babel"));
+ fork.use(require("./flow"));
+
+ // var types = fork.types;
+ var types = fork.use(require("../lib/types"));
+ // var defaults = fork.shared.defaults;
+ var defaults = fork.use(require("../lib/shared")).defaults;
+ var def = types.Type.def;
+ var or = types.Type.or;
+
+ def("Directive")
+ .bases("Node")
+ .build("value")
+ .field("value", def("DirectiveLiteral"));
+
+ def("DirectiveLiteral")
+ .bases("Node", "Expression")
+ .build("value")
+ .field("value", String, defaults["use strict"]);
+
+ def("BlockStatement")
+ .bases("Statement")
+ .build("body")
+ .field("body", [def("Statement")])
+ .field("directives", [def("Directive")], defaults.emptyArray);
+
+ def("Program")
+ .bases("Node")
+ .build("body")
+ .field("body", [def("Statement")])
+ .field("directives", [def("Directive")], defaults.emptyArray);
+
+ // Split Literal
+ def("StringLiteral")
+ .bases("Literal")
+ .build("value")
+ .field("value", String);
+
+ def("NumericLiteral")
+ .bases("Literal")
+ .build("value")
+ .field("value", Number);
+
+ def("NullLiteral")
+ .bases("Literal")
+ .build();
+
+ def("BooleanLiteral")
+ .bases("Literal")
+ .build("value")
+ .field("value", Boolean);
+
+ def("RegExpLiteral")
+ .bases("Literal")
+ .build("pattern", "flags")
+ .field("pattern", String)
+ .field("flags", String);
+
+ // Split Property -> ObjectProperty and ObjectMethod
+ def("ObjectExpression")
+ .bases("Expression")
+ .build("properties")
+ .field("properties", [or(def("Property"), def("ObjectMethod"), def("ObjectProperty"), def("SpreadProperty"))]);
+
+ // ObjectMethod hoist .value properties to own properties
+ def("ObjectMethod")
+ .bases("Node", "Function")
+ .build("kind", "key", "params", "body", "computed")
+ .field("kind", or("method", "get", "set"))
+ .field("key", or(def("Literal"), def("Identifier"), def("Expression")))
+ .field("params", [def("Pattern")])
+ .field("body", def("BlockStatement"))
+ .field("computed", Boolean, defaults["false"])
+ .field("generator", Boolean, defaults["false"])
+ .field("async", Boolean, defaults["false"])
+ .field("decorators",
+ or([def("Decorator")], null),
+ defaults["null"]);
+
+ def("ObjectProperty")
+ .bases("Node")
+ .build("key", "value")
+ .field("key", or(def("Literal"), def("Identifier"), def("Expression")))
+ .field("value", or(def("Expression"), def("Pattern")))
+ .field("computed", Boolean, defaults["false"]);
+
+ // MethodDefinition -> ClassMethod
+ def("ClassBody")
+ .bases("Declaration")
+ .build("body")
+ .field("body", [or(def("ClassMethod"), def("ClassProperty"))]);
+
+ def("ClassMethod")
+ .bases("Declaration", "Function")
+ .build("kind", "key", "params", "body", "computed", "static")
+ .field("kind", or("get", "set", "method", "constructor"))
+ .field("key", or(def("Literal"), def("Identifier"), def("Expression")))
+ .field("params", [def("Pattern")])
+ .field("body", def("BlockStatement"))
+ .field("computed", Boolean, defaults["false"])
+ .field("static", Boolean, defaults["false"])
+ .field("generator", Boolean, defaults["false"])
+ .field("async", Boolean, defaults["false"])
+ .field("decorators",
+ or([def("Decorator")], null),
+ defaults["null"]);
+
+ // Split into RestProperty and SpreadProperty
+ def("ObjectPattern")
+ .bases("Pattern")
+ .build("properties")
+ .field("properties", [or(def("Property"), def("RestProperty"), def("ObjectProperty"))])
+ .field("decorators", [def("Decorator")]);
+
+ def("SpreadProperty")
+ .bases("Node")
+ .build("argument")
+ .field("argument", def("Expression"));
+
+ def("RestProperty")
+ .bases("Node")
+ .build("argument")
+ .field("argument", def("Expression"));
+
+ def("ForAwaitStatement")
+ .bases("Statement")
+ .build("left", "right", "body")
+ .field("left", or(
+ def("VariableDeclaration"),
+ def("Expression")))
+ .field("right", def("Expression"))
+ .field("body", def("Statement"));
+};
diff --git a/def/flow.js b/def/flow.js
index 513322f..91dabc6 100644
--- a/def/flow.js
+++ b/def/flow.js
@@ -13,6 +13,10 @@ module.exports = function (fork) {
.bases("Type")
.build();
+ def("EmptyTypeAnnotation")
+ .bases("Type")
+ .build();
+
def("MixedTypeAnnotation")
.bases("Type")
.build();
@@ -68,7 +72,7 @@ module.exports = function (fork) {
def("NullTypeAnnotation")
.bases("Type")
.build();
-
+
def("ThisTypeAnnotation")
.bases("Type")
.build();
@@ -76,7 +80,11 @@ module.exports = function (fork) {
def("ExistsTypeAnnotation")
.bases("Type")
.build();
-
+
+ def("ExistentialTypeParam")
+ .bases("Type")
+ .build();
+
def("FunctionTypeAnnotation")
.bases("Type")
.build("params", "returnType", "rest", "typeParameters")
@@ -104,21 +112,28 @@ module.exports = function (fork) {
.field("indexers", [def("ObjectTypeIndexer")], defaults.emptyArray)
.field("callProperties",
[def("ObjectTypeCallProperty")],
- defaults.emptyArray);
+ defaults.emptyArray)
+ .field("exact", Boolean, defaults["false"]);
def("ObjectTypeProperty")
.bases("Node")
.build("key", "value", "optional")
.field("key", or(def("Literal"), def("Identifier")))
.field("value", def("Type"))
- .field("optional", Boolean);
+ .field("optional", Boolean)
+ .field("variance",
+ or("plus", "minus", null),
+ defaults["null"]);
def("ObjectTypeIndexer")
.bases("Node")
.build("id", "key", "value")
.field("id", def("Identifier"))
.field("key", def("Type"))
- .field("value", def("Type"));
+ .field("value", def("Type"))
+ .field("variance",
+ or("plus", "minus", null),
+ defaults["null"]);
def("ObjectTypeCallProperty")
.bases("Node")
@@ -186,7 +201,7 @@ module.exports = function (fork) {
.field("bound",
or(def("TypeAnnotation"), null),
defaults["null"]);
-
+
def("Function")
.field("returnType",
or(def("TypeAnnotation"), null),
@@ -199,7 +214,10 @@ module.exports = function (fork) {
.build("key", "value", "typeAnnotation", "static")
.field("value", or(def("Expression"), null))
.field("typeAnnotation", or(def("TypeAnnotation"), null))
- .field("static", Boolean, defaults["false"]);
+ .field("static", Boolean, defaults["false"])
+ .field("variance",
+ or("plus", "minus", null),
+ defaults["null"]);
def("ClassImplements")
.field("typeParameters",
@@ -268,6 +286,11 @@ module.exports = function (fork) {
.field("id", or(def("Identifier"), def("Literal")))
.field("body", def("BlockStatement"));
+ def("DeclareModuleExports")
+ .bases("Statement")
+ .build("typeAnnotation")
+ .field("typeAnnotation", def("Type"));
+
def("DeclareExportDeclaration")
.bases("Declaration")
.build("default", "declaration", "specifiers", "source")
@@ -287,4 +310,4 @@ module.exports = function (fork) {
def("Literal"),
null
), defaults["null"]);
-};
\ No newline at end of file
+};
diff --git a/lib/scope.js b/lib/scope.js
index 1f98fb4..52b7331 100644
--- a/lib/scope.js
+++ b/lib/scope.js
@@ -231,7 +231,8 @@ module.exports = function (fork) {
if (!node || Expression.check(node)) {
// Ignore falsy values and Expressions.
- } else if (namedTypes.FunctionDeclaration.check(node)) {
+ } else if (namedTypes.FunctionDeclaration.check(node) &&
+ node.id !== null) {
addPattern(path.get("id"), bindings);
} else if (namedTypes.ClassDeclaration &&
@@ -345,6 +346,6 @@ module.exports = function (fork) {
scope = scope.parent;
return scope;
};
-
+
return Scope;
};
diff --git a/lib/types.js b/lib/types.js
index 927cba4..8d5ff3b 100644
--- a/lib/types.js
+++ b/lib/types.js
@@ -681,7 +681,7 @@ module.exports = function () {
}
}
- return object[fieldName];
+ return object && object[fieldName];
}
exports.getFieldValue = getFieldValue;
diff --git a/main.js b/main.js
index 571a15c..c59b665 100644
--- a/main.js
+++ b/main.js
@@ -12,5 +12,6 @@ module.exports = require('./fork')([
require("./def/jsx"),
require("./def/flow"),
require("./def/esprima"),
- require("./def/babel")
-]);
\ No newline at end of file
+ require("./def/babel"),
+ require("./def/babel6")
+]);
diff --git a/package.json b/package.json
index d1600ef..a557fce 100644
--- a/package.json
+++ b/package.json
@@ -18,7 +18,7 @@
"transformation",
"syntax"
],
- "version": "0.9.0",
+ "version": "0.9.1",
"homepage": "http://github.com/benjamn/ast-types",
"repository": {
"type": "git",
@@ -32,9 +32,10 @@
"dependencies": {},
"devDependencies": {
"babel-core": "^5.6.15",
+ "espree": "^3.1.7",
"esprima": "~1.2.2",
"esprima-fb": "~14001.1.0-dev-harmony-fb",
- "mocha": "~2.5.3"
+ "mocha": "~3.1.1"
},
"engines": {
"node": ">= 0.8"
diff --git a/test/run.js b/test/run.js
index 8590758..8fc3335 100644
--- a/test/run.js
+++ b/test/run.js
@@ -311,6 +311,13 @@ describe("types.getFieldValue", function() {
[]
);
});
+
+ it("should handle undefined objects", function() {
+ assert.equal(
+ types.getFieldValue(undefined, "name"),
+ undefined
+ );
+ });
});
describe("types.eachField", function() {
@@ -1118,6 +1125,29 @@ describe("scope methods", function () {
assert.deepEqual(names, ["x", "xyDefault", "xyNamespace", "z"]);
});
+ it("should work for ES6 syntax (espree)", function() {
+ var names;
+
+ var ast = require("espree").parse([
+ "var zap;",
+ "export default function(zom) {",
+ " var innerFn = function(zip) {};",
+ " return innerFn(zom);",
+ "};"
+ ].join("\n"), {
+ sourceType: "module",
+ ecmaVersion: 6
+ });
+
+ types.visit(ast, {
+ visitFunctionDeclaration: function(path) {
+ names = Object.keys(path.scope.lookup("zap").getBindings()).sort();
+ assert.deepEqual(names, ["zap"]);
+ this.traverse(path);
+ }
+ });
+ });
+
it("should inject temporary into current scope", function() {
var ast = parse(scope.join("\n"));
var bindings;
@@ -1264,6 +1294,11 @@ describe("array and object pattern scope", function() {
// ObjectPattern with Property and SpreadProperty
// ArrayPattern with SpreadElement
describe("esprima", function() {
+ var types = require('../fork')([
+ require("../def/esprima")
+ ]);
+ var b = types.builders;
+
var objectPattern;
var arrayPattern;
@@ -1321,6 +1356,14 @@ describe("array and object pattern scope", function() {
// ObjectPattern with PropertyPattern and SpreadPropertyPattern
// ArrayPatterhn with SpreadElementPattern
describe("Mozilla Parser API", function() {
+ var types = require('../fork')([
+ require("../def/core"),
+ require("../def/es6"),
+ require("../def/es7"),
+ require("../def/mozilla"),
+ ]);
+ var b = types.builders;
+
var objectPattern;
var arrayPattern;
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/node-ast-types.git
More information about the Pkg-javascript-commits
mailing list