From 363723fc84f7b8477592e0105aeb331ec9a017af Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Mon, 14 Aug 2017 05:01:11 +0200 Subject: node_modules --- .../tslint/lib/rules/preferObjectSpreadRule.js | 46 +++++++++++----------- 1 file changed, 22 insertions(+), 24 deletions(-) (limited to 'node_modules/tslint/lib/rules/preferObjectSpreadRule.js') diff --git a/node_modules/tslint/lib/rules/preferObjectSpreadRule.js b/node_modules/tslint/lib/rules/preferObjectSpreadRule.js index f08a648ca..c835ed693 100644 --- a/node_modules/tslint/lib/rules/preferObjectSpreadRule.js +++ b/node_modules/tslint/lib/rules/preferObjectSpreadRule.js @@ -28,40 +28,37 @@ var Rule = (function (_super) { Rule.prototype.apply = function (sourceFile) { return this.applyWithFunction(sourceFile, walk); }; + /* tslint:disable:object-literal-sort-keys */ + Rule.metadata = { + ruleName: "prefer-object-spread", + description: "Enforces the use of the ES2015 object spread operator over `Object.assign()` where appropriate.", + rationale: "Object spread allows for better type checking and inference.", + optionsDescription: "Not configurable.", + options: null, + optionExamples: [true], + type: "functionality", + typescriptOnly: false, + hasFix: true, + }; + /* tslint:enable:object-literal-sort-keys */ + Rule.FAILURE_STRING = "Use the object spread operator instead."; + Rule.ASSIGNMENT_FAILURE_STRING = "'Object.assign' returns the first argument. Prefer object spread if you want a new object."; return Rule; }(Lint.Rules.AbstractRule)); -/* tslint:disable:object-literal-sort-keys */ -Rule.metadata = { - ruleName: "prefer-object-spread", - description: "Enforces the use of the ES2015 object spread operator over `Object.assign()` where appropriate.", - rationale: "Object spread allows for better type checking and inference.", - optionsDescription: "Not configurable.", - options: null, - optionExamples: [true], - type: "functionality", - typescriptOnly: false, - hasFix: true, -}; -/* tslint:enable:object-literal-sort-keys */ -Rule.FAILURE_STRING = "Use the object spread operator instead."; -Rule.ASSIGNMENT_FAILURE_STRING = "'Object.assign' returns the first argument. Prefer object spread if you want a new object."; exports.Rule = Rule; function walk(ctx) { return ts.forEachChild(ctx.sourceFile, function cb(node) { if (tsutils_1.isCallExpression(node) && node.arguments.length !== 0 && tsutils_1.isPropertyAccessExpression(node.expression) && node.expression.name.text === "assign" && tsutils_1.isIdentifier(node.expression.expression) && node.expression.expression.text === "Object" && + !ts.isFunctionLike(node.arguments[0]) && // Object.assign(...someArray) cannot be written as object spread !node.arguments.some(tsutils_1.isSpreadElement)) { if (node.arguments[0].kind === ts.SyntaxKind.ObjectLiteralExpression) { ctx.addFailureAtNode(node, Rule.FAILURE_STRING, createFix(node, ctx.sourceFile)); } - else { - var parent = node.parent; - if (parent.kind === ts.SyntaxKind.VariableDeclaration || - tsutils_1.isBinaryExpression(parent) && parent.operatorToken.kind === ts.SyntaxKind.EqualsToken) { - ctx.addFailureAtNode(node, Rule.ASSIGNMENT_FAILURE_STRING, createFix(node, ctx.sourceFile)); - } + else if (tsutils_1.isExpressionValueUsed(node) && !tsutils_1.hasSideEffects(node.arguments[0], 2 /* Constructor */)) { + ctx.addFailureAtNode(node, Rule.ASSIGNMENT_FAILURE_STRING, createFix(node, ctx.sourceFile)); } } return ts.forEachChild(node, cb); @@ -69,9 +66,10 @@ function walk(ctx) { } function createFix(node, sourceFile) { var args = node.arguments; + var objectNeedsParens = node.parent.kind === ts.SyntaxKind.ArrowFunction; var 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 (var i = 0; i < args.length; ++i) { var arg = args[i]; @@ -81,7 +79,7 @@ function createFix(node, sourceFile) { if (i !== args.length - 1) { end = args[i + 1].getStart(sourceFile); } - else if (args.hasTrailingComma === true) { + else if (args.hasTrailingComma) { end = args.end; } // remove empty object iteral and the following comma if exists -- cgit v1.2.3