From 760f96cc2a14456d3f7839e745e18106d294f011 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Ossa?= Date: Sat, 17 May 2025 23:14:09 -0300 Subject: [PATCH 1/2] docs: fix RulesTable `actualRecommended` The `getActualRecommended` function was returning 'recommended' when `docs.recommended` property was an object. This led to an incorrect value for rule return-await. --- .../src/components/RulesTable/index.tsx | 24 +++++-------------- .../theme/MDXComponents/RuleAttributes.tsx | 23 +++++++++++------- 2 files changed, 21 insertions(+), 26 deletions(-) diff --git a/packages/website/src/components/RulesTable/index.tsx b/packages/website/src/components/RulesTable/index.tsx index 1825fefcb02d..6f25e27e951d 100644 --- a/packages/website/src/components/RulesTable/index.tsx +++ b/packages/website/src/components/RulesTable/index.tsx @@ -10,6 +10,7 @@ import React, { useMemo } from 'react'; import type { HistorySelector } from '../../hooks/useHistorySelector'; import { useHistorySelector } from '../../hooks/useHistorySelector'; +import { getRecommendationWithEmoji } from '../../theme/MDXComponents/RuleAttributes'; import { CONFIG_EMOJI, DEPRECATED_RULE_EMOJI, @@ -35,9 +36,9 @@ function interpolateCode( function getActualRecommended({ docs, -}: RulesMeta[number]): RuleRecommendation | undefined { +}: RulesMeta[number]): ['', ''] | [string, RuleRecommendation] { const recommended = docs.recommended; - return typeof recommended === 'object' ? 'recommended' : recommended; + return recommended ? getRecommendationWithEmoji(recommended) : ['', '']; } function RuleRow({ @@ -50,7 +51,7 @@ function RuleRow({ } const { deprecated, fixable, hasSuggestions } = rule; const { extendsBaseRule, requiresTypeChecking } = rule.docs; - const actualRecommended = getActualRecommended(rule); + const [emoji, actualRecommended] = getActualRecommended(rule); return ( @@ -61,20 +62,7 @@ function RuleRow({ {interpolateCode(rule.docs.description)} - {(() => { - switch (actualRecommended) { - case 'recommended': - return RECOMMENDED_CONFIG_EMOJI; - case 'strict': - return STRICT_CONFIG_EMOJI; - case 'stylistic': - return STYLISTIC_CONFIG_EMOJI; - default: - // for some reason the current version of babel loader won't elide - // this correctly recommended satisfies undefined; - return ''; - } - })()} + {emoji} rules.filter(r => { - const actualRecommended = getActualRecommended(r); + const actualRecommended = getActualRecommended(r)[1]; const opinions = [ match(filters.recommended, actualRecommended === 'recommended'), match( diff --git a/packages/website/src/theme/MDXComponents/RuleAttributes.tsx b/packages/website/src/theme/MDXComponents/RuleAttributes.tsx index 32e1f91af462..0465e126aaad 100644 --- a/packages/website/src/theme/MDXComponents/RuleAttributes.tsx +++ b/packages/website/src/theme/MDXComponents/RuleAttributes.tsx @@ -20,7 +20,10 @@ import { import { Feature } from './Feature'; import styles from './RuleAttributes.module.css'; -const recommendations = { +const recommendations: Record< + RuleRecommendation, + [string, RuleRecommendation] +> = { recommended: [RECOMMENDED_CONFIG_EMOJI, 'recommended'], strict: [STRICT_CONFIG_EMOJI, 'strict'], stylistic: [STYLISTIC_CONFIG_EMOJI, 'stylistic'], @@ -45,19 +48,23 @@ const resolveRecommendation = ( }; const getRecommendation = (docs: RecommendedRuleMetaDataDocs): string[] => { - const recommended = docs.recommended; - const recommendation = - recommendations[ - typeof recommended === 'object' - ? resolveRecommendation(recommended) - : recommended - ]; + const recommendation = getRecommendationWithEmoji(docs.recommended); return docs.requiresTypeChecking ? [recommendation[0], `${recommendation[1]}-type-checked`] : recommendation; }; +export function getRecommendationWithEmoji( + recommended: RecommendedRuleMetaDataDocs['recommended'], +): [string, RuleRecommendation] { + const recommendationKey = + typeof recommended === 'object' + ? resolveRecommendation(recommended) + : recommended; + return recommendations[recommendationKey]; +} + export function RuleAttributes({ name }: { name: string }): React.ReactNode { const rules = useRulesMeta(); const rule = rules.find(rule => rule.name === name); From e3d4089e05dc20910fbd50529921ab7b84bb5de3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Ossa?= Date: Sat, 17 May 2025 23:57:19 -0300 Subject: [PATCH 2/2] docs: fixed `return-await` misleading default options Closes: #11102 --- .../insertions/insertNewRuleReferences.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/website/plugins/generated-rule-docs/insertions/insertNewRuleReferences.ts b/packages/website/plugins/generated-rule-docs/insertions/insertNewRuleReferences.ts index 5c934e2f025e..89230d62a2fb 100644 --- a/packages/website/plugins/generated-rule-docs/insertions/insertNewRuleReferences.ts +++ b/packages/website/plugins/generated-rule-docs/insertions/insertNewRuleReferences.ts @@ -190,9 +190,13 @@ function getRuleDefaultOptions(page: RuleDocsPage): string { return typeof recommended === 'object' ? [ - `const defaultOptionsRecommended: Options = ${defaults};`, - '', - '// These options are merged on top of the recommended defaults', + ...(recommended.recommended + ? [ + `const defaultOptionsRecommended: Options = ${defaults};`, + '', + '// These options are merged on top of the recommended defaults', + ] + : []), `const defaultOptionsStrict: Options = ${JSON.stringify(recommended.strict)};`, ].join('\n') : `const defaultOptions: Options = ${defaults};`;