Skip to content

Commit 36f7924

Browse files
authored
fix: 'polymorphicPropName' not work with 'no-void-elements-with-children' (#1108)
1 parent 5228468 commit 36f7924

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

packages/plugins/eslint-plugin-react-dom/src/rules/no-void-elements-with-children.spec.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,20 @@ ruleTester.run(RULE_NAME, rule, {
3232
},
3333
],
3434
},
35+
{
36+
code: tsx`<PolyComponent as="img" {...props} children="Foo" />;`,
37+
errors: [
38+
{
39+
messageId: "noVoidElementsWithChildren",
40+
data: { element: "img" },
41+
},
42+
],
43+
settings: {
44+
"react-x": {
45+
polymorphicPropName: "as",
46+
},
47+
},
48+
},
3549
{
3650
code: tsx`<br dangerouslySetInnerHTML={{ __html: "Foo" }} />;`,
3751
errors: [
@@ -46,6 +60,14 @@ ruleTester.run(RULE_NAME, rule, {
4660
...allValid,
4761
"<div>Foo</div>;",
4862
'<div children="Foo" />;',
63+
{
64+
code: tsx`<PolyComponent as="div" children="Foo" />;`,
65+
settings: {
66+
"react-x": {
67+
polymorphicPropName: "as",
68+
},
69+
},
70+
},
4971
'<div dangerouslySetInnerHTML={{ __html: "Foo" }} />;',
5072
],
5173
});

packages/plugins/eslint-plugin-react-dom/src/rules/no-void-elements-with-children.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import type { RuleListener } from "@typescript-eslint/utils/ts-eslint";
33
import type { CamelCase } from "string-ts";
44
import * as ER from "@eslint-react/core";
55

6-
import { createRule } from "../utils";
6+
import { createJsxElementResolver, createRule } from "../utils";
77

88
export const RULE_NAME = "no-void-elements-with-children";
99

@@ -49,9 +49,10 @@ export default createRule<[], MessageID>({
4949
});
5050

5151
export function create(context: RuleContext<MessageID, []>): RuleListener {
52+
const resolver = createJsxElementResolver(context);
5253
return {
5354
JSXElement(node) {
54-
const elementName = ER.getElementType(context, node);
55+
const { domElementType: elementName } = resolver.resolve(node);
5556
if (elementName.length === 0 || !voidElements.has(elementName)) {
5657
return;
5758
}

0 commit comments

Comments
 (0)