jscs
Version:
JavaScript Style Checker
59 lines (47 loc) • 2.03 kB
JavaScript
var assert = require('assert');
module.exports = function() {};
module.exports.prototype = {
configure: function(mode) {
var modes = {
'all': true,
'allButNested': true
};
assert(
typeof mode === 'string' &&
modes[mode],
'requireSpacesInsideObjectBrackets option requires string value \'all\' or \'allButNested\''
);
this._mode = mode;
},
getOptionName: function() {
return 'requireSpacesInsideObjectBrackets';
},
check: function(file, errors) {
var mode = this._mode;
file.iterateNodesByType('ObjectExpression', function(node) {
var tokens = file.getTokens();
var openingBracketPos = file.getTokenPosByRangeStart(node.range[0]);
var openingBracket = tokens[openingBracketPos];
var nextToken = tokens[openingBracketPos + 1];
if (nextToken.type === 'Punctuator' && nextToken.value === '}') {
return;
}
if (openingBracket.range[1] === nextToken.range[0]) {
errors.add('Missing space after opening curly brace', nextToken.loc.start);
}
var closingBracketPos = file.getTokenPosByRangeStart(node.range[1] - 1);
var closingBracket = tokens[closingBracketPos];
var prevToken = tokens[closingBracketPos - 1];
var isNested = mode === 'allButNested' &&
prevToken.type === 'Punctuator' &&
prevToken.value === '}';
if (closingBracket.range[0] === prevToken.range[1]) {
if (!isNested) {
errors.add('Missing space before closing curly brace', closingBracket.loc.start);
}
} else if (isNested && closingBracket.loc.start.line === prevToken.loc.start.line) {
errors.add('Illegal space between closing curly braces', prevToken.loc.end);
}
});
}
};