Skip to content

Commit fffa881

Browse files
authored
Fix: Fix false positive with empty array variable in require-meta-has-suggestions rule (#171)
1 parent e362487 commit fffa881

File tree

2 files changed

+30
-5
lines changed

2 files changed

+30
-5
lines changed

lib/rules/require-meta-has-suggestions.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,11 @@ module.exports = {
4747
const suggestProp = node.arguments[0].properties.find(prop => utils.getKeyName(prop) === 'suggest');
4848
if (suggestProp) {
4949
const staticValue = getStaticValue(suggestProp.value, context.getScope());
50-
if (!staticValue || (Array.isArray(staticValue.value) && staticValue.value.length > 0)) {
50+
if (
51+
!staticValue ||
52+
(Array.isArray(staticValue.value) && staticValue.value.length > 0) ||
53+
(Array.isArray(staticValue.value) && staticValue.value.length === 0 && suggestProp.value.type === 'Identifier') // Array variable can have suggestions pushed to it.
54+
) {
5155
// These are all considered reporting suggestions:
5256
// suggest: [{...}]
5357
// suggest: getSuggestions()

tests/lib/rules/require-meta-has-suggestions.js

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,14 @@ ruleTester.run('require-meta-has-suggestions', rule, {
5555
}
5656
};
5757
`,
58-
// No suggestions reported (empty suggest array in variable), no suggestion property.
58+
// Suggestions reported (pushing to an array variable), suggestion property.
5959
`
60-
const SUGGESTIONS = [];
60+
const suggest = [];
61+
suggest.push({});
6162
module.exports = {
62-
meta: {},
63+
meta: { hasSuggestions: true },
6364
create(context) {
64-
context.report({node, message, suggest: SUGGESTIONS});
65+
context.report({node, message, suggest});
6566
}
6667
};
6768
`,
@@ -235,6 +236,26 @@ ruleTester.run('require-meta-has-suggestions', rule, {
235236
`,
236237
errors: [{ messageId: 'shouldBeSuggestable', type: 'ObjectExpression', line: 4, column: 17, endLine: 4, endColumn: 19 }],
237238
},
239+
{
240+
// Reports suggestions (in variable, with pushing), no hasSuggestions property, violation should be on `meta` object.
241+
code: `
242+
const suggest = [];
243+
suggest.push({});
244+
module.exports = {
245+
meta: {},
246+
create(context) { context.report({node, message, suggest}); }
247+
};
248+
`,
249+
output: `
250+
const suggest = [];
251+
suggest.push({});
252+
module.exports = {
253+
meta: { hasSuggestions: true },
254+
create(context) { context.report({node, message, suggest}); }
255+
};
256+
`,
257+
errors: [{ messageId: 'shouldBeSuggestable', type: 'ObjectExpression', line: 5, column: 17, endLine: 5, endColumn: 19 }],
258+
},
238259
{
239260
// Reports suggestions, hasSuggestions property set to false, violation should be on `false`
240261
code: `

0 commit comments

Comments
 (0)