UNPKG

1.53 kBJavaScriptView Raw
1/**
2 * @fileoverview Rule to flag assignment in a conditional expression
3 * @author Stephen Murray <spmurrayzzz>
4 */
5"use strict";
6
7//------------------------------------------------------------------------------
8// Rule Definition
9//------------------------------------------------------------------------------
10
11module.exports = function(context) {
12
13 function isParenthesised(node) {
14 var tokens = context.getTokens(node, 1, 1),
15 firstToken = tokens[0],
16 lastToken = tokens[tokens.length - 1];
17
18 return firstToken.value === "(" && firstToken.range[1] <= node.range[0] &&
19 lastToken.value === ")" && lastToken.range[0] >= node.range[1];
20 }
21
22 function isParenthesisedTwice(node) {
23 var tokens = context.getTokens(node, 2, 2),
24 firstToken = tokens[0],
25 lastToken = tokens[tokens.length - 1];
26
27 return isParenthesised(node) &&
28 firstToken.value === "(" && firstToken.range[1] <= node.range[0] &&
29 lastToken.value === ")" && lastToken.range[0] >= node.range[1];
30 }
31
32 function testForAssign(node) {
33 if (node.test && (node.test.type === "AssignmentExpression") && !isParenthesisedTwice(node.test)) {
34 context.report(node, "Expected a conditional expression and instead saw an assignment.");
35 }
36 }
37
38 return {
39 "IfStatement": testForAssign,
40 "WhileStatement": testForAssign,
41 "DoWhileStatement": testForAssign,
42 "ForStatement": testForAssign
43 };
44
45};