44b8b83c4584b58ba36291c92363b1d757b7ba16
[platform/framework/web/crosswalk-tizen.git] /
1 /**
2  * @fileoverview Prevent missing parentheses around multilines JSX
3  * @author Yannick Croissant
4  */
5 'use strict';
6
7 // ------------------------------------------------------------------------------
8 // Rule Definition
9 // ------------------------------------------------------------------------------
10
11 module.exports = function(context) {
12
13   function isParenthesised(node) {
14     var previousToken = context.getTokenBefore(node);
15     var nextToken = context.getTokenAfter(node);
16
17     return previousToken && nextToken &&
18       previousToken.value === '(' && previousToken.range[1] <= node.range[0] &&
19       nextToken.value === ')' && nextToken.range[0] >= node.range[1];
20   }
21
22   function isMultilines(node) {
23     return node.loc.start.line !== node.loc.end.line;
24   }
25
26   function check(node) {
27     if (!node || node.type !== 'JSXElement') {
28       return;
29     }
30
31     if (!isParenthesised(node) && isMultilines(node)) {
32       context.report(node, 'Missing parentheses around multilines JSX');
33     }
34   }
35
36   // --------------------------------------------------------------------------
37   // Public
38   // --------------------------------------------------------------------------
39
40   return {
41
42     VariableDeclarator: function(node) {
43       check(node.init);
44     },
45
46     AssignmentExpression: function(node) {
47       check(node.right);
48     },
49
50     ReturnStatement: function(node) {
51       check(node.argument);
52     }
53   };
54
55 };