diff --git a/crates/biome_js_analyze/src/lint/complexity/use_optional_chain.rs b/crates/biome_js_analyze/src/lint/complexity/use_optional_chain.rs index 20f5134fc358..41e2a6d1f215 100644 --- a/crates/biome_js_analyze/src/lint/complexity/use_optional_chain.rs +++ b/crates/biome_js_analyze/src/lint/complexity/use_optional_chain.rs @@ -632,6 +632,9 @@ impl LogicalAndChain { /// `LogicalAndChainOrdering` by comparing their `token_text_trimmed` for /// every `JsAnyExpression` node. fn cmp_chain(&self, other: &Self) -> SyntaxResult { + if other.buf.is_empty() { + return Ok(LogicalAndChainOrdering::Different); + } let chain_ordering = match self.buf.len().cmp(&other.buf.len()) { Ordering::Less => return Ok(LogicalAndChainOrdering::Different), Ordering::Equal => LogicalAndChainOrdering::Equal, diff --git a/crates/biome_js_analyze/tests/specs/complexity/useOptionalChain/validLogicalAndUnrelatedOperands.js b/crates/biome_js_analyze/tests/specs/complexity/useOptionalChain/validLogicalAndUnrelatedOperands.js new file mode 100644 index 000000000000..9c317c6ef168 --- /dev/null +++ b/crates/biome_js_analyze/tests/specs/complexity/useOptionalChain/validLogicalAndUnrelatedOperands.js @@ -0,0 +1,13 @@ +/* should not generate diagnostics */ + +// Unrelated identifiers with negation prefix (#9428) +hasMore && !isLoading && inView; +a && !b && c; +foo && !bar && baz.qux; + +// Unrelated identifiers without member access +a && b && c; + +// Negation at different positions +!a && b && c; +a && b && !c; diff --git a/crates/biome_js_analyze/tests/specs/complexity/useOptionalChain/validLogicalAndUnrelatedOperands.js.snap b/crates/biome_js_analyze/tests/specs/complexity/useOptionalChain/validLogicalAndUnrelatedOperands.js.snap new file mode 100644 index 000000000000..c580b4e137d1 --- /dev/null +++ b/crates/biome_js_analyze/tests/specs/complexity/useOptionalChain/validLogicalAndUnrelatedOperands.js.snap @@ -0,0 +1,21 @@ +--- +source: crates/biome_js_analyze/tests/spec_tests.rs +expression: validLogicalAndUnrelatedOperands.js +--- +# Input +```js +/* should not generate diagnostics */ + +// Unrelated identifiers with negation prefix (#9428) +hasMore && !isLoading && inView; +a && !b && c; +foo && !bar && baz.qux; + +// Unrelated identifiers without member access +a && b && c; + +// Negation at different positions +!a && b && c; +a && b && !c; + +```