Skip to content

Commit 69a0fd7

Browse files
authored
prefer-ternary: Refactor (#1280)
1 parent fa68b6f commit 69a0fd7

File tree

3 files changed

+37
-15
lines changed

3 files changed

+37
-15
lines changed

rules/prefer-ternary.js

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ const extendFixRange = require('./utils/extend-fix-range');
66
const needsSemicolon = require('./utils/needs-semicolon');
77
const isSameReference = require('./utils/is-same-reference');
88
const getIndentString = require('./utils/get-indent-string');
9+
const {getParenthesizedText} = require('./utils/parentheses');
10+
const shouldAddParenthesesToConditionalExpressionChild = require('./utils/should-add-parentheses-to-conditional-expression-child');
911

1012
const messageId = 'prefer-ternary';
1113

@@ -53,17 +55,16 @@ const create = context => {
5355
return !generatedNames || !generatedNames.has(name);
5456
});
5557

56-
const getParenthesizedText = node => {
57-
const text = sourceCode.getText(node);
58-
return (
59-
isParenthesized(node, sourceCode) ||
60-
node.type === 'AwaitExpression' ||
61-
// Lower precedence, see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#Table
62-
node.type === 'AssignmentExpression' ||
63-
node.type === 'YieldExpression' ||
64-
node.type === 'SequenceExpression'
65-
) ?
66-
`(${text})` : text;
58+
const getText = node => {
59+
let text = getParenthesizedText(node, sourceCode);
60+
if (
61+
!isParenthesized(node, sourceCode) &&
62+
shouldAddParenthesesToConditionalExpressionChild(node)
63+
) {
64+
text = `(${text})`;
65+
}
66+
67+
return text;
6768
};
6869

6970
const isSingleLineNode = node => {
@@ -206,13 +207,13 @@ const create = context => {
206207
node,
207208
messageId,
208209
* fix(fixer) {
209-
const testText = getParenthesizedText(node.test);
210+
const testText = getText(node.test);
210211
const consequentText = typeof result.consequent === 'string' ?
211212
result.consequent :
212-
getParenthesizedText(result.consequent);
213+
getText(result.consequent);
213214
const alternateText = typeof result.alternate === 'string' ?
214215
result.alternate :
215-
getParenthesizedText(result.alternate);
216+
getText(result.alternate);
216217

217218
let {type, before, after} = result;
218219

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
'use strict';
2+
3+
/**
4+
Check if parentheses should be added to a `node` when it's used as child of `ConditionalExpression`.
5+
6+
@param {Node} node - The AST node to check.
7+
@returns {boolean}
8+
*/
9+
function shouldAddParenthesesToConditionalExpressionChild(node) {
10+
return node.type === 'AwaitExpression' ||
11+
// Lower precedence, see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#Table
12+
node.type === 'AssignmentExpression' ||
13+
node.type === 'YieldExpression' ||
14+
node.type === 'SequenceExpression';
15+
}
16+
17+
module.exports = shouldAddParenthesesToConditionalExpressionChild;

test/prefer-ternary.mjs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1076,7 +1076,11 @@ test({
10761076
a = bar;
10771077
}
10781078
`,
1079-
output: 'a = (test) ? foo : bar;',
1079+
output: outdent`
1080+
a = (
1081+
test
1082+
) ? foo : bar;
1083+
`,
10801084
options: onlySingleLineOptions,
10811085
errors
10821086
},

0 commit comments

Comments
 (0)