UNPKG

@coffeelint/cli

Version:
71 lines (60 loc) 2.04 kB
(function() { var CamelCaseClasses, regexes; regexes = { camelCase: /^[A-Z_][a-zA-Z\d]*$/ }; module.exports = CamelCaseClasses = (function() { class CamelCaseClasses { lintToken(token, tokenApi) { var className, offset, ref, ref1, ref2; // TODO: you can do some crazy shit in CoffeeScript, like // class func().ClassName. Don't allow that. // Don't try to lint the names of anonymous classes. if ((token.newLine != null) || ((ref = tokenApi.peek()[0]) === 'INDENT' || ref === 'EXTENDS')) { return null; } // It's common to assign a class to a global namespace, e.g. // exports.MyClassName, so loop through the next tokens until // we find the real identifier. className = null; offset = 1; while (!className) { if (((ref1 = tokenApi.peek(offset + 1)) != null ? ref1[0] : void 0) === '.') { offset += 2; } else if (((ref2 = tokenApi.peek(offset)) != null ? ref2[0] : void 0) === '@') { offset += 1; } else { className = tokenApi.peek(offset)[1]; } } // Now check for the error. if (!regexes.camelCase.test(className)) { return { token, context: `class name: ${className}` }; } } }; CamelCaseClasses.prototype.rule = { type: 'style', name: 'camel_case_classes', level: 'error', message: 'Class name should be UpperCamelCased', description: `This rule mandates that all class names are UpperCamelCased. Camel casing class names is a generally accepted way of distinguishing constructor functions - which require the 'new' prefix to behave properly - from plain old functions. <pre> <code># Good! class BoaConstrictor # Bad! class boaConstrictor </code> </pre> This rule is enabled by default.` }; CamelCaseClasses.prototype.tokens = ['CLASS']; return CamelCaseClasses; }).call(this); }).call(this);