From 3237e6947c23d5269e04443c41d33f748b36ae54 Mon Sep 17 00:00:00 2001 From: Klaus Meinhardt Date: Mon, 7 Aug 2017 23:50:32 +0200 Subject: [PATCH] prefer-object-spread: add parens in shorthand arrow function (#3026) --- src/rules/preferObjectSpreadRule.ts | 5 +++-- test/rules/prefer-object-spread/test.ts.fix | 2 ++ test/rules/prefer-object-spread/test.ts.lint | 4 +++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/rules/preferObjectSpreadRule.ts b/src/rules/preferObjectSpreadRule.ts index 917063cc9e2..5bcaa7b0ee6 100644 --- a/src/rules/preferObjectSpreadRule.ts +++ b/src/rules/preferObjectSpreadRule.ts @@ -65,9 +65,10 @@ function walk(ctx: Lint.WalkContext) { function createFix(node: ts.CallExpression, sourceFile: ts.SourceFile): Lint.Fix { const args = node.arguments; + const objectNeedsParens = node.parent!.kind === ts.SyntaxKind.ArrowFunction; const fix = [ - Lint.Replacement.replaceFromTo(node.getStart(sourceFile), args[0].getStart(sourceFile), "{"), - new Lint.Replacement(node.end - 1, 1, "}"), + Lint.Replacement.replaceFromTo(node.getStart(sourceFile), args[0].getStart(sourceFile), `${objectNeedsParens ? "(" : ""}{`), + new Lint.Replacement(node.end - 1, 1, `}${objectNeedsParens ? ")" : ""}`), ]; for (let i = 0; i < args.length; ++i) { const arg = args[i]; diff --git a/test/rules/prefer-object-spread/test.ts.fix b/test/rules/prefer-object-spread/test.ts.fix index 324bf2cb634..a7c870277e3 100644 --- a/test/rules/prefer-object-spread/test.ts.fix +++ b/test/rules/prefer-object-spread/test.ts.fix @@ -23,3 +23,5 @@ result = Object.assign(new Foo(), {}); result = Object.assign(createFoo(), {}); result = Object.assign(function() {}, {}); result = Object.assign(() => {}, {}); + +let fn = () => ({...original}); diff --git a/test/rules/prefer-object-spread/test.ts.lint b/test/rules/prefer-object-spread/test.ts.lint index 0786e1fefcf..a11c62ad914 100644 --- a/test/rules/prefer-object-spread/test.ts.lint +++ b/test/rules/prefer-object-spread/test.ts.lint @@ -37,5 +37,7 @@ result = Object.assign(createFoo(), {}); result = Object.assign(function() {}, {}); result = Object.assign(() => {}, {}); +let fn = () => Object.assign({}, original); + ~~~~~~~~~~~~~~~~~~~~~~~~~~~ [0] [0]: Use the object spread operator instead. -[1]: 'Object.assign' returns the first argument. Prefer object spread if you want a new object. \ No newline at end of file +[1]: 'Object.assign' returns the first argument. Prefer object spread if you want a new object.