From 0e317cf480baa90e5672403eea0cc1c73f8dec52 Mon Sep 17 00:00:00 2001 From: Veselin Todorov Date: Sun, 3 Nov 2013 16:57:55 +0200 Subject: [PATCH] Add comma spacing rule --- lib/stylec/rule/comma-spacing.js | 60 +++++++++++++++++++ test/cases/array-trailing-comma/prohibited.js | 2 +- test/cases/comma-spacing/after.js | 8 +++ test/cases/comma-spacing/after.result.js | 6 ++ test/cases/comma-spacing/before.js | 8 +++ test/cases/comma-spacing/before.result.js | 6 ++ test/cases/comma-spacing/surround.js | 8 +++ test/cases/comma-spacing/surround.result.js | 6 ++ 8 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 lib/stylec/rule/comma-spacing.js create mode 100644 test/cases/comma-spacing/after.js create mode 100644 test/cases/comma-spacing/after.result.js create mode 100644 test/cases/comma-spacing/before.js create mode 100644 test/cases/comma-spacing/before.result.js create mode 100644 test/cases/comma-spacing/surround.js create mode 100644 test/cases/comma-spacing/surround.result.js diff --git a/lib/stylec/rule/comma-spacing.js b/lib/stylec/rule/comma-spacing.js new file mode 100644 index 0000000..3b9a533 --- /dev/null +++ b/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; diff --git a/test/cases/array-trailing-comma/prohibited.js b/test/cases/array-trailing-comma/prohibited.js index 3c2081a..a664f05 100644 --- a/test/cases/array-trailing-comma/prohibited.js +++ b/test/cases/array-trailing-comma/prohibited.js @@ -1,4 +1,4 @@ -/* stylec arrcomma: prohibited */ +/* stylec arrcomma: prohibited, commaspace: off */ var good = [ 1, diff --git a/test/cases/comma-spacing/after.js b/test/cases/comma-spacing/after.js new file mode 100644 index 0000000..607525e --- /dev/null +++ b/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; diff --git a/test/cases/comma-spacing/after.result.js b/test/cases/comma-spacing/after.result.js new file mode 100644 index 0000000..ba9fa11 --- /dev/null +++ b/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 }, +]; diff --git a/test/cases/comma-spacing/before.js b/test/cases/comma-spacing/before.js new file mode 100644 index 0000000..c1b4a1b --- /dev/null +++ b/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; diff --git a/test/cases/comma-spacing/before.result.js b/test/cases/comma-spacing/before.result.js new file mode 100644 index 0000000..b2f1346 --- /dev/null +++ b/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 }, +]; diff --git a/test/cases/comma-spacing/surround.js b/test/cases/comma-spacing/surround.js new file mode 100644 index 0000000..9d20591 --- /dev/null +++ b/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; diff --git a/test/cases/comma-spacing/surround.result.js b/test/cases/comma-spacing/surround.result.js new file mode 100644 index 0000000..b2f1346 --- /dev/null +++ b/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 }, +];