Skip to content

Commit 86d7ac8

Browse files
committed
chore: add more test cases
1 parent 499e261 commit 86d7ac8

File tree

2 files changed

+134
-58
lines changed

2 files changed

+134
-58
lines changed

lib/rules/no-render-return-undefined.js

Lines changed: 50 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -28,72 +28,67 @@ module.exports = {
2828
},
2929

3030
create(context) {
31-
return {
32-
FunctionDeclaration(node) {
33-
const fnName = node.id.name;
34-
const isReactComponent = fnName[0] === fnName[0].toUpperCase();
35-
const returnStatement = astUtil.findReturnStatement(node);
31+
const handleFunctionalComponents = (node) => {
32+
const fnName = (node.id && node.id.name) || node.parent.id.name;
33+
const isReactComponent = fnName[0] === fnName[0].toUpperCase();
34+
const returnStatement = astUtil.findReturnStatement(node);
3635

37-
if (!isReactComponent) return;
36+
if (!isReactComponent) return;
3837

39-
const variables = variableUtil.variablesInScope(context);
40-
const returnNode = returnStatement && returnStatement.argument;
41-
const returnIdentifierName = returnNode && returnNode.name;
42-
const returnIdentifierVar = variableUtil.getVariable(
43-
variables,
44-
returnIdentifierName
45-
);
46-
const returnIdentifierValue = (() => {
47-
if (!returnNode) return undefined;
38+
const variables = variableUtil.variablesInScope(context);
39+
const returnNode = returnStatement && returnStatement.argument;
40+
const returnIdentifierName = returnNode && returnNode.name;
41+
const returnIdentifierVar = variableUtil.getVariable(
42+
variables,
43+
returnIdentifierName
44+
);
45+
const returnIdentifierValue = (() => {
46+
if (!returnNode) return undefined;
47+
if (
48+
returnIdentifierVar
49+
&& returnIdentifierVar.defs
50+
&& returnIdentifierVar.defs[0]
51+
) {
52+
const value = returnIdentifierVar.defs[0].node.init;
4853
if (
49-
returnIdentifierVar
50-
&& returnIdentifierVar.defs
51-
&& returnIdentifierVar.defs[0]
54+
returnIdentifierVar.defs[0].node.type === 'VariableDeclarator'
55+
&& value === null
5256
) {
53-
const value = returnIdentifierVar.defs[0].node.init;
54-
if (
55-
returnIdentifierVar.defs[0].node.type === 'VariableDeclarator'
56-
&& value === null
57-
) {
58-
return undefined;
59-
}
60-
return value;
57+
return undefined;
6158
}
59+
return value;
60+
}
6261

63-
if (returnNode.type === 'ArrayExpression') {
64-
return returnNode.elements;
65-
}
62+
if (returnNode.type === 'ArrayExpression') {
63+
return returnNode.elements;
64+
}
6665

67-
if (returnNode.type === 'JSXElement') {
68-
return returnNode;
69-
}
66+
if (returnNode.type === 'JSXElement') {
67+
return returnNode;
68+
}
7069

71-
return returnNode.value;
72-
})();
70+
return returnNode.value;
71+
})();
7372

74-
// console.log('DEBUG', returnIdentifierValue);
73+
const returnsArrayHavingUndefined = Array.isArray(returnIdentifierValue)
74+
&& returnIdentifierValue.some((el) => el.type === 'Identifier' && el.name === 'undefined');
7575

76-
const returnsArrayHavingUndefined = Array.isArray(returnIdentifierValue)
77-
&& returnIdentifierValue.some((el) => el.type === 'Identifier' && el.name === 'undefined');
76+
if (
77+
!returnStatement
78+
|| returnIdentifierName === 'undefined'
79+
|| returnIdentifierValue === undefined
80+
|| (returnIdentifierValue && returnIdentifierValue.name === 'undefined')
81+
|| returnsArrayHavingUndefined
82+
) {
83+
report(context, messages.returnsUndefined, 'returnsUndefined', {
84+
node,
85+
});
86+
}
87+
};
7888

79-
if (
80-
!returnStatement
81-
|| returnIdentifierName === 'undefined'
82-
|| returnIdentifierValue === undefined
83-
|| (returnIdentifierValue && returnIdentifierValue.name === 'undefined')
84-
|| returnsArrayHavingUndefined
85-
) {
86-
report(context, messages.returnsUndefined, 'returnsUndefined', {
87-
node,
88-
});
89-
}
90-
},
91-
// FunctionExpression(node) {
92-
// // console.log('DEBUG fn expression', node);
93-
// },
94-
// ArrowFunctionExpression(node) {
95-
// // console.log('DEBUG fn arrow function', node);
96-
// },
89+
return {
90+
FunctionDeclaration: handleFunctionalComponents,
91+
ArrowFunctionExpression: handleFunctionalComponents,
9792
};
9893
},
9994
};

