From 0847599f404ccf687521f4b8328457ccaac790f3 Mon Sep 17 00:00:00 2001 From: Bryan Mishkin <698306+bmish@users.noreply.github.com> Date: Sat, 10 Jul 2021 13:45:48 -0400 Subject: [PATCH] Fix: Avoid crash with non-static value of `hasSuggestions` in `require-meta-has-suggestions` rule --- lib/rules/require-meta-has-suggestions.js | 4 +-- .../lib/rules/require-meta-has-suggestions.js | 28 +++++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/lib/rules/require-meta-has-suggestions.js b/lib/rules/require-meta-has-suggestions.js index e9b9bdc7..e29a41ce 100644 --- a/lib/rules/require-meta-has-suggestions.js +++ b/lib/rules/require-meta-has-suggestions.js @@ -65,11 +65,11 @@ module.exports = { if (!hasSuggestionsProperty) { // Rule reports suggestions but is missing the `meta.hasSuggestions` property altogether. context.report({ node: metaNode ? metaNode : ruleInfo.create, messageId: 'shouldBeSuggestable' }); - } else if (hasSuggestionsStaticValue.value !== true) { + } else if (hasSuggestionsStaticValue && hasSuggestionsStaticValue.value !== true) { // Rule reports suggestions but does not have `meta.hasSuggestions` property enabled. context.report({ node: hasSuggestionsProperty.value, messageId: 'shouldBeSuggestable' }); } - } else if (!ruleReportsSuggestions && hasSuggestionsProperty && hasSuggestionsStaticValue.value === true) { + } else if (!ruleReportsSuggestions && hasSuggestionsProperty && hasSuggestionsStaticValue && hasSuggestionsStaticValue.value === true) { // Rule does not report suggestions but has the `meta.hasSuggestions` property enabled. context.report({ node: hasSuggestionsProperty.value, messageId: 'shouldNotBeSuggestable' }); } diff --git a/tests/lib/rules/require-meta-has-suggestions.js b/tests/lib/rules/require-meta-has-suggestions.js index f58f9d24..5043b5bf 100644 --- a/tests/lib/rules/require-meta-has-suggestions.js +++ b/tests/lib/rules/require-meta-has-suggestions.js @@ -112,6 +112,34 @@ ruleTester.run('require-meta-has-suggestions', rule, { } }; `, + // Provides suggestions, has hasSuggestions property with no static value available. + ` + module.exports = { + meta: { hasSuggestions: getHasSuggestions() }, + create(context) { + context.report({node, message, suggest: [{}]}); + } + }; + `, + // Provides suggestions, has hasSuggestions property in variable with no static value available + ` + const hasSuggestions = getHasSuggestions(); + module.exports = { + meta: { hasSuggestions }, + create(context) { + context.report({node, message, suggest: [{}]}); + } + }; + `, + // Does not provide suggestions, has hasSuggestions property with no static value available + ` + module.exports = { + meta: { hasSuggestions: getHasSuggestions() }, + create(context) { + context.report({node, message}); + } + }; + `, // Spread syntax. { code: `