Skip to content

Commit

Permalink
chore: add more test cases
Browse files Browse the repository at this point in the history
  • Loading branch information
akulsr0 committed May 8, 2024
1 parent 499e261 commit 86d7ac8
Show file tree
Hide file tree
Showing 2 changed files with 134 additions and 58 deletions.
105 changes: 50 additions & 55 deletions lib/rules/no-render-return-undefined.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,72 +28,67 @@ module.exports = {
},

create(context) {
return {
FunctionDeclaration(node) {
const fnName = node.id.name;
const isReactComponent = fnName[0] === fnName[0].toUpperCase();
const returnStatement = astUtil.findReturnStatement(node);
const handleFunctionalComponents = (node) => {
const fnName = (node.id && node.id.name) || node.parent.id.name;
const isReactComponent = fnName[0] === fnName[0].toUpperCase();
const returnStatement = astUtil.findReturnStatement(node);

if (!isReactComponent) return;
if (!isReactComponent) return;

const variables = variableUtil.variablesInScope(context);
const returnNode = returnStatement && returnStatement.argument;
const returnIdentifierName = returnNode && returnNode.name;
const returnIdentifierVar = variableUtil.getVariable(
variables,
returnIdentifierName
);
const returnIdentifierValue = (() => {
if (!returnNode) return undefined;
const variables = variableUtil.variablesInScope(context);
const returnNode = returnStatement && returnStatement.argument;
const returnIdentifierName = returnNode && returnNode.name;
const returnIdentifierVar = variableUtil.getVariable(
variables,
returnIdentifierName
);
const returnIdentifierValue = (() => {
if (!returnNode) return undefined;
if (
returnIdentifierVar
&& returnIdentifierVar.defs
&& returnIdentifierVar.defs[0]
) {
const value = returnIdentifierVar.defs[0].node.init;
if (
returnIdentifierVar
&& returnIdentifierVar.defs
&& returnIdentifierVar.defs[0]
returnIdentifierVar.defs[0].node.type === 'VariableDeclarator'
&& value === null
) {
const value = returnIdentifierVar.defs[0].node.init;
if (
returnIdentifierVar.defs[0].node.type === 'VariableDeclarator'
&& value === null
) {
return undefined;
}
return value;
return undefined;
}
return value;
}

if (returnNode.type === 'ArrayExpression') {
return returnNode.elements;
}
if (returnNode.type === 'ArrayExpression') {
return returnNode.elements;
}

if (returnNode.type === 'JSXElement') {
return returnNode;
}
if (returnNode.type === 'JSXElement') {
return returnNode;
}

return returnNode.value;
})();
return returnNode.value;
})();

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

const returnsArrayHavingUndefined = Array.isArray(returnIdentifierValue)
&& returnIdentifierValue.some((el) => el.type === 'Identifier' && el.name === 'undefined');
if (
!returnStatement
|| returnIdentifierName === 'undefined'
|| returnIdentifierValue === undefined
|| (returnIdentifierValue && returnIdentifierValue.name === 'undefined')
|| returnsArrayHavingUndefined
) {
report(context, messages.returnsUndefined, 'returnsUndefined', {
node,
});
}
};

if (
!returnStatement
|| returnIdentifierName === 'undefined'
|| returnIdentifierValue === undefined
|| (returnIdentifierValue && returnIdentifierValue.name === 'undefined')
|| returnsArrayHavingUndefined
) {
report(context, messages.returnsUndefined, 'returnsUndefined', {
node,
});
}
},
// FunctionExpression(node) {
// // console.log('DEBUG fn expression', node);
// },
// ArrowFunctionExpression(node) {
// // console.log('DEBUG fn arrow function', node);
// },
return {
FunctionDeclaration: handleFunctionalComponents,
ArrowFunctionExpression: handleFunctionalComponents,
};
},
};
87 changes: 84 additions & 3 deletions tests/lib/rules/no-render-return-undefined.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,13 @@ ruleTester.run('no-render-return-undefined', rule, {
}
`,
},
{
code: `
const App = () => {
return 123;
}
`,
},
{
code: `
function App() {
Expand Down Expand Up @@ -85,6 +92,32 @@ ruleTester.run('no-render-return-undefined', rule, {
}
`,
},
{
code: `
function App() {
return <Component></Component>;
}
`,
},
{
code: `
function App() {
return (
<Component>
<ABC />
</Component>
);
}
`,
},
{
code: `
const ui = <Component />;
function App() {
return ui;
}
`,
},
]),
invalid: parsers.all([
{
Expand All @@ -93,6 +126,28 @@ ruleTester.run('no-render-return-undefined', rule, {
`,
errors: [{ messageId: 'returnsUndefined' }],
},
{
code: `
const App = () => {}
`,
errors: [{ messageId: 'returnsUndefined' }],
},
{
code: `
function App() {
return;
}
`,
errors: [{ messageId: 'returnsUndefined' }],
},
{
code: `
const App = () => {
return;
}
`,
errors: [{ messageId: 'returnsUndefined' }],
},
{
code: `
function App() {
Expand All @@ -101,6 +156,14 @@ ruleTester.run('no-render-return-undefined', rule, {
`,
errors: [{ messageId: 'returnsUndefined' }],
},
{
code: `
const App = () => {
return undefined;
}
`,
errors: [{ messageId: 'returnsUndefined' }],
},
{
code: `
function App() {
Expand Down Expand Up @@ -148,9 +211,27 @@ ruleTester.run('no-render-return-undefined', rule, {
},
{
code: `
function App() {
return [undefined];
}
function App() {
return [undefined];
}
`,
errors: [{ messageId: 'returnsUndefined' }],
},
{
code: `
function App() {
return [undefined, undefined];
}
`,
errors: [{ messageId: 'returnsUndefined' }],
},
{
code: `
function foo() {}
function App() {
return foo();
}
`,
errors: [{ messageId: 'returnsUndefined' }],
},
Expand Down

0 comments on commit 86d7ac8

Please sign in to comment.