+ ╰────
+
+ ⚠ eslint-plugin-react(jsx-no-comment-textnodes): Comments inside children section of tag should be placed inside braces
+ ╭─[jsx_no_comment_textnodes.tsx:2:1]
+ 2 │ const Component2 = () => {
+ 3 │ return /*;
+ · ──
+ 4 │ };
+ ╰────
+
+
diff --git a/crates/oxc_linter/src/snapshots/jsx_no_jsx_as_prop.snap b/crates/oxc_linter/src/snapshots/jsx_no_jsx_as_prop.snap
new file mode 100644
index 0000000000000..e0d25fc6f958f
--- /dev/null
+++ b/crates/oxc_linter/src/snapshots/jsx_no_jsx_as_prop.snap
@@ -0,0 +1,33 @@
+---
+source: crates/oxc_linter/src/tester.rs
+expression: jsx_no_jsx_as_prop
+---
+ ⚠ eslint-plugin-react-perf(jsx-no-jsx-as-prop): JSX attribute values should not contain other JSX.
+ ╭─[jsx_no_jsx_as_prop.tsx:1:1]
+ 1 │ } />
+ · ───────────
+ ╰────
+ help: simplify props or memoize props in the parent component (https://react.dev/reference/react/memo#my-component-rerenders-when-a-prop-is-an-object-or-array).
+
+ ⚠ eslint-plugin-react-perf(jsx-no-jsx-as-prop): JSX attribute values should not contain other JSX.
+ ╭─[jsx_no_jsx_as_prop.tsx:1:1]
+ 1 │ } />
+ · ───────────
+ ╰────
+ help: simplify props or memoize props in the parent component (https://react.dev/reference/react/memo#my-component-rerenders-when-a-prop-is-an-object-or-array).
+
+ ⚠ eslint-plugin-react-perf(jsx-no-jsx-as-prop): JSX attribute values should not contain other JSX.
+ ╭─[jsx_no_jsx_as_prop.tsx:1:1]
+ 1 │ } />
+ · ───────────
+ ╰────
+ help: simplify props or memoize props in the parent component (https://react.dev/reference/react/memo#my-component-rerenders-when-a-prop-is-an-object-or-array).
+
+ ⚠ eslint-plugin-react-perf(jsx-no-jsx-as-prop): JSX attribute values should not contain other JSX.
+ ╭─[jsx_no_jsx_as_prop.tsx:1:1]
+ 1 │ )} />
+ · ───────────
+ ╰────
+ help: simplify props or memoize props in the parent component (https://react.dev/reference/react/memo#my-component-rerenders-when-a-prop-is-an-object-or-array).
+
+
diff --git a/crates/oxc_linter/src/snapshots/jsx_no_new_array_as_prop.snap b/crates/oxc_linter/src/snapshots/jsx_no_new_array_as_prop.snap
new file mode 100644
index 0000000000000..fd9ce6daa1bfe
--- /dev/null
+++ b/crates/oxc_linter/src/snapshots/jsx_no_new_array_as_prop.snap
@@ -0,0 +1,47 @@
+---
+source: crates/oxc_linter/src/tester.rs
+expression: jsx_no_new_array_as_prop
+---
+ ⚠ eslint-plugin-react-perf(jsx-no-new-array-as-prop): JSX attribute values should not contain Arrays created in the same scope.
+ ╭─[jsx_no_new_array_as_prop.tsx:1:1]
+ 1 │
+ · ──
+ ╰────
+ help: simplify props or memoize props in the parent component (https://react.dev/reference/react/memo#my-component-rerenders-when-a-prop-is-an-object-or-array).
+
+ ⚠ eslint-plugin-react-perf(jsx-no-new-array-as-prop): JSX attribute values should not contain Arrays created in the same scope.
+ ╭─[jsx_no_new_array_as_prop.tsx:1:1]
+ 1 │
+ · ───────────
+ ╰────
+ help: simplify props or memoize props in the parent component (https://react.dev/reference/react/memo#my-component-rerenders-when-a-prop-is-an-object-or-array).
+
+ ⚠ eslint-plugin-react-perf(jsx-no-new-array-as-prop): JSX attribute values should not contain Arrays created in the same scope.
+ ╭─[jsx_no_new_array_as_prop.tsx:1:1]
+ 1 │
+ · ───────
+ ╰────
+ help: simplify props or memoize props in the parent component (https://react.dev/reference/react/memo#my-component-rerenders-when-a-prop-is-an-object-or-array).
+
+ ⚠ eslint-plugin-react-perf(jsx-no-new-array-as-prop): JSX attribute values should not contain Arrays created in the same scope.
+ ╭─[jsx_no_new_array_as_prop.tsx:1:1]
+ 1 │
+ · ──
+ ╰────
+ help: simplify props or memoize props in the parent component (https://react.dev/reference/react/memo#my-component-rerenders-when-a-prop-is-an-object-or-array).
+
+ ⚠ eslint-plugin-react-perf(jsx-no-new-array-as-prop): JSX attribute values should not contain Arrays created in the same scope.
+ ╭─[jsx_no_new_array_as_prop.tsx:1:1]
+ 1 │
+ · ──
+ ╰────
+ help: simplify props or memoize props in the parent component (https://react.dev/reference/react/memo#my-component-rerenders-when-a-prop-is-an-object-or-array).
+
+ ⚠ eslint-plugin-react-perf(jsx-no-new-array-as-prop): JSX attribute values should not contain Arrays created in the same scope.
+ ╭─[jsx_no_new_array_as_prop.tsx:1:1]
+ 1 │
+ · ──
+ ╰────
+ help: simplify props or memoize props in the parent component (https://react.dev/reference/react/memo#my-component-rerenders-when-a-prop-is-an-object-or-array).
+
+
diff --git a/crates/oxc_linter/src/snapshots/jsx_no_new_function_as_props.snap b/crates/oxc_linter/src/snapshots/jsx_no_new_function_as_props.snap
new file mode 100644
index 0000000000000..def8e3913b2c3
--- /dev/null
+++ b/crates/oxc_linter/src/snapshots/jsx_no_new_function_as_props.snap
@@ -0,0 +1,68 @@
+---
+source: crates/oxc_linter/src/tester.rs
+expression: jsx_no_new_function_as_props
+---
+ ⚠ eslint-plugin-react-perf(jsx-no-new-function-as-props): JSX attribute values should not contain functions created in the same scope.
+ ╭─[jsx_no_new_function_as_props.tsx:1:1]
+ 1 │
+ · ───────────────────────
+ ╰────
+ help: simplify props or memoize props in the parent component (https://react.dev/reference/react/memo#my-component-rerenders-when-a-prop-is-an-object-or-array).
+
+ ⚠ eslint-plugin-react-perf(jsx-no-new-function-as-props): JSX attribute values should not contain functions created in the same scope.
+ ╭─[jsx_no_new_function_as_props.tsx:1:1]
+ 1 │ true} />
+ · ──────────
+ ╰────
+ help: simplify props or memoize props in the parent component (https://react.dev/reference/react/memo#my-component-rerenders-when-a-prop-is-an-object-or-array).
+
+ ⚠ eslint-plugin-react-perf(jsx-no-new-function-as-props): JSX attribute values should not contain functions created in the same scope.
+ ╭─[jsx_no_new_function_as_props.tsx:1:1]
+ 1 │
+ · ─────────────────────────────
+ ╰────
+ help: simplify props or memoize props in the parent component (https://react.dev/reference/react/memo#my-component-rerenders-when-a-prop-is-an-object-or-array).
+
+ ⚠ eslint-plugin-react-perf(jsx-no-new-function-as-props): JSX attribute values should not contain functions created in the same scope.
+ ╭─[jsx_no_new_function_as_props.tsx:1:1]
+ 1 │
+ · ──────────
+ ╰────
+ help: simplify props or memoize props in the parent component (https://react.dev/reference/react/memo#my-component-rerenders-when-a-prop-is-an-object-or-array).
+
+ ⚠ eslint-plugin-react-perf(jsx-no-new-function-as-props): JSX attribute values should not contain functions created in the same scope.
+ ╭─[jsx_no_new_function_as_props.tsx:1:1]
+ 1 │
+ · ────────────────────────────
+ ╰────
+ help: simplify props or memoize props in the parent component (https://react.dev/reference/react/memo#my-component-rerenders-when-a-prop-is-an-object-or-array).
+
+ ⚠ eslint-plugin-react-perf(jsx-no-new-function-as-props): JSX attribute values should not contain functions created in the same scope.
+ ╭─[jsx_no_new_function_as_props.tsx:1:1]
+ 1 │
+ · ─────────────
+ ╰────
+ help: simplify props or memoize props in the parent component (https://react.dev/reference/react/memo#my-component-rerenders-when-a-prop-is-an-object-or-array).
+
+ ⚠ eslint-plugin-react-perf(jsx-no-new-function-as-props): JSX attribute values should not contain functions created in the same scope.
+ ╭─[jsx_no_new_function_as_props.tsx:1:1]
+ 1 │
+ · ─────────────
+ ╰────
+ help: simplify props or memoize props in the parent component (https://react.dev/reference/react/memo#my-component-rerenders-when-a-prop-is-an-object-or-array).
+
+ ⚠ eslint-plugin-react-perf(jsx-no-new-function-as-props): JSX attribute values should not contain functions created in the same scope.
+ ╭─[jsx_no_new_function_as_props.tsx:1:1]
+ 1 │
+ · ────────────
+ ╰────
+ help: simplify props or memoize props in the parent component (https://react.dev/reference/react/memo#my-component-rerenders-when-a-prop-is-an-object-or-array).
+
+ ⚠ eslint-plugin-react-perf(jsx-no-new-function-as-props): JSX attribute values should not contain functions created in the same scope.
+ ╭─[jsx_no_new_function_as_props.tsx:1:1]
+ 1 │
+ · ────────────
+ ╰────
+ help: simplify props or memoize props in the parent component (https://react.dev/reference/react/memo#my-component-rerenders-when-a-prop-is-an-object-or-array).
+
+
diff --git a/crates/oxc_linter/src/snapshots/jsx_no_new_object_as_prop.snap b/crates/oxc_linter/src/snapshots/jsx_no_new_object_as_prop.snap
new file mode 100644
index 0000000000000..e92c973a47788
--- /dev/null
+++ b/crates/oxc_linter/src/snapshots/jsx_no_new_object_as_prop.snap
@@ -0,0 +1,54 @@
+---
+source: crates/oxc_linter/src/tester.rs
+expression: jsx_no_new_object_as_prop
+---
+ ⚠ eslint-plugin-react-perf(jsx-no-new-object-as-prop): JSX attribute values should not contain objects created in the same scope.
+ ╭─[jsx_no_new_object_as_prop.tsx:1:1]
+ 1 │
+ · ──
+ ╰────
+ help: simplify props or memoize props in the parent component (https://react.dev/reference/react/memo#my-component-rerenders-when-a-prop-is-an-object-or-array).
+
+ ⚠ eslint-plugin-react-perf(jsx-no-new-object-as-prop): JSX attribute values should not contain objects created in the same scope.
+ ╭─[jsx_no_new_object_as_prop.tsx:1:1]
+ 1 │
+ · ────────────
+ ╰────
+ help: simplify props or memoize props in the parent component (https://react.dev/reference/react/memo#my-component-rerenders-when-a-prop-is-an-object-or-array).
+
+ ⚠ eslint-plugin-react-perf(jsx-no-new-object-as-prop): JSX attribute values should not contain objects created in the same scope.
+ ╭─[jsx_no_new_object_as_prop.tsx:1:1]
+ 1 │
+ · ────────
+ ╰────
+ help: simplify props or memoize props in the parent component (https://react.dev/reference/react/memo#my-component-rerenders-when-a-prop-is-an-object-or-array).
+
+ ⚠ eslint-plugin-react-perf(jsx-no-new-object-as-prop): JSX attribute values should not contain objects created in the same scope.
+ ╭─[jsx_no_new_object_as_prop.tsx:1:1]
+ 1 │
+ · ─────────────────
+ ╰────
+ help: simplify props or memoize props in the parent component (https://react.dev/reference/react/memo#my-component-rerenders-when-a-prop-is-an-object-or-array).
+
+ ⚠ eslint-plugin-react-perf(jsx-no-new-object-as-prop): JSX attribute values should not contain objects created in the same scope.
+ ╭─[jsx_no_new_object_as_prop.tsx:1:1]
+ 1 │
+ · ──
+ ╰────
+ help: simplify props or memoize props in the parent component (https://react.dev/reference/react/memo#my-component-rerenders-when-a-prop-is-an-object-or-array).
+
+ ⚠ eslint-plugin-react-perf(jsx-no-new-object-as-prop): JSX attribute values should not contain objects created in the same scope.
+ ╭─[jsx_no_new_object_as_prop.tsx:1:1]
+ 1 │
+ · ──
+ ╰────
+ help: simplify props or memoize props in the parent component (https://react.dev/reference/react/memo#my-component-rerenders-when-a-prop-is-an-object-or-array).
+
+ ⚠ eslint-plugin-react-perf(jsx-no-new-object-as-prop): JSX attribute values should not contain objects created in the same scope.
+ ╭─[jsx_no_new_object_as_prop.tsx:1:1]
+ 1 │
+ · ──
+ ╰────
+ help: simplify props or memoize props in the parent component (https://react.dev/reference/react/memo#my-component-rerenders-when-a-prop-is-an-object-or-array).
+
+
diff --git a/crates/oxc_linter/src/snapshots/no_danger.snap b/crates/oxc_linter/src/snapshots/no_danger.snap
new file mode 100644
index 0000000000000..976c564d64ed7
--- /dev/null
+++ b/crates/oxc_linter/src/snapshots/no_danger.snap
@@ -0,0 +1,33 @@
+---
+source: crates/oxc_linter/src/tester.rs
+expression: no_danger
+---
+ ⚠ eslint-plugin-react(no-danger): Do not use `dangerouslySetInnerHTML` prop
+ ╭─[no_danger.tsx:1:1]
+ 1 │ ;
+ · ───────────────────────
+ ╰────
+ help: `dangerouslySetInnerHTML` is a way to inject HTML into your React component. This is dangerous because it can easily lead to XSS vulnerabilities.
+
+ ⚠ eslint-plugin-react(no-danger): Do not use `dangerouslySetInnerHTML` prop
+ ╭─[no_danger.tsx:1:1]
+ 1 │ ;
+ · ───────────────────────
+ ╰────
+ help: `dangerouslySetInnerHTML` is a way to inject HTML into your React component. This is dangerous because it can easily lead to XSS vulnerabilities.
+
+ ⚠ eslint-plugin-react(no-danger): Do not use `dangerouslySetInnerHTML` prop
+ ╭─[no_danger.tsx:1:1]
+ 1 │ React.createElement("div", { dangerouslySetInnerHTML: { __html: "" } });
+ · ───────────────────────
+ ╰────
+ help: `dangerouslySetInnerHTML` is a way to inject HTML into your React component. This is dangerous because it can easily lead to XSS vulnerabilities.
+
+ ⚠ eslint-plugin-react(no-danger): Do not use `dangerouslySetInnerHTML` prop
+ ╭─[no_danger.tsx:1:1]
+ 1 │ React.createElement("button", { dangerouslySetInnerHTML: { __html: "baz" } }, "Foo");
+ · ───────────────────────
+ ╰────
+ help: `dangerouslySetInnerHTML` is a way to inject HTML into your React component. This is dangerous because it can easily lead to XSS vulnerabilities.
+
+
diff --git a/crates/oxc_linter/src/snapshots/role_supports_aria_props.snap b/crates/oxc_linter/src/snapshots/role_supports_aria_props.snap
new file mode 100644
index 0000000000000..b98675642acda
--- /dev/null
+++ b/crates/oxc_linter/src/snapshots/role_supports_aria_props.snap
@@ -0,0 +1,257 @@
+---
+source: crates/oxc_linter/src/tester.rs
+expression: role_supports_aria_props
+---
+ ⚠ eslint-plugin-jsx-a11y(role-supports-aria-props): The attribute aria-checked is not supported by the role link. This role is implicit on the element a.
+ ╭─[role_supports_aria_props.tsx:1:1]
+ 1 │
+ · ────────────
+ ╰────
+ help: Try to remove invalid attribute aria-checked.
+
+ ⚠ eslint-plugin-jsx-a11y(role-supports-aria-props): The attribute aria-checked is not supported by the role link. This role is implicit on the element area.
+ ╭─[role_supports_aria_props.tsx:1:1]
+ 1 │
+ · ────────────
+ ╰────
+ help: Try to remove invalid attribute aria-checked.
+
+ ⚠ eslint-plugin-jsx-a11y(role-supports-aria-props): The attribute aria-checked is not supported by the role link. This role is implicit on the element link.
+ ╭─[role_supports_aria_props.tsx:1:1]
+ 1 │
+ · ────────────
+ ╰────
+ help: Try to remove invalid attribute aria-checked.
+
+ ⚠ eslint-plugin-jsx-a11y(role-supports-aria-props): The attribute aria-checked is not supported by the role img. This role is implicit on the element img.
+ ╭─[role_supports_aria_props.tsx:1:1]
+ 1 │
+ · ────────────
+ ╰────
+ help: Try to remove invalid attribute aria-checked.
+
+ ⚠ eslint-plugin-jsx-a11y(role-supports-aria-props): The attribute aria-checked is not supported by the role toolbar. This role is implicit on the element menu.
+ ╭─[role_supports_aria_props.tsx:1:1]
+ 1 │
+ · ────────────
+ ╰────
+ help: Try to remove invalid attribute aria-checked.
+
+ ⚠ eslint-plugin-jsx-a11y(role-supports-aria-props): The attribute aria-checked is not supported by the role complementary. This role is implicit on the element aside.
+ ╭─[role_supports_aria_props.tsx:1:1]
+ 1 │
+ · ────────────
+ ╰────
+ help: Try to remove invalid attribute aria-checked.
+
+ ⚠ eslint-plugin-jsx-a11y(role-supports-aria-props): The attribute aria-expanded is not supported by the role list. This role is implicit on the element ul.
+ ╭─[role_supports_aria_props.tsx:1:1]
+ 1 │
+ · ─────────────
+ ╰────
+ help: Try to remove invalid attribute aria-expanded.
+
+ ⚠ eslint-plugin-jsx-a11y(role-supports-aria-props): The attribute aria-expanded is not supported by the role group. This role is implicit on the element details.
+ ╭─[role_supports_aria_props.tsx:1:1]
+ 1 │
+ · ─────────────
+ ╰────
+ help: Try to remove invalid attribute aria-expanded.
+
+ ⚠ eslint-plugin-jsx-a11y(role-supports-aria-props): The attribute aria-expanded is not supported by the role dialog. This role is implicit on the element dialog.
+ ╭─[role_supports_aria_props.tsx:1:1]
+ 1 │
+ · ─────────────
+ ╰────
+ help: Try to remove invalid attribute aria-expanded.
+
+ ⚠ eslint-plugin-jsx-a11y(role-supports-aria-props): The attribute aria-expanded is not supported by the role complementary. This role is implicit on the element aside.
+ ╭─[role_supports_aria_props.tsx:1:1]
+ 1 │
+ · ─────────────
+ ╰────
+ help: Try to remove invalid attribute aria-expanded.
+
+ ⚠ eslint-plugin-jsx-a11y(role-supports-aria-props): The attribute aria-expanded is not supported by the role article. This role is implicit on the element article.
+ ╭─[role_supports_aria_props.tsx:1:1]
+ 1 │
+ · ─────────────
+ ╰────
+ help: Try to remove invalid attribute aria-expanded.
+
+ ⚠ eslint-plugin-jsx-a11y(role-supports-aria-props): The attribute aria-expanded is not supported by the role document. This role is implicit on the element body.
+ ╭─[role_supports_aria_props.tsx:1:1]
+ 1 │
+ · ─────────────
+ ╰────
+ help: Try to remove invalid attribute aria-expanded.
+
+ ⚠ eslint-plugin-jsx-a11y(role-supports-aria-props): The attribute aria-expanded is not supported by the role listitem. This role is implicit on the element li.
+ ╭─[role_supports_aria_props.tsx:1:1]
+ 1 │
+ · ─────────────
+ ╰────
+ help: Try to remove invalid attribute aria-expanded.
+
+ ⚠ eslint-plugin-jsx-a11y(role-supports-aria-props): The attribute aria-expanded is not supported by the role navigation. This role is implicit on the element nav.
+ ╭─[role_supports_aria_props.tsx:1:1]
+ 1 │
+ · ─────────────
+ ╰────
+ help: Try to remove invalid attribute aria-expanded.
+
+ ⚠ eslint-plugin-jsx-a11y(role-supports-aria-props): The attribute aria-expanded is not supported by the role list. This role is implicit on the element ol.
+ ╭─[role_supports_aria_props.tsx:1:1]
+ 1 │
+ · ─────────────
+ ╰────
+ help: Try to remove invalid attribute aria-expanded.
+
+ ⚠ eslint-plugin-jsx-a11y(role-supports-aria-props): The attribute aria-expanded is not supported by the role status. This role is implicit on the element output.
+ ╭─[role_supports_aria_props.tsx:1:1]
+ 1 │
+ · ─────────────
+ ╰────
+ help: Try to remove invalid attribute aria-expanded.
+
+ ⚠ eslint-plugin-jsx-a11y(role-supports-aria-props): The attribute aria-expanded is not supported by the role region. This role is implicit on the element section.
+ ╭─[role_supports_aria_props.tsx:1:1]
+ 1 │
+ · ─────────────
+ ╰────
+ help: Try to remove invalid attribute aria-expanded.
+
+ ⚠ eslint-plugin-jsx-a11y(role-supports-aria-props): The attribute aria-expanded is not supported by the role rowgroup. This role is implicit on the element tbody.
+ ╭─[role_supports_aria_props.tsx:1:1]
+ 1 │
+ · ─────────────
+ ╰────
+ help: Try to remove invalid attribute aria-expanded.
+
+ ⚠ eslint-plugin-jsx-a11y(role-supports-aria-props): The attribute aria-expanded is not supported by the role rowgroup. This role is implicit on the element tfoot.
+ ╭─[role_supports_aria_props.tsx:1:1]
+ 1 │
+ · ─────────────
+ ╰────
+ help: Try to remove invalid attribute aria-expanded.
+
+ ⚠ eslint-plugin-jsx-a11y(role-supports-aria-props): The attribute aria-expanded is not supported by the role rowgroup. This role is implicit on the element thead.
+ ╭─[role_supports_aria_props.tsx:1:1]
+ 1 │
+ · ─────────────
+ ╰────
+ help: Try to remove invalid attribute aria-expanded.
+
+ ⚠ eslint-plugin-jsx-a11y(role-supports-aria-props): The attribute aria-invalid is not supported by the role radio. This role is implicit on the element input.
+ ╭─[role_supports_aria_props.tsx:1:1]
+ 1 │
+ · ────────────
+ ╰────
+ help: Try to remove invalid attribute aria-invalid.
+
+ ⚠ eslint-plugin-jsx-a11y(role-supports-aria-props): The attribute aria-selected is not supported by the role radio. This role is implicit on the element input.
+ ╭─[role_supports_aria_props.tsx:1:1]
+ 1 │
+ · ─────────────
+ ╰────
+ help: Try to remove invalid attribute aria-selected.
+
+ ⚠ eslint-plugin-jsx-a11y(role-supports-aria-props): The attribute aria-haspopup is not supported by the role radio. This role is implicit on the element input.
+ ╭─[role_supports_aria_props.tsx:1:1]
+ 1 │
+ · ─────────────
+ ╰────
+ help: Try to remove invalid attribute aria-haspopup.
+
+ ⚠ eslint-plugin-jsx-a11y(role-supports-aria-props): The attribute aria-haspopup is not supported by the role checkbox. This role is implicit on the element input.
+ ╭─[role_supports_aria_props.tsx:1:1]
+ 1 │
+ · ─────────────
+ ╰────
+ help: Try to remove invalid attribute aria-haspopup.
+
+ ⚠ eslint-plugin-jsx-a11y(role-supports-aria-props): The attribute aria-invalid is not supported by the role button. This role is implicit on the element input.
+ ╭─[role_supports_aria_props.tsx:1:1]
+ 1 │
+ · ────────────
+ ╰────
+ help: Try to remove invalid attribute aria-invalid.
+
+ ⚠ eslint-plugin-jsx-a11y(role-supports-aria-props): The attribute aria-invalid is not supported by the role button. This role is implicit on the element input.
+ ╭─[role_supports_aria_props.tsx:1:1]
+ 1 │
+ · ────────────
+ ╰────
+ help: Try to remove invalid attribute aria-invalid.
+
+ ⚠ eslint-plugin-jsx-a11y(role-supports-aria-props): The attribute aria-invalid is not supported by the role button. This role is implicit on the element input.
+ ╭─[role_supports_aria_props.tsx:1:1]
+ 1 │
+ · ────────────
+ ╰────
+ help: Try to remove invalid attribute aria-invalid.
+
+ ⚠ eslint-plugin-jsx-a11y(role-supports-aria-props): The attribute aria-invalid is not supported by the role menuitem. This role is implicit on the element menuitem.
+ ╭─[role_supports_aria_props.tsx:1:1]
+ 1 │
+ · ────────────
+ ╰────
+ help: Try to remove invalid attribute aria-invalid.
+
+ ⚠ eslint-plugin-jsx-a11y(role-supports-aria-props): The attribute aria-selected is not supported by the role menuitemradio. This role is implicit on the element menuitem.
+ ╭─[role_supports_aria_props.tsx:1:1]
+ 1 │
+ · ─────────────
+ ╰────
+ help: Try to remove invalid attribute aria-selected.
+
+ ⚠ eslint-plugin-jsx-a11y(role-supports-aria-props): The attribute aria-haspopup is not supported by the role toolbar. This role is implicit on the element menu.
+ ╭─[role_supports_aria_props.tsx:1:1]
+ 1 │
+ · ─────────────
+ ╰────
+ help: Try to remove invalid attribute aria-haspopup.
+
+ ⚠ eslint-plugin-jsx-a11y(role-supports-aria-props): The attribute aria-invalid is not supported by the role toolbar. This role is implicit on the element menu.
+ ╭─[role_supports_aria_props.tsx:1:1]
+ 1 │
+ · ────────────
+ ╰────
+ help: Try to remove invalid attribute aria-invalid.
+
+ ⚠ eslint-plugin-jsx-a11y(role-supports-aria-props): The attribute aria-expanded is not supported by the role toolbar. This role is implicit on the element menu.
+ ╭─[role_supports_aria_props.tsx:1:1]
+ 1 │
+ · ─────────────
+ ╰────
+ help: Try to remove invalid attribute aria-expanded.
+
+ ⚠ eslint-plugin-jsx-a11y(role-supports-aria-props): The attribute aria-invalid is not supported by the role link. This role is implicit on the element link.
+ ╭─[role_supports_aria_props.tsx:1:1]
+ 1 │
+ · ────────────
+ ╰────
+ help: Try to remove invalid attribute aria-invalid.
+
+ ⚠ eslint-plugin-jsx-a11y(role-supports-aria-props): The attribute aria-invalid is not supported by the role link. This role is implicit on the element area.
+ ╭─[role_supports_aria_props.tsx:1:1]
+ 1 │
+ · ────────────
+ ╰────
+ help: Try to remove invalid attribute aria-invalid.
+
+ ⚠ eslint-plugin-jsx-a11y(role-supports-aria-props): The attribute aria-invalid is not supported by the role link. This role is implicit on the element a.
+ ╭─[role_supports_aria_props.tsx:1:1]
+ 1 │
+ · ────────────
+ ╰────
+ help: Try to remove invalid attribute aria-invalid.
+
+ ⚠ eslint-plugin-jsx-a11y(role-supports-aria-props): The attribute aria-checked is not supported by the role link. This role is implicit on the element a.
+ ╭─[role_supports_aria_props.tsx:1:1]
+ 1 │
+ · ────────────
+ ╰────
+ help: Try to remove invalid attribute aria-checked.
+
+
diff --git a/crates/oxc_linter/src/snapshots/tabindex_no_positive.snap b/crates/oxc_linter/src/snapshots/tabindex_no_positive.snap
new file mode 100644
index 0000000000000..e2e2cfde9f580
--- /dev/null
+++ b/crates/oxc_linter/src/snapshots/tabindex_no_positive.snap
@@ -0,0 +1,40 @@
+---
+source: crates/oxc_linter/src/tester.rs
+expression: tabindex_no_positive
+---
+ ⚠ eslint-plugin-jsx-a11y(tabindex-no-positive): Avoid positive integer values for tabIndex.
+ ╭─[tabindex_no_positive.tsx:1:1]
+ 1 │
+ · ────────────
+ ╰────
+ help: Change the tabIndex prop to a non-negative value
+
+ ⚠ eslint-plugin-jsx-a11y(tabindex-no-positive): Avoid positive integer values for tabIndex.
+ ╭─[tabindex_no_positive.tsx:1:1]
+ 1 │
+ · ────────────
+ ╰────
+ help: Change the tabIndex prop to a non-negative value
+
+ ⚠ eslint-plugin-jsx-a11y(tabindex-no-positive): Avoid positive integer values for tabIndex.
+ ╭─[tabindex_no_positive.tsx:1:1]
+ 1 │
+ · ──────────────
+ ╰────
+ help: Change the tabIndex prop to a non-negative value
+
+ ⚠ eslint-plugin-jsx-a11y(tabindex-no-positive): Avoid positive integer values for tabIndex.
+ ╭─[tabindex_no_positive.tsx:1:1]
+ 1 │
+ · ──────────────
+ ╰────
+ help: Change the tabIndex prop to a non-negative value
+
+ ⚠ eslint-plugin-jsx-a11y(tabindex-no-positive): Avoid positive integer values for tabIndex.
+ ╭─[tabindex_no_positive.tsx:1:1]
+ 1 │
+ · ────────────────
+ ╰────
+ help: Change the tabIndex prop to a non-negative value
+
+