Skip to content

Commit 94142dd

Browse files
authored
fix(lint): false positive on noSelfCompare for additional arguments (#6385)
1 parent c6942d2 commit 94142dd

File tree

4 files changed

+85
-2
lines changed

4 files changed

+85
-2
lines changed

.changeset/quick-nails-sniff.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@biomejs/biome": patch
3+
---
4+
5+
Fixed [#6377](https://github.com/biomejs/biome/issues/6377): The rule [noSelfCompare](https://biomejs.dev/linter/rules/no-self-compare/) now correctly compares two function calls with different arguments.

crates/biome_js_analyze/src/utils.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,10 @@ pub(crate) fn is_node_equal(a_node: &JsSyntaxNode, b_node: &JsSyntaxNode) -> boo
1414
let a_tree = a_node.preorder_with_tokens(Direction::Next);
1515
let b_tree = b_node.preorder_with_tokens(Direction::Next);
1616
for (a_event, b_event) in iter::zip(a_tree, b_tree) {
17-
let (WalkEvent::Enter(a_child), WalkEvent::Enter(b_child)) = (a_event, b_event) else {
18-
continue;
17+
let (a_child, b_child) = match (a_event, b_event) {
18+
(WalkEvent::Enter(a), WalkEvent::Enter(b)) => (a, b),
19+
(WalkEvent::Leave(_), WalkEvent::Leave(_)) => continue,
20+
_ => return false,
1921
};
2022
if a_child.kind() != b_child.kind() {
2123
return false;
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
function sum(...args) {
2+
let result = 0;
3+
for (const value of args) {
4+
result += value;
5+
}
6+
return result;
7+
}
8+
9+
// False positive ❌
10+
sum(1) === sum(1, 2);
11+
sum(1) !== sum(1, 2);
12+
13+
// True positives ✅
14+
sum(1) === sum(1);
15+
sum(1) !== sum(1);
16+
17+
// True negatives ✅
18+
sum(1) === sum(2);
19+
sum(1) !== sum(2);
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
---
2+
source: crates/biome_js_analyze/tests/spec_tests.rs
3+
expression: issue6377.js
4+
---
5+
# Input
6+
```js
7+
function sum(...args) {
8+
let result = 0;
9+
for (const value of args) {
10+
result += value;
11+
}
12+
return result;
13+
}
14+
15+
// False positive ❌
16+
sum(1) === sum(1, 2);
17+
sum(1) !== sum(1, 2);
18+
19+
// True positives ✅
20+
sum(1) === sum(1);
21+
sum(1) !== sum(1);
22+
23+
// True negatives ✅
24+
sum(1) === sum(2);
25+
sum(1) !== sum(2);
26+
27+
```
28+
29+
# Diagnostics
30+
```
31+
issue6377.js:14:1 lint/suspicious/noSelfCompare ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
32+
33+
× Comparing to itself is potentially pointless.
34+
35+
13 │ // True positives ✅
36+
> 14 │ sum(1) === sum(1);
37+
│ ^^^^^^^^^^^^^^^^^
38+
15 │ sum(1) !== sum(1);
39+
16 │
40+
41+
42+
```
43+
44+
```
45+
issue6377.js:15:1 lint/suspicious/noSelfCompare ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
46+
47+
× Comparing to itself is potentially pointless.
48+
49+
13 │ // True positives ✅
50+
14 │ sum(1) === sum(1);
51+
> 15 │ sum(1) !== sum(1);
52+
│ ^^^^^^^^^^^^^^^^^
53+
16 │
54+
17 │ // True negatives ✅
55+
56+
57+
```

0 commit comments

Comments
 (0)