Skip to content

Commit 35feffc

Browse files
committed
Fix tests
1 parent bfbdea4 commit 35feffc

File tree

2 files changed

+28
-13
lines changed

2 files changed

+28
-13
lines changed

lib/rules/jsx-no-literals.js

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ const commonPropertiesSchema = {
8585
* ----------------------------------------------------------------------
8686
*
8787
* @typedef ElementConfig
88-
* @property {boolean} isOverride
88+
* @property {'element' | 'override'} type
8989
* @property {boolean} noStrings
9090
* @property {Set<string>} allowedStrings
9191
* @property {boolean} ignoreProps
@@ -102,6 +102,8 @@ const commonPropertiesSchema = {
102102
* @property {Record<string, OverrideConfig>} elementOverrides
103103
*
104104
* @typedef {ElementConfig & OverrideProperty} Config
105+
*
106+
* @typedef {Config | OverrideConfig} ResolvedConfig
105107
*/
106108

107109
/**
@@ -113,7 +115,7 @@ const commonPropertiesSchema = {
113115
function normalizeConfig(config, handleElementOverrides = true) {
114116
/** @type {Config} */
115117
const normalizedConfig = {
116-
isOverride: false,
118+
type: 'element',
117119
noStrings: config.noStrings || false,
118120
allowedStrings: config.allowedStrings
119121
? new Set(map(iterFrom(config.allowedStrings), trimIfString))
@@ -133,8 +135,8 @@ function normalizeConfig(config, handleElementOverrides = true) {
133135
acc.push([
134136
key,
135137
Object.assign(normalizeConfig(value, false), {
138+
type: 'override',
136139
name: key,
137-
isOverride: true,
138140
allowElement: value.allowElement || false,
139141
applyToNestedElements: value.applyToNestedElements !== undefined ? value.applyToNestedElements : true,
140142
}),
@@ -335,7 +337,7 @@ module.exports = {
335337
* Determines whether a given node's value and its immediate parent are
336338
* viable text nodes that can/should be reported on
337339
* @param {ASTNode} node
338-
* @param {Config | OverrideConfig} resolvedConfig
340+
* @param {ResolvedConfig} resolvedConfig
339341
* @returns {boolean}
340342
*/
341343
function isViableTextNode(node, resolvedConfig) {
@@ -395,41 +397,41 @@ module.exports = {
395397
}
396398

397399
/**
398-
* @param {Config | ElementConfig} resolvedConfig
400+
* @param {ResolvedConfig} resolvedConfig
399401
* @returns {boolean}
400402
*/
401403
function shouldAllowElement(resolvedConfig) {
402-
return resolvedConfig.isOverride && !!resolvedConfig.allowElement;
404+
return resolvedConfig.type === 'override' && 'allowElement' in resolvedConfig && !!resolvedConfig.allowElement;
403405
}
404406

405407
/**
406408
* @param {boolean} ancestorIsJSXElement
407-
* @param {Config | ElementConfig} resolvedConfig
409+
* @param {ResolvedConfig} resolvedConfig
408410
* @returns {string}
409411
*/
410412
function defaultMessageId(ancestorIsJSXElement, resolvedConfig) {
411413
if (resolvedConfig.noAttributeStrings && !ancestorIsJSXElement) {
412-
return resolvedConfig.isOverride ? 'noStringsInAttributesInElement' : 'noStringsInAttributes';
414+
return resolvedConfig.type === 'override' ? 'noStringsInAttributesInElement' : 'noStringsInAttributes';
413415
}
414416

415417
if (resolvedConfig.noStrings) {
416-
return resolvedConfig.isOverride ? 'noStringsInJSXInElement' : 'noStringsInJSX';
418+
return resolvedConfig.type === 'override' ? 'noStringsInJSXInElement' : 'noStringsInJSX';
417419
}
418420

419-
return resolvedConfig.isOverride ? 'literalNotInJSXExpressionInElement' : 'literalNotInJSXExpression';
421+
return resolvedConfig.type === 'override' ? 'literalNotInJSXExpressionInElement' : 'literalNotInJSXExpression';
420422
}
421423

422424
/**
423425
* @param {ASTNode} node
424426
* @param {string} messageId
425-
* @param {Config | ElementConfig} resolvedConfig
427+
* @param {ResolvedConfig} resolvedConfig
426428
*/
427429
function reportLiteralNode(node, messageId, resolvedConfig) {
428430
report(context, messages[messageId], messageId, {
429431
node,
430432
data: {
431433
text: getText(context, node).trim(),
432-
element: resolvedConfig.isOverride ? resolvedConfig.name : undefined,
434+
element: resolvedConfig.type === 'override' && 'name' in resolvedConfig ? resolvedConfig.name : undefined,
433435
},
434436
});
435437
}
@@ -499,7 +501,7 @@ module.exports = {
499501
&& !resolvedConfig.ignoreProps
500502
&& !resolvedConfig.allowedStrings.has(node.value.value)
501503
) {
502-
const messageId = resolvedConfig.isOverride ? 'invalidPropValueInElement' : 'invalidPropValue';
504+
const messageId = resolvedConfig.type === 'override' ? 'invalidPropValueInElement' : 'invalidPropValue';
503505
reportLiteralNode(node, messageId, resolvedConfig);
504506
}
505507
}

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -457,6 +457,12 @@ ruleTester.run('jsx-no-literals', rule, {
457457
`,
458458
options: [{ elementOverrides: { 'React.Fragment': { allowElement: true } } }],
459459
},
460+
{
461+
code: `
462+
<div>{'foo'}</div>
463+
`,
464+
options: [{ elementOverrides: { div: { allowElement: true } } }],
465+
},
460466
]),
461467

462468
invalid: parsers.all([
@@ -1143,5 +1149,12 @@ ruleTester.run('jsx-no-literals', rule, {
11431149
options: [{ elementOverrides: { 'React.Fragment': { allowElement: true } } }],
11441150
errors: [{ messageId: 'literalNotInJSXExpression' }],
11451151
},
1152+
{
1153+
code: `
1154+
<div>foo</div>
1155+
`,
1156+
options: [{ elementOverrides: { div: { allowElement: true } } }],
1157+
errors: [{ messageId: 'literalNotInJSXExpression' }],
1158+
},
11461159
]),
11471160
});

0 commit comments

Comments
 (0)