UNPKG

@croct/eslint-plugin

Version:

ESLint rules and presets applied to all Croct JavaScript projects.

67 lines (66 loc) 2.47 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.complexExpressionSpacing = void 0; const createRule_1 = require("../createRule"); exports.complexExpressionSpacing = (0, createRule_1.createRule)({ name: 'complex-expression-spacing', meta: { type: 'suggestion', docs: { description: 'Enforces a surrounding line break in complex expression.', recommended: 'recommended', }, fixable: 'whitespace', schema: [], messages: { missing: 'Missing new line.', }, }, defaultOptions: [], create: context => { const sourceCode = context.getSourceCode(); function check(node) { const parentPreviousToken = sourceCode.getTokenBefore(node, { filter: token => token.type === 'Punctuator', }); const parentNextToken = sourceCode.getTokenAfter(node, { filter: token => token.type === 'Punctuator', }); if (parentPreviousToken.loc.end.line === parentNextToken.loc.start.line) { return; } const firstToken = sourceCode.getFirstToken(node); const lastToken = sourceCode.getLastToken(node); const tokens = [ [parentPreviousToken, firstToken], [lastToken, parentNextToken], ]; for (const [previousToken, currentToken] of tokens) { if (previousToken.loc.end.line !== currentToken.loc.start.line) { continue; } const tokenBefore = sourceCode.getTokenBefore(currentToken, { includeComments: true }); context.report({ node: node, loc: { start: tokenBefore.loc.end, end: currentToken.loc.start, }, messageId: 'missing', fix: fixer => fixer.replaceTextRange([tokenBefore.range[1], currentToken.range[0]], '\n'), }); } } return { ArrowFunctionExpression: (node) => { const { body } = node; if (body.type === 'ConditionalExpression') { check(body); } }, IfStatement: (node) => { check(node.test); }, }; }, });