From cbf08d276172285dfd7f00a57b13ee7f2fb65359 Mon Sep 17 00:00:00 2001 From: heygsc <1596920983@qq.com> Date: Mon, 5 Aug 2024 21:13:49 +0800 Subject: [PATCH] fix(linter): skip no-multi-str on jsx attributes (#4666) --- crates/oxc_linter/src/rules/eslint/no_multi_str.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) 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 ae74b663e..72710ab2d 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![