You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							89 lines
						
					
					
						
							2.7 KiB
						
					
					
				
			
		
		
	
	
							89 lines
						
					
					
						
							2.7 KiB
						
					
					
				/** | 
						|
 * @fileoverview Rule to check multiple var declarations per line | 
						|
 * @author Alberto Rodríguez | 
						|
 */ | 
						|
"use strict"; | 
						|
 | 
						|
//------------------------------------------------------------------------------ | 
						|
// Rule Definition | 
						|
//------------------------------------------------------------------------------ | 
						|
 | 
						|
module.exports = { | 
						|
    meta: { | 
						|
        type: "suggestion", | 
						|
 | 
						|
        docs: { | 
						|
            description: "require or disallow newlines around variable declarations", | 
						|
            category: "Stylistic Issues", | 
						|
            recommended: false, | 
						|
            url: "https://eslint.org/docs/rules/one-var-declaration-per-line" | 
						|
        }, | 
						|
 | 
						|
        schema: [ | 
						|
            { | 
						|
                enum: ["always", "initializations"] | 
						|
            } | 
						|
        ], | 
						|
 | 
						|
        fixable: "whitespace" | 
						|
    }, | 
						|
 | 
						|
    create(context) { | 
						|
 | 
						|
        const ERROR_MESSAGE = "Expected variable declaration to be on a new line."; | 
						|
        const always = context.options[0] === "always"; | 
						|
 | 
						|
        //-------------------------------------------------------------------------- | 
						|
        // Helpers | 
						|
        //-------------------------------------------------------------------------- | 
						|
 | 
						|
 | 
						|
        /** | 
						|
         * Determine if provided keyword is a variant of for specifiers | 
						|
         * @private | 
						|
         * @param {string} keyword keyword to test | 
						|
         * @returns {boolean} True if `keyword` is a variant of for specifier | 
						|
         */ | 
						|
        function isForTypeSpecifier(keyword) { | 
						|
            return keyword === "ForStatement" || keyword === "ForInStatement" || keyword === "ForOfStatement"; | 
						|
        } | 
						|
 | 
						|
        /** | 
						|
         * Checks newlines around variable declarations. | 
						|
         * @private | 
						|
         * @param {ASTNode} node `VariableDeclaration` node to test | 
						|
         * @returns {void} | 
						|
         */ | 
						|
        function checkForNewLine(node) { | 
						|
            if (isForTypeSpecifier(node.parent.type)) { | 
						|
                return; | 
						|
            } | 
						|
 | 
						|
            const declarations = node.declarations; | 
						|
            let prev; | 
						|
 | 
						|
            declarations.forEach(current => { | 
						|
                if (prev && prev.loc.end.line === current.loc.start.line) { | 
						|
                    if (always || prev.init || current.init) { | 
						|
                        context.report({ | 
						|
                            node, | 
						|
                            message: ERROR_MESSAGE, | 
						|
                            loc: current.loc.start, | 
						|
                            fix: fixer => fixer.insertTextBefore(current, "\n") | 
						|
                        }); | 
						|
                    } | 
						|
                } | 
						|
                prev = current; | 
						|
            }); | 
						|
        } | 
						|
 | 
						|
        //-------------------------------------------------------------------------- | 
						|
        // Public | 
						|
        //-------------------------------------------------------------------------- | 
						|
 | 
						|
        return { | 
						|
            VariableDeclaration: checkForNewLine | 
						|
        }; | 
						|
 | 
						|
    } | 
						|
};
 | 
						|
 |