From 2390485853aa4604970fc4aca8b802f71487a9d5 Mon Sep 17 00:00:00 2001 From: Oleg Gaidarenko Date: Fri, 13 May 2016 23:02:14 +0300 Subject: [PATCH] disallowQuotedKeysInObjects: ignore spread properties Fixes #2249 --- lib/rules/disallow-quoted-keys-in-objects.js | 40 ++++++++++++------- .../rules/disallow-quoted-keys-in-objects.js | 6 ++- 2 files changed, 31 insertions(+), 15 deletions(-) diff --git a/lib/rules/disallow-quoted-keys-in-objects.js b/lib/rules/disallow-quoted-keys-in-objects.js index b58e826e8..916060ab6 100644 --- a/lib/rules/disallow-quoted-keys-in-objects.js +++ b/lib/rules/disallow-quoted-keys-in-objects.js @@ -69,26 +69,38 @@ module.exports.prototype = { file.iterateNodesByType('ObjectExpression', function(node) { node.properties.forEach(function(prop) { var key = prop.key; - if (key.type === 'StringLiteral' && - typeof key.value === 'string' && - KEY_NAME_RE.test(key.value) - ) { - if (exceptReserved && reservedWords.check(key.value, file.getDialect(), true)) { - return; - } - - errors.cast({ - message: 'Extra quotes for key', - element: prop, - additional: prop - }); + + // Spread properties + if (!key) { + return; + } + + if (key.type !== 'StringLiteral') { + return; + } + + if (typeof key.value !== 'string') { + return; } + + if (!KEY_NAME_RE.test(key.value)) { + return; + } + + if (exceptReserved && reservedWords.check(key.value, file.getDialect(), true)) { + return; + } + + errors.cast({ + message: 'Extra quotes for key', + element: prop + }); }); }); }, _fix: function(file, error) { - var node = error.additional; + var node = error.element; var key = node.key.childElements[0]; var newKey = new cst.Token(key.type, key.getSourceCode().slice(1, -1)); diff --git a/test/specs/rules/disallow-quoted-keys-in-objects.js b/test/specs/rules/disallow-quoted-keys-in-objects.js index d93f7e59b..f3d26da5f 100644 --- a/test/specs/rules/disallow-quoted-keys-in-objects.js +++ b/test/specs/rules/disallow-quoted-keys-in-objects.js @@ -3,7 +3,7 @@ var expect = require('chai').expect; var Checker = require('../../../lib/checker'); var reportAndFix = require('../../lib/assertHelpers').reportAndFix; -describe('rules/disallow-quoted-keys-in-objects', function() { +describe.only('rules/disallow-quoted-keys-in-objects', function() { var checker; var config = { disallowQuotedKeysInObjects: true }; @@ -68,6 +68,10 @@ describe('rules/disallow-quoted-keys-in-objects', function() { it('should check all keys in object', function() { expect(checker.checkString('var x = { "a": 1, b: 2, "3": 3 }')).to.have.error.count.equal(2); }); + + it('ignores spread properties', function() { + expect(checker.checkString('({ ...test })')).to.have.no.errors(); + }); }); describe('with allExcept: ["reserved"]', function() {