fix(linter): skip no-multi-str on jsx attributes (#4666)

This commit is contained in:
heygsc 2024-08-05 21:13:49 +08:00 committed by GitHub
parent 229a0e9c45
commit cbf08d2761
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -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 = <div>
<h1>Wat</h1>
</div>;", // { "ecmaVersion": 6, "parserOptions": { "ecmaFeatures": { "jsx": true } } }
r#"<div class="line1
line2"></div>"#, // jsx
];
let fail = vec![