eb3c5d1dc3f059e5886daaef778cf907f3dc54c4
[platform/framework/web/crosswalk-tizen.git] /
1 /**
2  * @fileoverview Rule to flag when IIFE is not wrapped in parens
3  * @author Ilya Volodin
4  * @copyright 2013 Ilya Volodin. All rights reserved.
5  */
6
7 "use strict";
8
9 //------------------------------------------------------------------------------
10 // Rule Definition
11 //------------------------------------------------------------------------------
12
13 module.exports = function(context) {
14
15     var style = context.options[0] || "outside";
16
17     function wrapped(node) {
18         var previousToken = context.getTokenBefore(node),
19             nextToken = context.getTokenAfter(node);
20         return previousToken && previousToken.value === "(" &&
21             nextToken && nextToken.value === ")";
22     }
23
24     return {
25
26         "CallExpression": function(node) {
27             if (node.callee.type === "FunctionExpression") {
28                 var callExpressionWrapped = wrapped(node),
29                     functionExpressionWrapped = wrapped(node.callee);
30
31                 if (!callExpressionWrapped && !functionExpressionWrapped) {
32                     context.report(node, "Wrap an immediate function invocation in parentheses.");
33                 } else if (style === "inside" && !functionExpressionWrapped) {
34                     context.report(node, "Wrap only the function expression in parens.");
35                 } else if (style === "outside" && !callExpressionWrapped) {
36                     context.report(node, "Move the invocation into the parens that contain the function.");
37                 }
38             }
39         }
40     };
41
42 };