Skip to content

Commit

Permalink
Add comma spacing rule
Browse files Browse the repository at this point in the history
  • Loading branch information
vesln committed Nov 3, 2013
1 parent 3675b1e commit 0e317cf
Show file tree
Hide file tree
Showing 8 changed files with 103 additions and 1 deletion.
60 changes: 60 additions & 0 deletions lib/stylec/rule/comma-spacing.js
@@ -0,0 +1,60 @@
/**
* Internal dependencies.
*/

var Rule = require('../rule');

var Comma = Rule.create({
error: 'Bad comma spacing',

option: {
key: 'commaspace',
type: 'enum',
values: ['after', 'before', 'surround'],
defaults: 'off'
},

on: {
Punctuator: 'check',
},
});

/**
* Perform the check.
*
* @param {Object} token
* @api public
*/

Comma.prototype.check = function(token) {
if (token.value !== ',') return;

var range = [token.range[0] - 1, token.range[1] + 1];
var str = this.source.range(range);
var error = false;
var test = function(char) {
return /\s/.test(char);
};

switch (this.option()) {
case 'after':
if (!test(str[2]) || test(str[0])) error = true;
break;
case 'before':
if (!test(str[0]) || test(str[2])) error = true;
break;
case 'surround':
if (!test(str[0]) || !test(str[2])) error = true;
break;
}

if (error) {
this.badToken(token);
}
};

/**
* Primary export.
*/

module.exports = Comma;
2 changes: 1 addition & 1 deletion test/cases/array-trailing-comma/prohibited.js
@@ -1,4 +1,4 @@
/* stylec arrcomma: prohibited */
/* stylec arrcomma: prohibited, commaspace: off */

var good = [
1,
Expand Down
8 changes: 8 additions & 0 deletions test/cases/comma-spacing/after.js
@@ -0,0 +1,8 @@
/* stylec commaspace: after */

var good = (1, 2, 3);
var good = [1, 2, 3];
var good, verygood, awesome;

var bad = [1 ,2 ,3];
var bad ,boo ,bar = null;
6 changes: 6 additions & 0 deletions test/cases/comma-spacing/after.result.js
@@ -0,0 +1,6 @@
module.exports = [
{ line: 7, column: 13 },
{ line: 7, column: 16 },
{ line: 8, column: 8 },
{ line: 8, column: 13 },
];
8 changes: 8 additions & 0 deletions test/cases/comma-spacing/before.js
@@ -0,0 +1,8 @@
/* stylec commaspace: before */

var good = (1 ,2 ,3);
var good = [1 ,2 ,3];
var good ,verygood ,awesome;

var bad = [1, 2, 3];
var bad, boo, bar = null;
6 changes: 6 additions & 0 deletions test/cases/comma-spacing/before.result.js
@@ -0,0 +1,6 @@
module.exports = [
{ line: 7, column: 12 },
{ line: 7, column: 15 },
{ line: 8, column: 7 },
{ line: 8, column: 12 },
];
8 changes: 8 additions & 0 deletions test/cases/comma-spacing/surround.js
@@ -0,0 +1,8 @@
/* stylec commaspace: surround */

var good = (1 , 2 , 3);
var good = [1 , 2 , 3];
var good , verygood , awesome;

var bad = [1, 2, 3];
var bad, boo, bar = null;
6 changes: 6 additions & 0 deletions test/cases/comma-spacing/surround.result.js
@@ -0,0 +1,6 @@
module.exports = [
{ line: 7, column: 12 },
{ line: 7, column: 15 },
{ line: 8, column: 7 },
{ line: 8, column: 12 },
];

0 comments on commit 0e317cf

Please sign in to comment.