Skip to content

⬅️ Back to Table of Contents

📄 index.ts

📊 Analysis Summary

Metric Count
🔧 Functions 2
📦 Imports 18
📊 Variables & Constants 3
⚡ Async/Await Patterns 1

📚 Table of Contents

🛠️ File Location:

📂 packages/website/plugins/generated-rule-docs/index.ts

📦 Imports

Name Source
RuleModuleWithMetaDocs @typescript-eslint/utils/ts-eslint
Plugin unified
pluginRules @typescript-eslint/eslint-plugin/use-at-your-own-risk/rules
fromMarkdown mdast-util-from-markdown
RuleDocsPage ./RuleDocsPage
nodeIsParagraph ../utils/nodes
nodeIsParent ../utils/nodes
isESLintPluginRuleModule ../utils/rules
isVFileWithStem ../utils/rules
addESLintHashToCodeBlocksMeta ./addESLintHashToCodeBlocksMeta
createRuleDocsPage ./createRuleDocsPage
insertBaseRuleReferences ./insertions/insertBaseRuleReferences
insertNewRuleReferences ./insertions/insertNewRuleReferences
insertResources ./insertions/insertResources
insertRuleDescription ./insertions/insertRuleDescription
insertRuleOptions ./insertions/insertRuleOptions
insertWhenNotToUseIt ./insertions/insertWhenNotToUseIt
removeSourceCodeNotice ./removeSourceCodeNotice

Variables & Constants

Name Type Kind Value Exported
rule any let/var pluginRules[file.stem]
eslintrc string let/var `rule.meta.docs.extendsBaseRule
? insertBaseRuleReferences(page)
: await insertNewRuleReferences(page)`
baseRule any const `typeof rule.meta.docs.extendsBaseRule === 'string'
? rule.meta.docs.extendsBaseRule
: stem`

Async/Await Patterns

Type Function Await Expressions Promise Chains
await-expression generatedRuleDocs insertNewRuleReferences(page) none

Functions

generatedRuleDocs(): (root: any, file: any) => Promise<void>

Code
() => {
  return async (root, file) => {
    if (!nodeIsParent(root) || !isVFileWithStem(file)) {
      return;
    }

    const rule = pluginRules[file.stem];
    if (!isESLintPluginRuleModule(rule)) {
      return;
    }

    const page = createRuleDocsPage(root.children, file, rule);

    removeSourceCodeNotice(page);
    insertRuleDescription(page);

    const eslintrc = rule.meta.docs.extendsBaseRule
      ? insertBaseRuleReferences(page)
      : await insertNewRuleReferences(page);

    insertWhenNotToUseIt(page);
    insertResources(page);
    insertRuleOptions(page);
    addESLintHashToCodeBlocksMeta(page, eslintrc);
    insertExtensionNotice(page, rule, file.stem);
  };
}
  • Return Type: (root: any, file: any) => Promise<void>
  • Calls:
  • nodeIsParent (from ../utils/nodes)
  • isVFileWithStem (from ../utils/rules)
  • isESLintPluginRuleModule (from ../utils/rules)
  • createRuleDocsPage (from ./createRuleDocsPage)
  • removeSourceCodeNotice (from ./removeSourceCodeNotice)
  • insertRuleDescription (from ./insertions/insertRuleDescription)
  • insertBaseRuleReferences (from ./insertions/insertBaseRuleReferences)
  • insertNewRuleReferences (from ./insertions/insertNewRuleReferences)
  • insertWhenNotToUseIt (from ./insertions/insertWhenNotToUseIt)
  • insertResources (from ./insertions/insertResources)
  • insertRuleOptions (from ./insertions/insertRuleOptions)
  • addESLintHashToCodeBlocksMeta (from ./addESLintHashToCodeBlocksMeta)
  • insertExtensionNotice

insertExtensionNotice(page: RuleDocsPage, rule: RuleModuleWithMetaDocs<string, unknown[], pluginRules.ESLintPluginDocs>, stem: string): void

Code
function insertExtensionNotice(
  page: RuleDocsPage,
  rule: RuleModuleWithMetaDocs<string, unknown[], pluginRules.ESLintPluginDocs>,
  stem: string,
) {
  if (!rule.meta.docs.extendsBaseRule) {
    return;
  }

  const baseRule =
    typeof rule.meta.docs.extendsBaseRule === 'string'
      ? rule.meta.docs.extendsBaseRule
      : stem;

  const firstParagraph = page.children.find(nodeIsParagraph);

  if (!firstParagraph) {
    if (rule.meta.deprecated) {
      return;
    }

    throw new Error(`Missing first paragraph for extension rule ${stem}.`);
  }

  const addition = fromMarkdown(
    `This rule extends the base [\`${baseRule}\`](https://eslint.org/docs/latest/rules/${baseRule}) rule from ESLint core.`,
  );

  firstParagraph.children.unshift(
    ...(addition.children[0] as mdast.Paragraph).children,
    {
      type: 'text',
      value: ' ',
    },
  );
}
  • Parameters:
  • page: RuleDocsPage
  • rule: RuleModuleWithMetaDocs<string, unknown[], pluginRules.ESLintPluginDocs>
  • stem: string
  • Return Type: void
  • Calls:
  • page.children.find
  • fromMarkdown (from mdast-util-from-markdown)
  • firstParagraph.children.unshift