Skip to content

⬅️ Back to Table of Contents

📄 prefer-ast-types-enum

📊 Analysis Summary

Metric Count
🔧 Functions 3
📦 Imports 5

📚 Table of Contents

🛠️ File Location:

📂 packages/eslint-plugin-internal/src/rules/prefer-ast-types-enum.ts

📤 Default Export

export default createRule({ ... })
Property Value
name 'prefer-ast-types-enum'
meta.type 'problem'
meta.docs.description 'Enforce consistent usage of AST_NODE_TYPES, AST_TOKEN_TYPES and DefinitionType enums'
meta.fixable 'code'
meta.messages.preferEnum 'Prefer {{ enumName }}.{{ literal }} over raw literal'
meta.schema []
defaultOptions []

Entry point: create — documented under Functions.


📦 Imports

Name Source
TSESTree @typescript-eslint/utils
DefinitionType @typescript-eslint/scope-manager
AST_NODE_TYPES @typescript-eslint/utils
AST_TOKEN_TYPES @typescript-eslint/utils
createRule ../util/index.js

Functions

create(context: any): { Literal(node: TSESTree.Literal): void; }

Parameters:

  • context any

Returns: { Literal(node: TSESTree.Literal): void; }

Calls:

  • context.report
  • fixer.replaceText
  • ['AST_NODE_TYPES', 'AST_TOKEN_TYPES', 'DefinitionType'].includes
  • isStringLiteral
  • Object.hasOwn
  • report
Code
create(context) {
    const report = (
      enumName: 'AST_NODE_TYPES' | 'AST_TOKEN_TYPES' | 'DefinitionType',
      literal: TSESTree.StringLiteral,
    ): void =>
      context.report({
        node: literal,
        messageId: 'preferEnum',
        data: { enumName, literal: literal.value },
        fix: fixer =>
          fixer.replaceText(literal, `${enumName}.${literal.value}`),
      });

    return {
      Literal(node: TSESTree.Literal): void {
        if (
          node.parent.type === AST_NODE_TYPES.TSEnumMember &&
          ['AST_NODE_TYPES', 'AST_TOKEN_TYPES', 'DefinitionType'].includes(
            node.parent.parent.parent.id.name,
          )
        ) {
          return;
        }

        if (!isStringLiteral(node)) {
          return;
        }

        const value = node.value;

        if (Object.hasOwn(AST_NODE_TYPES, value)) {
          report('AST_NODE_TYPES', node);
        }

        if (Object.hasOwn(AST_TOKEN_TYPES, value)) {
          report('AST_TOKEN_TYPES', node);
        }

        if (Object.hasOwn(DefinitionType, value)) {
          report('DefinitionType', node);
        }
      },
    };
  }

isStringLiteral(node: TSESTree.Literal): node is TSESTree.StringLiteral

Parameters:

  • node TSESTree.Literal

Returns: node is TSESTree.StringLiteral

Code
(
  node: TSESTree.Literal,
): node is TSESTree.StringLiteral => typeof node.value === 'string'

Internal helpers

Declared inside another function in this file.

report(enumName: 'AST_NODE_TYPES' | 'AST_TOKEN_TYPES' | …, literal: TSESTree.StringLiteral): void

Parameters:

  • enumName 'AST_NODE_TYPES' | 'AST_TOKEN_TYPES' | 'DefinitionType'
  • literal TSESTree.StringLiteral

Returns: void

Calls:

  • context.report
Code
(
      enumName: 'AST_NODE_TYPES' | 'AST_TOKEN_TYPES' | 'DefinitionType',
      literal: TSESTree.StringLiteral,
    ): void =>
      context.report({
        node: literal,
        messageId: 'preferEnum',
        data: { enumName, literal: literal.value },
        fix: fixer =>
          fixer.replaceText(literal, `${enumName}.${literal.value}`),
      })

Generated by Syntax Scribe