]>
git.proxmox.com Git - pve-eslint.git/blob - eslint/lib/rules/no-lonely-if.js
2 * @fileoverview Rule to disallow if as the only statement in an else block
3 * @author Brandon Mills
7 //------------------------------------------------------------------------------
9 //------------------------------------------------------------------------------
11 /** @type {import('../shared/types').Rule} */
17 description
: "Disallow `if` statements as the only statement in `else` blocks",
19 url
: "https://eslint.org/docs/latest/rules/no-lonely-if"
26 unexpectedLonelyIf
: "Unexpected if as the only statement in an else block."
31 const sourceCode
= context
.sourceCode
;
35 const parent
= node
.parent
,
36 grandparent
= parent
.parent
;
38 if (parent
&& parent
.type
=== "BlockStatement" &&
39 parent
.body
.length
=== 1 && grandparent
&&
40 grandparent
.type
=== "IfStatement" &&
41 parent
=== grandparent
.alternate
) {
44 messageId
: "unexpectedLonelyIf",
46 const openingElseCurly
= sourceCode
.getFirstToken(parent
);
47 const closingElseCurly
= sourceCode
.getLastToken(parent
);
48 const elseKeyword
= sourceCode
.getTokenBefore(openingElseCurly
);
49 const tokenAfterElseBlock
= sourceCode
.getTokenAfter(closingElseCurly
);
50 const lastIfToken
= sourceCode
.getLastToken(node
.consequent
);
51 const sourceText
= sourceCode
.getText();
53 if (sourceText
.slice(openingElseCurly
.range
[1],
54 node
.range
[0]).trim() || sourceText
.slice(node
.range
[1], closingElseCurly
.range
[0]).trim()) {
56 // Don't fix if there are any non-whitespace characters interfering (e.g. comments)
61 node
.consequent
.type
!== "BlockStatement" && lastIfToken
.value
!== ";" && tokenAfterElseBlock
&&
63 node
.consequent
.loc
.end
.line
=== tokenAfterElseBlock
.loc
.start
.line
||
64 /^[([/+`-]/u.test(tokenAfterElseBlock.value) ||
65 lastIfToken.value === "++" ||
66 lastIfToken.value === "--"
71 * If the `if` statement has no block, and is not followed by a semicolon, make sure that fixing
72 * the issue would not change semantics due to ASI. If this would happen, don't do a fix.
77 return fixer.replaceTextRange(
78 [openingElseCurly.range[0], closingElseCurly.range[1]],
79 (elseKeyword.range[1] === openingElseCurly.range[0] ? " " : "") + sourceCode.getText(node)