[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