da46e23e5529f4565dcff68ede102892a46e194c
[platform/framework/web/crosswalk-tizen.git] /
1 /**
2  * @fileoverview Rule to check empty newline after "var" statement
3  * @author Gopal Venkatesan
4  * @copyright 2015 Gopal Venkatesan. All rights reserved.
5  */
6
7 "use strict";
8
9 //------------------------------------------------------------------------------
10 // Rule Definition
11 //------------------------------------------------------------------------------
12
13 module.exports = function(context) {
14     var mode = context.options[0],
15         validator;              // regex to validate the rule
16
17     if (mode === "never") {
18         validator = /\S(?:\r?\n)?\S/;
19     } else {                    // assume mode === "always"
20         validator = /\S(?:\r?\n){2,}\S?/;
21         mode = "always";
22     }
23
24     return {
25         "VariableDeclaration:exit": function(node) {
26             var lastToken = context.getLastToken(node),
27                 nextToken = context.getTokenAfter(node),
28                 // peek few characters beyond the last token (typically the semi-colon)
29                 sourceLines = context.getSource(lastToken, 0, 3);
30
31             // Some coding styles like Google uses multiple `var` statements.
32             // So if the next token is a `var` statement don't do anything.
33             if (nextToken && nextToken.type === "Keyword" &&
34                 (nextToken.value === "var" || nextToken.value === "let" || nextToken.value === "const")) {
35                 return;
36             }
37
38             // Next statement is not a `var`
39             if (sourceLines && !sourceLines.match(validator)) {
40                 context.report(node, "Newline is " + mode + " expected after a \"var\" statement.",
41                                { identifier: node.name });
42             }
43         }
44     };
45 };