docs/checks_namingConvention.js.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>JSDoc: Source: checks/namingConvention.js</title>
<script src="scripts/prettify/prettify.js"> </script>
<script src="scripts/prettify/lang-css.js"> </script>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
</head>
<body>
<div id="main">
<h1 class="page-title">Source: checks/namingConvention.js</h1>
<section>
<article>
<pre class="prettyprint source linenums"><code>'use strict'
// the alphabet, uppers
var upperRe = /[A-Z]+/m
// BEM (http://csswizardry.com/2013/01/mindbemding-getting-your-head-round-bem-syntax/)
var bemRe = /^([$.#{:][${a-z]([-]?[${}a-z0-9]+)*(_{2}[${}a-z0-9]([-]?[${}a-z0-9]+)*)?((_[${}a-z0-9]([-]?[a-z0-9}]+)*){2})*)\b/m
// camelCase or CamelCase
var camelRe = /^[$#.{:]+([a-zA-Z]|[${}])+([a-z]|[${}])+(([.A-Z0-9])+[a-z ]+)+\b/m
/**
* @description check for names-like-this vs namesLikeThis
* or NamesLikeThis vs names_like_this or names-like__this-that
* @param {string} [line] curr line being linted
* @returns {boolean} true if convention wrong, false if not
*/
var namingConvention = function( line ) {
var arr = this.splitAndStrip( ' ', line )
// determine if line should be tested at all
var doWeTestRe = /^[${:]+/m
var badConvention = false
// test a wider range if strict is true
if ( this.config.namingConventionStrict === true ) {
doWeTestRe = /^[$#.{:]+/m
}
// only run checks if on a class, id, or variable
if ( doWeTestRe.test( arr[0] ) && arr[0].indexOf( '::' ) === -1 ) {
// if all lowercase we do nothing, if -, _ or uppercase found we check convention
if ( upperRe.test( arr[0] ) ||
arr[0].indexOf( '-' ) !== -1 ||
arr[0].indexOf( '_' ) !== -1 ) {
// check conventions
// $varName
if ( this.state.conf === 'camelCase' ) {
// if no A-Z present, or - present, or _ present
if ( arr[0].indexOf( '-' ) !== -1 ||
arr[0].indexOf( '_' ) !== -1 ||
!camelRe.test( arr[0] ) ) {
badConvention = true
}
}
// $var_name
else if ( this.state.conf === 'lowercase_underscore' ) {
// if no _ present, or - present, or A-Z present
if ( arr[0].indexOf( '-' ) !== -1 ||
arr[0].indexOf( '_' ) === -1 ||
upperRe.test( arr[0] ) ) {
badConvention = true
}
}
// $var-name
else if ( this.state.conf === 'lowercase-dash' ) {
// if no - present, or _ present, or A-Z present
if ( arr[0].indexOf( '-' ) === -1 ||
arr[0].indexOf( '_' ) !== -1 ||
upperRe.test( arr[0] ) ) {
badConvention = true
}
}
// $var__element
else if ( this.state.conf === 'BEM' ) {
// if A-Z or not following BEM specification
if ( upperRe.test( arr[0] ) || !bemRe.test( arr[0] ) ) {
badConvention = true
}
}
// if not one of the defaults, assume custom regExp
else if ( typeof this.state.conf === 'string' ) {
var conventionRe = new RegExp( this.state.conf, 'm' )
if ( !conventionRe.test( arr[0] ) ) {
badConvention = true
}
}
}
}
if ( badConvention === true ) {
var index = line.indexOf( arr[0] )
this.msg( 'preferred naming convention is ' + this.state.conf, index )
}
return badConvention
}
module.exports = namingConvention
</code></pre>
</article>
</section>
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Global</h3><ul><li><a href="global.html#blocks">blocks</a></li><li><a href="global.html#brackets">brackets</a></li><li><a href="global.html#checkPrefix">checkPrefix</a></li><li><a href="global.html#checkPseudo">checkPseudo</a></li><li><a href="global.html#colons">colons</a></li><li><a href="global.html#colors">colors</a></li><li><a href="global.html#commaSpace">commaSpace</a></li><li><a href="global.html#commentSpace">commentSpace</a></li><li><a href="global.html#config">config</a></li><li><a href="global.html#cssLiteral">cssLiteral</a></li><li><a href="global.html#depthLimit">depthLimit</a></li><li><a href="global.html#done">done</a></li><li><a href="global.html#duplicates">duplicates</a></li><li><a href="global.html#efficient">efficient</a></li><li><a href="global.html#extendPref">extendPref</a></li><li><a href="global.html#getFiles">getFiles</a></li><li><a href="global.html#hashEnd">hashEnd</a></li><li><a href="global.html#hashStart">hashStart</a></li><li><a href="global.html#indentPref">indentPref</a></li><li><a href="global.html#init">init</a></li><li><a href="global.html#keyframesEnd">keyframesEnd</a></li><li><a href="global.html#keyframesStart">keyframesStart</a></li><li><a href="global.html#leadingZero">leadingZero</a></li><li><a href="global.html#lint">lint</a></li><li><a href="global.html#mixed">mixed</a></li><li><a href="global.html#msg">msg</a></li><li><a href="global.html#namingConvention">namingConvention</a></li><li><a href="global.html#noImportant">noImportant</a></li><li><a href="global.html#none">none</a></li><li><a href="global.html#parenSpace">parenSpace</a></li><li><a href="global.html#parse">parse</a></li><li><a href="global.html#placeholders">placeholders</a></li><li><a href="global.html#prefixVarsWithDollar">prefixVarsWithDollar</a></li><li><a href="global.html#quotePref">quotePref</a></li><li><a href="global.html#read">read</a></li><li><a href="global.html#reporter">reporter</a></li><li><a href="global.html#resetOnChange">resetOnChange</a></li><li><a href="global.html#rootEnd">rootEnd</a></li><li><a href="global.html#rootStart">rootStart</a></li><li><a href="global.html#semicolons">semicolons</a></li><li><a href="global.html#setConfig">setConfig</a></li><li><a href="global.html#setContext">setContext</a></li><li><a href="global.html#setState">setState</a></li><li><a href="global.html#sortOrder">sortOrder</a></li><li><a href="global.html#splitAndStrip">splitAndStrip</a></li><li><a href="global.html#stackedProperties">stackedProperties</a></li><li><a href="global.html#startsWithComment">startsWithComment</a></li><li><a href="global.html#state">state</a></li><li><a href="global.html#stylintOff">stylintOff</a></li><li><a href="global.html#stylintOn">stylintOn</a></li><li><a href="global.html#trailingWhitespace">trailingWhitespace</a></li><li><a href="global.html#trimLine">trimLine</a></li><li><a href="global.html#universal">universal</a></li><li><a href="global.html#watch">watch</a></li><li><a href="global.html#zeroUnits">zeroUnits</a></li><li><a href="global.html#zIndexNormalize">zIndexNormalize</a></li></ul>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.2</a> on Sun Oct 09 2016 22:18:45 GMT+0200 (CEST)
</footer>
<script> prettyPrint(); </script>
<script src="scripts/linenumber.js"> </script>
</body>
</html>