diff --git a/CHANGELOG.md b/CHANGELOG.md index ebdffcac88d2..0b2afd95e6ec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,16 @@ our [guidelines for writing a good changelog entry](https://github.com/biomejs/b #### Bug fixes +- [noBlankTarget](https://biomejs.dev/linter/rules/no-blank-target/) no longer hangs when applying a code fix ([#2675](https://github.com/biomejs/biome/issues/2675)). + + Previously, the following code made Biome hangs when applying a code fix. + + ```jsx + + ``` + + Contributed by @Conaclos + - [noRedeclare](https://biomejs.dev/linter/rules/no-redeclare/) no longer panics on conditional type ([#2659](https://github.com/biomejs/biome/issues/2659)). This is a regression introduced by [#2394](https://github.com/biomejs/biome/issues/2394). diff --git a/crates/biome_js_analyze/src/lint/a11y/no_blank_target.rs b/crates/biome_js_analyze/src/lint/a11y/no_blank_target.rs index b70fa00f2b24..214849f80887 100644 --- a/crates/biome_js_analyze/src/lint/a11y/no_blank_target.rs +++ b/crates/biome_js_analyze/src/lint/a11y/no_blank_target.rs @@ -112,10 +112,13 @@ impl Rule for NoBlankTarget { let prev_jsx_attribute = rel_attribute.initializer()?.value().ok()?; let prev_jsx_string = prev_jsx_attribute.as_jsx_string()?; let new_text = format!( - "\"noreferrer {}\"", + "noreferrer {}", prev_jsx_string.inner_string_text().ok()?.text() ); - mutation.replace_node(prev_jsx_string.clone(), jsx_string(jsx_ident(&new_text))); + mutation.replace_node( + prev_jsx_string.clone(), + jsx_string(jsx_string_literal(new_text.trim_end())), + ); (markup! { "Add the ""\"noreferrer\""" to the existing attribute." diff --git a/crates/biome_js_analyze/src/lint/complexity/no_useless_fragments.rs b/crates/biome_js_analyze/src/lint/complexity/no_useless_fragments.rs index b484e000128d..f5de07caa82f 100644 --- a/crates/biome_js_analyze/src/lint/complexity/no_useless_fragments.rs +++ b/crates/biome_js_analyze/src/lint/complexity/no_useless_fragments.rs @@ -6,8 +6,8 @@ use biome_analyze::{declare_rule, ActionCategory, FixKind, Rule, RuleDiagnostic, use biome_console::markup; use biome_diagnostics::Applicability; use biome_js_factory::make::{ - ident, js_expression_statement, js_string_literal_expression, jsx_expression_child, jsx_string, - jsx_tag_expression, token, JsxExpressionChildBuilder, + js_expression_statement, js_string_literal_expression, jsx_expression_child, jsx_string, + jsx_string_literal, jsx_tag_expression, token, JsxExpressionChildBuilder, }; use biome_js_syntax::{ AnyJsExpression, AnyJsxChild, AnyJsxElementName, AnyJsxTag, JsLanguage, @@ -268,12 +268,15 @@ impl Rule for NoUselessFragments { jsx_tag_expression(AnyJsxTag::JsxSelfClosingElement(node)).into_syntax(), ), AnyJsxChild::JsxText(text) => { - let new_value = - format!("\"{}\"", text.value_token().ok()?.token_text().trim()); + let new_value = text.value_token().ok()?.token_text(); + let new_value = new_value.trim(); if parent.kind() == JsSyntaxKind::JSX_EXPRESSION_ATTRIBUTE_VALUE { - Some(jsx_string(ident(&new_value)).into_syntax()) + Some(jsx_string(jsx_string_literal(new_value)).into_syntax()) } else { - Some(js_string_literal_expression(ident(&new_value)).into_syntax()) + Some( + js_string_literal_expression(jsx_string_literal(new_value)) + .into_syntax(), + ) } } AnyJsxChild::JsxExpressionChild(child) => { diff --git a/crates/biome_js_analyze/tests/specs/a11y/noBlankTarget/invalid.jsx.snap b/crates/biome_js_analyze/tests/specs/a11y/noBlankTarget/invalid.jsx.snap index aa21f30f8332..eb461332b182 100644 --- a/crates/biome_js_analyze/tests/specs/a11y/noBlankTarget/invalid.jsx.snap +++ b/crates/biome_js_analyze/tests/specs/a11y/noBlankTarget/invalid.jsx.snap @@ -57,8 +57,8 @@ invalid.jsx:3:8 lint/a11y/noBlankTarget FIXABLE ━━━━━━━━━━ i Safe fix: Add the "noreferrer" to the existing attribute. - 3 │ ···· - │ +++++++++++ + 3 │ ···· + │ ++++++++++ ``` @@ -230,5 +230,3 @@ invalid.jsx:12:8 lint/a11y/noBlankTarget FIXABLE ━━━━━━━━━ │ +++++++++++++++++ ``` - -