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 } },