Skip to content

Commit fd9e59f

Browse files
committed
Bump coverage to 100%
1 parent 13ae531 commit fd9e59f

File tree

2 files changed

+34
-27
lines changed

2 files changed

+34
-27
lines changed

lib/rules/jsx-no-literals.js

Lines changed: 21 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -214,28 +214,22 @@ module.exports = {
214214
* @returns {boolean}
215215
*/
216216
function isRequireStatement(node) {
217-
if (!node) return false;
218-
switch (node.type) {
219-
case 'CallExpression':
220-
if (node.callee.type === 'Identifier') {
221-
return node.callee.name === 'require';
222-
}
223-
break;
224-
225-
case 'MemberExpression':
226-
if (node.object.type === 'Super') return false;
227-
return isRequireStatement(node.object);
228-
229-
default:
230-
break;
217+
if (node.type === 'CallExpression') {
218+
if (node.callee.type === 'Identifier') {
219+
return node.callee.name === 'require';
220+
}
221+
} else if (node.type === 'MemberExpression') {
222+
return isRequireStatement(node.object);
231223
}
224+
225+
return false;
232226
}
233227

234228
/**
235229
* Gets the name of the given JSX element. Supports nested
236230
* JSXMemeberExpressions. ie `<Namesapce.Component.SubComponent />`
237231
* @param {ASTNode} node
238-
* @returns {(string | undefined)[]}
232+
* @returns {(string | undefined)[] | undefined}
239233
*/
240234
function getJSXElementName(node) {
241235
if (node.openingElement.name.type === 'JSXIdentifier') {
@@ -255,7 +249,6 @@ module.exports = {
255249
}
256250

257251
current = current.object;
258-
if (!current) break;
259252
}
260253

261254
if (current.type === 'JSXIdentifier') {
@@ -275,8 +268,6 @@ module.exports = {
275268
}
276269
}
277270
}
278-
279-
return [undefined, undefined];
280271
}
281272

282273
/**
@@ -377,15 +368,18 @@ module.exports = {
377368
for (const ancestor of allAncestorElements) {
378369
const isClosestJSXAncestor = ancestor === allAncestorElements[0];
379370

380-
const [ancestorName, compoundAncestorName] = getJSXElementName(ancestor);
381-
if (ancestorName) {
382-
const ancestorConfig = compoundAncestorName
383-
? config.elementOverrides[compoundAncestorName] || config.elementOverrides[ancestorName]
384-
: config.elementOverrides[ancestorName];
385-
386-
if (ancestorConfig) {
387-
if (isClosestJSXAncestor || ancestorConfig.applyToNestedElements) {
388-
return ancestorConfig;
371+
const elementNames = getJSXElementName(ancestor);
372+
if (elementNames && Array.isArray(elementNames) && elementNames.length === 2) {
373+
const [ancestorName, compoundAncestorName] = elementNames;
374+
if (ancestorName) {
375+
const ancestorConfig = compoundAncestorName
376+
? config.elementOverrides[compoundAncestorName] || config.elementOverrides[ancestorName]
377+
: config.elementOverrides[ancestorName];
378+
379+
if (ancestorConfig) {
380+
if (isClosestJSXAncestor || ancestorConfig.applyToNestedElements) {
381+
return ancestorConfig;
382+
}
389383
}
390384
}
391385
}

tests/lib/rules/jsx-no-literals.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -404,6 +404,12 @@ ruleTester.run('jsx-no-literals', rule, {
404404
`,
405405
options: [{ elementOverrides: { T: { allowedStrings: ['foo'] }, U: { allowedStrings: ['foo'] } } }],
406406
},
407+
{
408+
code: `
409+
import { T } from 'foo';
410+
<T>{'foo'}</T>
411+
`,
412+
},
407413
{
408414
code: `
409415
import { T as U } from 'foo';
@@ -432,6 +438,13 @@ ruleTester.run('jsx-no-literals', rule, {
432438
`,
433439
options: [{ elementOverrides: { T: { allowElement: true } } }],
434440
},
441+
{
442+
code: `
443+
const foo = 2;
444+
<T>foo</T>
445+
`,
446+
options: [{ elementOverrides: { T: { allowElement: true } } }],
447+
},
435448
{
436449
code: `
437450
<T.U>foo</T.U>

0 commit comments

Comments
 (0)