@@ -29,6 +29,72 @@ const parserOptions = {
2929const ruleTester = new RuleTester ( { parserOptions } ) ;
3030ruleTester . run ( 'display-name' , rule , {
3131 valid : parsers . all ( [
32+ {
33+ code : `
34+ import React, { memo, forwardRef } from 'react'
35+
36+ const TestComponent = function () {
37+ {
38+ const memo = (cb) => cb()
39+ const forwardRef = (cb) => cb()
40+ const React = { memo, forwardRef }
41+
42+ const BlockMemo = memo(() => <div>shadowed</div>)
43+ const BlockForwardRef = forwardRef(() => <div>shadowed</div>)
44+ const BlockReactMemo = React.memo(() => <div>shadowed</div>)
45+ }
46+ return null
47+ }
48+ ` ,
49+ } ,
50+ {
51+ code : `
52+ import React, { memo, forwardRef } from 'react'
53+
54+ const Test1 = function (memo) {
55+ return memo(() => <div>param shadowed</div>)
56+ }
57+
58+ const Test2 = function ({ forwardRef }) {
59+ return forwardRef(() => <div>destructured param</div>)
60+ }
61+ ` ,
62+ } ,
63+ {
64+ code : `
65+ import React, { memo, forwardRef } from 'react'
66+
67+ const TestComponent = function () {
68+ function innerFunction() {
69+ const memo = (cb) => cb()
70+ const React = { forwardRef }
71+
72+ const Comp = memo(() => <div>nested</div>)
73+ const ForwardComp = React.forwardRef(() => <div>nested</div>)
74+ return [Comp, ForwardComp]
75+ }
76+ return innerFunction()
77+ }
78+ ` ,
79+ } ,
80+ {
81+ code : `
82+ import React, { memo, forwardRef } from 'react'
83+
84+ const MixedShadowed = function () {
85+ const memo = (cb) => cb()
86+ const { forwardRef } = { forwardRef: () => null }
87+ const [React] = [{ memo, forwardRef }]
88+
89+ const Comp = memo(() => <div>shadowed</div>)
90+ const ReactMemo = React.memo(() => null)
91+ const ReactForward = React.forwardRef((props, ref) => \`\${props} \${ref}\`)
92+ const OtherComp = forwardRef((props, ref) => \`\${props} \${ref}\`)
93+
94+ return [Comp, ReactMemo, ReactForward, OtherComp]
95+ }
96+ ` ,
97+ } ,
3298 {
3399 code : `
34100 var Hello = createReactClass({
@@ -848,6 +914,82 @@ ruleTester.run('display-name', rule, {
848914 ] ) ,
849915
850916 invalid : parsers . all ( [
917+ {
918+ code : `
919+ import React, { memo, forwardRef } from 'react'
920+
921+ const TestComponent = function () {
922+ {
923+ const BlockReactMemo = React.memo(() => {
924+ return <div>not shadowed</div>
925+ })
926+
927+ const BlockMemo = memo(() => {
928+ return <div>not shadowed</div>
929+ })
930+
931+ const BlockForwardRef = forwardRef((props, ref) => {
932+ return \`\${props} \${ref}\`
933+ })
934+ }
935+
936+ return null
937+ }
938+ ` ,
939+ errors : [
940+ { messageId : 'noDisplayName' } ,
941+ { messageId : 'noDisplayName' } ,
942+ { messageId : 'noDisplayName' } ,
943+ ] ,
944+ } ,
945+ {
946+ code : `
947+ import React, { memo, forwardRef } from 'react'
948+
949+ const Test1 = function () {
950+ const Comp = memo(() => <div>not param shadowed</div>)
951+ return Comp
952+ }
953+
954+ const Test2 = function () {
955+ function innerFunction() {
956+ const Comp = memo(() => <div>nested not shadowed</div>)
957+ const ForwardComp = React.forwardRef(() => <div>nested</div>)
958+ return [Comp, ForwardComp]
959+ }
960+ return innerFunction()
961+ }
962+ ` ,
963+ errors : [
964+ { messageId : 'noDisplayName' } ,
965+ { messageId : 'noDisplayName' } ,
966+ { messageId : 'noDisplayName' } ,
967+ ] ,
968+ } ,
969+ {
970+ code : `
971+ import React, { memo, forwardRef } from 'react'
972+
973+ const MixedNotShadowed = function () {
974+ const Comp = memo(() => {
975+ return <div>not shadowed</div>
976+ })
977+ const ReactMemo = React.memo(() => null)
978+ const ReactForward = React.forwardRef((props, ref) => {
979+ return \`\${props} \${ref}\`
980+ })
981+ const OtherComp = forwardRef((props, ref) => \`\${props} \${ref}\`)
982+
983+ return [Comp, ReactMemo, ReactForward, OtherComp]
984+ }
985+ ` ,
986+ errors : [
987+ { messageId : 'noDisplayName' } ,
988+ { messageId : 'noDisplayName' } ,
989+ { messageId : 'noDisplayName' } ,
990+ { messageId : 'noDisplayName' } ,
991+ ] ,
992+ } ,
851993 {
852994 code : `
853995 var Hello = createReactClass({
0 commit comments