From 1d6e63930073e79e52890f552cc6e9a0646b7fb4 Mon Sep 17 00:00:00 2001 From: Krist Wongsuphasawat Date: Mon, 18 Feb 2019 09:03:18 -0800 Subject: [PATCH] Fix: sort-keys throws Error at SpreadElement (fixes #11402) (#11403) * Fix: sort-keys throws Error at SpreadElement (fixes #11402) * Fix: Add unit test * Fix: address reviewer's comment --- lib/rules/sort-keys.js | 6 ++++-- tests/lib/rules/sort-keys.js | 4 ++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/rules/sort-keys.js b/lib/rules/sort-keys.js index 08bfcdf3d83..fd5dd8a13bc 100644 --- a/lib/rules/sort-keys.js +++ b/lib/rules/sort-keys.js @@ -129,8 +129,10 @@ module.exports = { stack = stack.upper; }, - SpreadElement() { - stack.prevName = null; + SpreadElement(node) { + if (node.parent.type === "ObjectExpression") { + stack.prevName = null; + } }, Property(node) { diff --git a/tests/lib/rules/sort-keys.js b/tests/lib/rules/sort-keys.js index 3106d31460b..1ae091fad5b 100644 --- a/tests/lib/rules/sort-keys.js +++ b/tests/lib/rules/sort-keys.js @@ -46,6 +46,10 @@ ruleTester.run("sort-keys", rule, { { code: "var obj = {a:1, b:1, ...z}", options: [], parserOptions: { ecmaVersion: 2018 } }, { code: "var obj = {...z, ...x, a:1, ...c, ...d, f:5, e:4}", options: ["desc"], parserOptions: { ecmaVersion: 2018 } }, + // works when spread occurs somewhere other than an object literal + { code: "function fn(...args) { return [...args].length; }", options: [], parserOptions: { ecmaVersion: 2018 } }, + { code: "function g() {}; function f(...args) { return g(...args); }", options: [], parserOptions: { ecmaVersion: 2018 } }, + // ignore destructuring patterns. { code: "let {a, b} = {}", options: [], parserOptions: { ecmaVersion: 6 } },