From b1cd9a2598526fd9c57c7eeafa3050eee6a8d63a Mon Sep 17 00:00:00 2001 From: vvo Date: Tue, 5 Jan 2016 18:10:46 +0100 Subject: [PATCH] fix(object spread): support experimental object spread As per https://github.com/sebmarkbage/ecmascript-rest-spread This was badly failing previously. Any insights/comments welcomed! --- lib/jsdoc/src/astnode.js | 6 ++++++ test/specs/jsdoc/src/astnode.js | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/lib/jsdoc/src/astnode.js b/lib/jsdoc/src/astnode.js index 37d4bd76..888a2c76 100644 --- a/lib/jsdoc/src/astnode.js +++ b/lib/jsdoc/src/astnode.js @@ -223,6 +223,12 @@ var nodeToValue = exports.nodeToValue = function(node) { case Syntax.ObjectExpression: tempObject = {}; node.properties.forEach(function(prop) { + // ExperimentalSpreadProperty have no key + // like var hello = {...hi}; + if (!prop.key) { + return; + } + var key = prop.key.name; // preserve literal values so that the JSON form shows the correct type if (prop.value.type === Syntax.Literal) { diff --git a/test/specs/jsdoc/src/astnode.js b/test/specs/jsdoc/src/astnode.js index 1d9831ad..fa6a9b23 100644 --- a/test/specs/jsdoc/src/astnode.js +++ b/test/specs/jsdoc/src/astnode.js @@ -42,6 +42,7 @@ describe('jsdoc/src/astNode', function() { var variableDeclaration2 = parse('var foo = 1, bar = 2;').body[0]; var variableDeclarator1 = parse('var foo = 1;').body[0].declarations[0]; var variableDeclarator2 = parse('var foo;').body[0].declarations[0]; + var experimentalObjectRestSpread = parse('var one = {...two, three: 4};').body[0].declarations[0].init; it('should exist', function() { expect(typeof astNode).toBe('object'); @@ -615,5 +616,9 @@ describe('jsdoc/src/astNode', function() { it('should return an empty string for all other nodes', function() { expect( astNode.nodeToValue(binaryExpression) ).toBe(''); }); + + it('should understand and ignore ExperimentalSpreadProperty', function() { + expect( astNode.nodeToValue(experimentalObjectRestSpread) ).toBe('{"three":4}'); + }); }); });