/** * @fileoverview Disallows multiple blank lines. * implementation adapted from the no-trailing-spaces rule. * @author Greg Cochard * @copyright 2014 Greg Cochard. All rights reserved. */ "use strict"; //------------------------------------------------------------------------------ // Rule Definition //------------------------------------------------------------------------------ module.exports = function(context) { // Use options.max or 2 as default var numLines = 2; if (context.options.length) { numLines = context.options[0].max; } //-------------------------------------------------------------------------- // Public //-------------------------------------------------------------------------- return { "Program": function checkBlankLines(node) { var lines = context.getSourceLines(), currentLocation = -1, lastLocation, blankCounter = 0, location, trimmedLines = lines.map(function(str) { return str.trim(); }); // Aggregate and count blank lines do { lastLocation = currentLocation; currentLocation = trimmedLines.indexOf("", currentLocation + 1); if (lastLocation === currentLocation - 1) { blankCounter++; } else { if (blankCounter >= numLines) { location = { line: lastLocation + 1, column: lines[lastLocation].length }; context.report(node, location, "Multiple blank lines not allowed."); } // Finally, reset the blank counter blankCounter = 0; } } while (currentLocation !== -1); } }; };