UNPKG

@coffeelint/cli

Version:
81 lines (70 loc) 2.68 kB
(function() { var NewlinesAfterClasses; module.exports = NewlinesAfterClasses = (function() { class NewlinesAfterClasses { lintToken(token, tokenApi) { var afters, comment, ending, got, lineNumber, lines, numIndents, outdent, ref, ref1, start, trueLine, type; [ type, numIndents, { first_line: lineNumber } ] = token; ({lines} = tokenApi); ending = tokenApi.config[this.rule.name].value; if (type === 'CLASS') { this.classCount++; } if (this.classCount > 0 && (token.generated != null)) { if (type === '{' && ((ref = token.origin) != null ? ref[0] : void 0) === ':') { this.classBracesCount++; } if (type === '}' && ((ref1 = token.origin) != null ? ref1[0] : void 0) === 'OUTDENT') { this.classBracesCount--; this.classCount--; if (this.classCount === 0 && this.classBracesCount === 0) { afters = 1; comment = 0; outdent = token.origin[2].first_line; start = Math.min(lineNumber, outdent); trueLine = start + 1; while (/^\s*(#|$)/.test(lines[start + afters])) { if (/^\s*#/.test(lines[start + afters])) { comment += 1; } afters += 1; } // add up blank lines, subtract comments, subtract 2 because // before/after counters started at 1. got = afters - comment - 1; // if `got` and `ending` don't match throw an error _unless_ // we are at the end of the file. if (got !== ending && trueLine + got !== lines.length) { return { context: `Expected ${ending} got ${got}`, lineNumber: trueLine }; } } } } } }; NewlinesAfterClasses.prototype.rule = { type: 'style', name: 'newlines_after_classes', value: 3, level: 'ignore', message: 'Wrong count of blank lines between a class and other code', description: `<p>Checks the number of blank lines between classes and other code.</p> Options: - <pre><code>value</code></pre> - The number of required blank lines after class definitions. Defaults to 3.` }; NewlinesAfterClasses.prototype.tokens = ['CLASS', '}', '{']; NewlinesAfterClasses.prototype.classBracesCount = 0; NewlinesAfterClasses.prototype.classCount = 0; return NewlinesAfterClasses; }).call(this); }).call(this);