Skip to content

⬅️ Back to Table of Contents

📄 prefer-enum-initializers

📊 Analysis Summary

Metric Count
🔧 Functions 5
📦 Imports 3
📑 Type Aliases 1

📚 Table of Contents

🛠️ File Location:

📂 packages/eslint-plugin/src/rules/prefer-enum-initializers.ts

📤 Default Export

export default createRule<[], MessageIds>({ ... })
Property Value
name 'prefer-enum-initializers'
meta.type 'suggestion'
meta.docs.description 'Require each enum member value to be explicitly initialized'
meta.hasSuggestions true
meta.messages.defineInitializer "The value of the member '{{ name }}' should be explicitly defined."
meta.messages.defineInitializerSuggestion 'Can be fixed to {{ name }} = {{ suggested }}'
meta.schema []
defaultOptions []

Entry point: create — documented under Functions.


📦 Imports

Name Source
TSESLint @typescript-eslint/utils
TSESTree @typescript-eslint/utils
createRule ../util

Functions

create(context: any): { TSEnumDeclaration: (node: TSESTree.TSEnumDeclaration) => …

Parameters:

  • context any

Returns: { TSEnumDeclaration: (node: TSESTree.TSEnumDeclaration) => void; }

Calls:

  • members.forEach
  • context.sourceCode.getText
  • context.report
  • fixer.replaceText
Code
create(context) {
    function TSEnumDeclaration(node: TSESTree.TSEnumDeclaration): void {
      const { members } = node.body;

      members.forEach((member, index) => {
        if (member.initializer == null) {
          const name = context.sourceCode.getText(member);
          context.report({
            node: member,
            messageId: 'defineInitializer',
            data: {
              name,
            },
            suggest: [
              {
                messageId: 'defineInitializerSuggestion',
                data: { name, suggested: index },
                fix: (fixer): TSESLint.RuleFix => {
                  return fixer.replaceText(member, `${name} = ${index}`);
                },
              },
              {
                messageId: 'defineInitializerSuggestion',
                data: { name, suggested: index + 1 },
                fix: (fixer): TSESLint.RuleFix => {
                  return fixer.replaceText(member, `${name} = ${index + 1}`);
                },
              },
              {
                messageId: 'defineInitializerSuggestion',
                data: { name, suggested: `'${name}'` },
                fix: (fixer): TSESLint.RuleFix => {
                  return fixer.replaceText(member, `${name} = '${name}'`);
                },
              },
            ],
          });
        }
      });
    }

    return {
      TSEnumDeclaration,
    };
  }

Internal helpers

Declared inside another function in this file.

TSEnumDeclaration(node: TSESTree.TSEnumDeclaration): void

Parameters:

  • node TSESTree.TSEnumDeclaration

Returns: void

Calls:

  • members.forEach
  • context.sourceCode.getText
  • context.report
  • fixer.replaceText
Code
function TSEnumDeclaration(node: TSESTree.TSEnumDeclaration): void {
      const { members } = node.body;

      members.forEach((member, index) => {
        if (member.initializer == null) {
          const name = context.sourceCode.getText(member);
          context.report({
            node: member,
            messageId: 'defineInitializer',
            data: {
              name,
            },
            suggest: [
              {
                messageId: 'defineInitializerSuggestion',
                data: { name, suggested: index },
                fix: (fixer): TSESLint.RuleFix => {
                  return fixer.replaceText(member, `${name} = ${index}`);
                },
              },
              {
                messageId: 'defineInitializerSuggestion',
                data: { name, suggested: index + 1 },
                fix: (fixer): TSESLint.RuleFix => {
                  return fixer.replaceText(member, `${name} = ${index + 1}`);
                },
              },
              {
                messageId: 'defineInitializerSuggestion',
                data: { name, suggested: `'${name}'` },
                fix: (fixer): TSESLint.RuleFix => {
                  return fixer.replaceText(member, `${name} = '${name}'`);
                },
              },
            ],
          });
        }
      });
    }

suggest.fix(fixer: any): TSESLint.RuleFix

Parameters:

  • fixer any

Returns: TSESLint.RuleFix

Calls:

  • fixer.replaceText
Code
(fixer): TSESLint.RuleFix => {
                  return fixer.replaceText(member, `${name} = ${index}`);
                }

suggest.fix(fixer: any): TSESLint.RuleFix

Parameters:

  • fixer any

Returns: TSESLint.RuleFix

Calls:

  • fixer.replaceText
Code
(fixer): TSESLint.RuleFix => {
                  return fixer.replaceText(member, `${name} = ${index + 1}`);
                }

suggest.fix(fixer: any): TSESLint.RuleFix

Parameters:

  • fixer any

Returns: TSESLint.RuleFix

Calls:

  • fixer.replaceText
Code
(fixer): TSESLint.RuleFix => {
                  return fixer.replaceText(member, `${name} = '${name}'`);
                }

Type Aliases

MessageIds

type MessageIds = 'defineInitializer' | 'defineInitializerSuggestion';

Generated by Syntax Scribe