diff --git a/crates/oxc_linter/src/rules/eslint/no_multi_str.rs b/crates/oxc_linter/src/rules/eslint/no_multi_str.rs index ae74b663e018f..72710ab2d7fe8 100644 --- a/crates/oxc_linter/src/rules/eslint/no_multi_str.rs +++ b/crates/oxc_linter/src/rules/eslint/no_multi_str.rs @@ -1,6 +1,7 @@ use oxc_ast::AstKind; use oxc_diagnostics::OxcDiagnostic; use oxc_macros::declare_oxc_lint; +use oxc_semantic::AstNodeId; use oxc_span::Span; use crate::{context::LintContext, rule::Rule, AstNode}; @@ -38,7 +39,7 @@ impl Rule for NoMultiStr { // https://github.com/eslint/eslint/blob/9e6d6405c3ee774c2e716a3453ede9696ced1be7/lib/shared/ast-utils.js#L12 let position = source.find(|ch| matches!(ch, '\r' | '\n' | '\u{2028}' | '\u{2029}')).unwrap_or(0); - if position != 0 { + if position != 0 && !is_within_jsx_attribute_item(node.id(), ctx) { // We found the "newline" character but want to highlight the '\', so go back one // character. let multi_span_start = @@ -52,6 +53,13 @@ impl Rule for NoMultiStr { } } +fn is_within_jsx_attribute_item(id: AstNodeId, ctx: &LintContext) -> bool { + if matches!(ctx.nodes().parent_kind(id), Some(AstKind::JSXAttributeItem(_))) { + return true; + } + false +} + #[test] fn test() { use crate::tester::Tester; @@ -61,6 +69,8 @@ fn test() { "var a =

Wat

;", // { "ecmaVersion": 6, "parserOptions": { "ecmaFeatures": { "jsx": true } } } + r#"
"#, // jsx ]; let fail = vec![