From a28aedf1ba351915ec8e212cc41acb874f5ac59f Mon Sep 17 00:00:00 2001 From: Brad Zacher Date: Mon, 8 Jun 2020 21:26:14 -0700 Subject: [PATCH] Fix: handle spreads in rule meta objects --- lib/utils.js | 4 ++++ tests/lib/rules/require-meta-fixable.js | 13 +++++++++++++ tests/lib/utils.js | 11 +++++++++++ 3 files changed, 28 insertions(+) diff --git a/lib/utils.js b/lib/utils.js index 0fd86bd4..40d38b84 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -184,6 +184,10 @@ module.exports = { * @returns {string|null} The key name, or `null` if the name cannot be determined statically. */ getKeyName (property) { + if (!property.key) { + // likely a SpreadElement or another non-standard node + return null; + } if (!property.computed && property.key.type === 'Identifier') { return property.key.name; } diff --git a/tests/lib/rules/require-meta-fixable.js b/tests/lib/rules/require-meta-fixable.js index 5916515b..875e7016 100644 --- a/tests/lib/rules/require-meta-fixable.js +++ b/tests/lib/rules/require-meta-fixable.js @@ -105,6 +105,19 @@ ruleTester.run('require-meta-fixable', rule, { create(context) { context.report(node, message, data, fix); } }; `, + { + code: ` + const meta = {}; + module.exports = { + ...meta, + meta: {}, + create(context) { context.report(node, message, data, fix); } + }; + `, + parserOptions: { + ecmaVersion: 9, + }, + }, ], invalid: [ diff --git a/tests/lib/utils.js b/tests/lib/utils.js index fbe78bfc..c92d9f88 100644 --- a/tests/lib/utils.js +++ b/tests/lib/utils.js @@ -183,6 +183,17 @@ describe('utils', () => { assert.strictEqual(utils.getKeyName(ast.body[0].expression.properties[0]), CASES[objectSource]); }); }); + + const CASES_ES9 = { + '({ ...foo })': null, + }; + Object.keys(CASES_ES9).forEach(objectSource => { + it(objectSource, () => { + const ast = espree.parse(objectSource, { ecmaVersion: 9 }); + + assert.strictEqual(utils.getKeyName(ast.body[0].expression.properties[0]), CASES_ES9[objectSource]); + }); + }); }); describe('getTestInfo', () => {