tests/lib/rules/no-render-return-undefined.js

Lines changed: 84 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,13 @@ ruleTester.run('no-render-return-undefined', rule, {
3636
}
3737
`,
3838
},
39+
{
40+
code: `
41+
const App = () => {
42+
return 123;
43+
}
44+
`,
45+
},
3946
{
4047
code: `
4148
function App() {
@@ -85,6 +92,32 @@ ruleTester.run('no-render-return-undefined', rule, {
8592
}
8693
`,
8794
},
95+
{
96+
code: `
97+
function App() {
98+
return <Component></Component>;
99+
}
100+
`,
101+
},
102+
{
103+
code: `
104+
function App() {
105+
return (
106+
<Component>
107+
<ABC />
108+
</Component>
109+
);
110+
}
111+
`,
112+
},
113+
{
114+
code: `
115+
const ui = <Component />;
116+
function App() {
117+
return ui;
118+
}
119+
`,
120+
},
88121
]),
89122
invalid: parsers.all([
90123
{
@@ -93,6 +126,28 @@ ruleTester.run('no-render-return-undefined', rule, {
93126
`,
94127
errors: [{ messageId: 'returnsUndefined' }],
95128
},
129+
{
130+
code: `
131+
const App = () => {}
132+
`,
133+
errors: [{ messageId: 'returnsUndefined' }],
134+
},
135+
{
136+
code: `
137+
function App() {
138+
return;
139+
}
140+
`,
141+
errors: [{ messageId: 'returnsUndefined' }],
142+
},
143+
{
144+
code: `
145+
const App = () => {
146+
return;
147+
}
148+
`,
149+
errors: [{ messageId: 'returnsUndefined' }],
150+
},
96151
{
97152
code: `
98153
function App() {
@@ -101,6 +156,14 @@ ruleTester.run('no-render-return-undefined', rule, {
101156
`,
102157
errors: [{ messageId: 'returnsUndefined' }],
103158
},
159+
{
160+
code: `
161+
const App = () => {
162+
return undefined;
163+
}
164+
`,
165+
errors: [{ messageId: 'returnsUndefined' }],
166+
},
104167
{
105168
code: `
106169
function App() {
@@ -148,9 +211,27 @@ ruleTester.run('no-render-return-undefined', rule, {
148211
},
149212
{
150213
code: `
151-
function App() {
152-
return [undefined];
153-
}
214+
function App() {
215+
return [undefined];
216+
}
217+
`,
218+
errors: [{ messageId: 'returnsUndefined' }],
219+
},
220+
{
221+
code: `
222+
function App() {
223+
return [undefined, undefined];
224+
}
225+
`,
226+
errors: [{ messageId: 'returnsUndefined' }],
227+
},
228+
{
229+
code: `
230+
function foo() {}
231+
232+
function App() {
233+
return foo();
234+
}
154235
`,
155236
errors: [{ messageId: 'returnsUndefined' }],
156237
},

0 commit comments

Comments
 (0)