diff --git a/lib/rules/require-meta-has-suggestions.js b/lib/rules/require-meta-has-suggestions.js index 563d658e..da15e476 100644 --- a/lib/rules/require-meta-has-suggestions.js +++ b/lib/rules/require-meta-has-suggestions.js @@ -47,7 +47,11 @@ module.exports = { const suggestProp = node.arguments[0].properties.find(prop => utils.getKeyName(prop) === 'suggest'); if (suggestProp) { const staticValue = getStaticValue(suggestProp.value, context.getScope()); - if (!staticValue || (Array.isArray(staticValue.value) && staticValue.value.length > 0)) { + if ( + !staticValue || + (Array.isArray(staticValue.value) && staticValue.value.length > 0) || + (Array.isArray(staticValue.value) && staticValue.value.length === 0 && suggestProp.value.type === 'Identifier') // Array variable can have suggestions pushed to it. + ) { // These are all considered reporting suggestions: // suggest: [{...}] // suggest: getSuggestions() diff --git a/tests/lib/rules/require-meta-has-suggestions.js b/tests/lib/rules/require-meta-has-suggestions.js index b8e6927e..0695e343 100644 --- a/tests/lib/rules/require-meta-has-suggestions.js +++ b/tests/lib/rules/require-meta-has-suggestions.js @@ -55,13 +55,14 @@ ruleTester.run('require-meta-has-suggestions', rule, { } }; `, - // No suggestions reported (empty suggest array in variable), no suggestion property. + // Suggestions reported (pushing to an array variable), suggestion property. ` - const SUGGESTIONS = []; + const suggest = []; + suggest.push({}); module.exports = { - meta: {}, + meta: { hasSuggestions: true }, create(context) { - context.report({node, message, suggest: SUGGESTIONS}); + context.report({node, message, suggest}); } }; `, @@ -235,6 +236,26 @@ ruleTester.run('require-meta-has-suggestions', rule, { `, errors: [{ messageId: 'shouldBeSuggestable', type: 'ObjectExpression', line: 4, column: 17, endLine: 4, endColumn: 19 }], }, + { + // Reports suggestions (in variable, with pushing), no hasSuggestions property, violation should be on `meta` object. + code: ` + const suggest = []; + suggest.push({}); + module.exports = { + meta: {}, + create(context) { context.report({node, message, suggest}); } + }; + `, + output: ` + const suggest = []; + suggest.push({}); + module.exports = { + meta: { hasSuggestions: true }, + create(context) { context.report({node, message, suggest}); } + }; + `, + errors: [{ messageId: 'shouldBeSuggestable', type: 'ObjectExpression', line: 5, column: 17, endLine: 5, endColumn: 19 }], + }, { // Reports suggestions, hasSuggestions property set to false, violation should be on `false` code: `