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}'); + }); }); });