1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- 'use strict';
- const {isParenthesized} = require('eslint-utils');
- const MESSAGE_ID_TOO_DEEP = 'too-deep';
- const MESSAGE_ID_SHOULD_PARENTHESIZED = 'should-parenthesized';
- const messages = {
- [MESSAGE_ID_TOO_DEEP]: 'Do not nest ternary expressions.',
- [MESSAGE_ID_SHOULD_PARENTHESIZED]: 'Nest ternary expression should be parenthesized.',
- };
- const nestTernarySelector = level => `:not(ConditionalExpression)${' > ConditionalExpression'.repeat(level)}`;
- /** @param {import('eslint').Rule.RuleContext} context */
- const create = context => {
- const sourceCode = context.getSourceCode();
- return {
- [nestTernarySelector(3)]: node =>
- // Nesting more than one level not allowed.
- ({node, messageId: MESSAGE_ID_TOO_DEEP}),
- [nestTernarySelector(2)]: node => {
- if (!isParenthesized(node, sourceCode)) {
- return {
- node,
- messageId: MESSAGE_ID_SHOULD_PARENTHESIZED,
- fix: fixer => [
- fixer.insertTextBefore(node, '('),
- fixer.insertTextAfter(node, ')'),
- ],
- };
- }
- },
- };
- };
- /** @type {import('eslint').Rule.RuleModule} */
- module.exports = {
- create,
- meta: {
- type: 'suggestion',
- docs: {
- description: 'Disallow nested ternary expressions.',
- },
- fixable: 'code',
- messages,
- },
- };
|