diff --git a/crates/oxc_linter/src/rules/react/jsx_curly_brace_presence.rs b/crates/oxc_linter/src/rules/react/jsx_curly_brace_presence.rs index f0f55d3ce1119..0a625034180aa 100644 --- a/crates/oxc_linter/src/rules/react/jsx_curly_brace_presence.rs +++ b/crates/oxc_linter/src/rules/react/jsx_curly_brace_presence.rs @@ -298,6 +298,7 @@ declare_oxc_lint!( JsxCurlyBracePresence, react, style, + pending ); impl Rule for JsxCurlyBracePresence { @@ -813,10 +814,10 @@ fn test() { ), ( r#" - {activity.type}} - /> - "#, + {activity.type}} + /> + "#, Some(json!(["never"])), ), ("", Some(json!(["never"]))), @@ -947,8 +948,8 @@ fn test() { ), ( " - - ", + + ", Some(json!(["never"])), ), (r#"bar"#, Some(json!(["never"]))), @@ -963,8 +964,330 @@ fn test() { "} />", Some(json!([{ "props": "never", "children": "never", "propElementValues": "never" }])), ), + // ( + // r#""#, + // Some(json!([{ "props": "never", "children": "never", "propElementValues": "never" }])), + // ), + //( + // r#" + // + // "#, + // Some(json!(["never"])), + //), ]; + // TODO: implement fixer + let _fix = vec![ + ("", r#""#, Some(json!([{ "props": "never" }]))), + ( + "{}", + "", + Some(json!([{ "children": "never" }])), + ), + ("{}", "", None), + ( + "foo", + r#"foo"#, + Some(json!([{ "props": "never" }])), + ), + ("{`foo`}", "foo", Some(json!([{ "children": "never" }]))), + ("<>{`foo`}", "<>foo", Some(json!([{ "children": "never" }]))), + ("{'foo'}", "foo", None), + ( + "foo", + r#"foo"#, + None, + ), + ( + "{'foo'}", + "foo", + Some(json!([{ "children": "never" }])), + ), + ( + "foo", + r#"foo"#, + Some(json!([{ "props": "never" }])), + ), + ( + " + + {'%'} + + ", + " + + % + + ", + Some(json!([{ "children": "never" }])), + ), + ( + " + + {'foo'} +
+ {'bar'} +
+ {'baz'} +
+ ", + " + + foo +
+ bar +
+ baz +
+ ", + Some(json!([{ "children": "never" }])), + ), + ( + " + + {'foo'} +
+ {'bar'} +
+ {'baz'} + {'some-complicated-exp'} +
+ ", + " + + foo +
+ bar +
+ {'baz'} + {'some-complicated-exp'} +
+ ", + Some(json!([{ "children": "never" }])), + ), + ( + "foo", + r#"foo"#, + Some(json!([{ "props": "always" }])), + ), + ( + r#"foo"#, + r#"foo"#, + Some(json!([{ "props": "always" }])), + ), + ( + r#"foo"#, + r#"foo"#, + Some(json!([{ "props": "always" }])), + ), + ( + "foo bar ", + r#"{"foo bar "}"#, + Some(json!([{ "children": "always" }])), + ), + ( + r#"foo"#, + r#"foo"#, + Some(json!([{ "props": "always" }])), + ), + ( + "foo bar \r ", + r#"{"foo bar \\r "}"#, + Some(json!([{ "children": "always" }])), + ), + ( + "foo bar 'foo'", + r#"{"foo bar 'foo'"}"#, + Some(json!([{ "children": "always" }])), + ), + ( + r#"foo bar "foo""#, + r#"{"foo bar "foo""}"#, + Some(json!([{ "children": "always" }])), + ), + ( + "foo bar ", + r#"{"foo bar "}"#, + Some(json!([{ "children": "always" }])), + ), + ( + "foo \n bar", + r#"{"foo \\n bar"}"#, + Some(json!([{ "children": "always" }])), + ), + ( + r"foo \u1234 bar", + r#"{"foo \\u1234 bar"}"#, + Some(json!([{ "children": "always" }])), + ), + ( + r"", + r#""#, + Some(json!([{ "props": "always" }])), + ), + ( + "{'foo'}", + r#"foo"#, + Some(json!(["never"])), + ), + ( + "foo", + r#"{"foo"}"#, + Some(json!(["always"])), + ), + ( + r#""#, + r#""#, + Some(json!([{ "props": "never" }])), + ), + ( + r#""#, + r#""#, + Some(json!([{ "props": "always" }])), + ), + ( + r#""#, + r#""#, + Some(json!([{ "props": "always" }])), + ), + ( + "", + r#""#, + Some(json!([{ "props": "always" }])), + ), + ( + "", + r#""#, + Some(json!([{ "props": "always" }])), + ), + ( + "foo · bar", + r#"{"foo · bar"}"#, + Some(json!([{ "children": "always" }])), + ), + ( + r#"{'foo "bar"'}"#, + r#"foo "bar""#, + Some(json!([{ "children": "never" }])), + ), + ( + r#"{"foo 'bar'"}"#, + "foo 'bar'", + Some(json!([{ "children": "never" }])), + ), + ( + r#" + + foo bar +
foo bar foo
+ + foo bar foo bar + + foo bar + + +
+ ", + r#" + + {"foo bar"} +
{"foo bar foo"}
+ + {"foo bar "}{"foo bar"} + + {"foo bar"} + + +
+ "#, + Some(json!([{ "children": "always" }])), + ), + ( + " + + <Component> +    +   + + ", + r#" + + <{"Component"}> +    +   + + "#, + Some(json!([{ "children": "always" }])), + ), + ( + " + + ", + r#" + + "#, + Some(json!([{ "props": "never" }])), + ), + ( + " + + ", + r#" + + "#, + Some(json!(["never"])), + ), + ( + r#"bar"#, + r#"bar"#, + Some(json!(["never"])), + ), + ( + r#""}>foo"#, + r#"foo"#, + Some(json!(["never"])), + ), + ( + " />", + "} />", + Some( + json!([{ "props": "always", "children": "always", "propElementValues": "always" }]), + ), + ), + ( + "} />", + " />", + Some(json!([{ "props": "never", "children": "never", "propElementValues": "never" }])), + ), + ( + r#""#, + r#""#, + Some(json!([{ "props": "never", "children": "never", "propElementValues": "never" }])), + ), + ( + r#" + + "#, + r#" + + "#, + Some(json!(["never"])), + ), + ]; Tester::new(JsxCurlyBracePresence::NAME, JsxCurlyBracePresence::PLUGIN, pass, fail) .test_and_snapshot(); } diff --git a/crates/oxc_linter/src/snapshots/react_jsx_curly_brace_presence.snap b/crates/oxc_linter/src/snapshots/react_jsx_curly_brace_presence.snap index 9d38b5b3e2856..1170000da0722 100644 --- a/crates/oxc_linter/src/snapshots/react_jsx_curly_brace_presence.snap +++ b/crates/oxc_linter/src/snapshots/react_jsx_curly_brace_presence.snap @@ -369,7 +369,7 @@ source: crates/oxc_linter/src/tester.rs ╰──── ⚠ eslint-plugin-react(jsx-curly-brace-presence): Curly braces are unnecessary here. - ╭─[jsx_curly_brace_presence.tsx:2:27] + ╭─[jsx_curly_brace_presence.tsx:2:21] 1 │ 2 │ · ─────────