UNPKG

eslint-plugin-brackets

Version:

ESLint style rules for minimizing diffs with line breaks around brackets

56 lines (42 loc) 1.61 kB
'use strict'; 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 }; } };