eslint-plugin-brackets
Version:
ESLint style rules for minimizing diffs with line breaks around brackets
56 lines (42 loc) • 1.61 kB
JavaScript
;
const groupBy = require('lodash/groupBy');
const last = require('lodash/last');
var _require = require('../utils');
const isValidOpeningPunc = _require.isValidOpeningPunc,
isValidClosingPunc = _require.isValidClosingPunc;
module.exports = {
meta: {
fixable: 'code'
},
create: function create(context) {
const sourceCode = context.getSourceCode();
function check(node) {
const test = node.test;
const openingParen = sourceCode.getTokenBefore(test);
const closingParen = sourceCode.getTokenAfter(test);
if (openingParen.loc.start.line === closingParen.loc.start.line) return;
const tokensByStartLine = groupBy(sourceCode.getTokens(node), 'loc.start.line');
const tokensByEndLine = groupBy(sourceCode.getTokens(node), 'loc.end.line');
const lastTokenOfFirstLine = last(tokensByStartLine[openingParen.loc.start.line]);
if (!isValidOpeningPunc(lastTokenOfFirstLine)) {
context.report({
loc: openingParen.loc.start,
message: 'Expected line break after this paren',
fix: fixer => fixer.insertTextAfter(openingParen, '\n')
});
}
const firstTokenOfLastLine = tokensByEndLine[closingParen.loc.end.line][0];
if (!isValidClosingPunc(firstTokenOfLastLine)) {
context.report({
loc: closingParen.loc.start,
message: 'Expected line break before this paren',
fix: fixer => fixer.insertTextBefore(closingParen, '\n')
});
}
}
return {
IfStatement: check,
WhileStatement: check
};
}
};