I added all the recommended rules from the eslint docs to my .eslintrc.js file and they all throw 'Definition for rule was not found'

Viewed 1430

Here's the contents of my .eslintrc.js file:

module.exports = {
    parser: '@typescript-eslint/parser',
    parserOptions: {
        project: 'tsconfig.json',
        sourceType: 'module'
    },
    plugins: ['@typescript-eslint/eslint-plugin'],
    extends: [
        'eslint:recommended',
        'plugin:@typescript-eslint/recommended',
        'plugin:prettier/recommended',
        'plugin:@typescript-eslint/recommended-requiring-type-checking'
    ],
    root: true,
    env: {
        node: true,
        jest: true
    },
    ignorePatterns: ['.eslintrc.js'],
    rules: {
        '@typescript-eslint/explicit-function-return-type': 'error',
        '@typescript-eslint/explicit-module-boundary-types': 'error',
        '@typescript-eslint/for-direction': 'error',
        '@typescript-eslint/getter-return': 'error',
        '@typescript-eslint/interface-name-prefix': 'off',
        '@typescript-eslint/no-async-promise-executor': 'error',
        '@typescript-eslint/no-await-in-loop': 'error',
        '@typescript-eslint/no-class-assign': 'error',
        '@typescript-eslint/no-compare-neg-zero': 'error',
        '@typescript-eslint/no-cond-assign': 'error',
        '@typescript-eslint/no-const-assign': 'error',
        '@typescript-eslint/no-constant-condition': 'error',
        '@typescript-eslint/no-constructor-return': 'error',
        '@typescript-eslint/no-control-regex': 'error',
        '@typescript-eslint/no-debugger': 'error',
        '@typescript-eslint/no-dupe-args': 'error',
        '@typescript-eslint/no-dupe-class-members': 'error',
        '@typescript-eslint/no-dupe-else-if': 'error',
        '@typescript-eslint/no-dupe-keys': 'error',
        '@typescript-eslint/no-duplicate-case': 'error',
        '@typescript-eslint/no-duplicate-imports': 'error',
        '@typescript-eslint/no-empty-character-class': 'error',
        '@typescript-eslint/no-empty-pattern': 'error',
        '@typescript-eslint/no-ex-assign': 'error',
        '@typescript-eslint/no-explicit-any': 'error',
        '@typescript-eslint/no-fallthrough': 'error',
        '@typescript-eslint/no-func-assign': 'error',
        '@typescript-eslint/no-import-assign': 'error',
        '@typescript-eslint/no-inner-declarations': 'error',
        '@typescript-eslint/no-invalid-regexp': 'error',
        '@typescript-eslint/no-irregular-whitespace': 'error',
        '@typescript-eslint/no-loss-of-precision': 'error',
        '@typescript-eslint/no-misleading-character-class': 'error',
        '@typescript-eslint/no-new-symbol': 'error',
        '@typescript-eslint/no-obj-calls': 'error',
        '@typescript-eslint/no-promise-executor-return': 'error',
        '@typescript-eslint/no-prototype-builtins': 'error',
        '@typescript-eslint/no-self-assign': 'error',
        '@typescript-eslint/no-self-compare': 'error',
        '@typescript-eslint/no-setter-return': 'error',
        '@typescript-eslint/no-sparse-arrays': 'error',
        '@typescript-eslint/no-template-curly-in-string': 'error',
        '@typescript-eslint/no-this-before-super': 'error',
        '@typescript-eslint/no-undef': 'error',
        '@typescript-eslint/no-unexpected-multiline': 'error',
        '@typescript-eslint/no-unmodified-loop-condition': 'error',
        '@typescript-eslint/no-unreachable': 'error',
        '@typescript-eslint/no-unreachable-loop': 'error',
        '@typescript-eslint/no-unsafe-finally': 'error',
        '@typescript-eslint/no-unsafe-negation': 'error',
        '@typescript-eslint/no-unsafe-optional-chaining': 'error',
        '@typescript-eslint/no-unused-expressions': 'error',
        '@typescript-eslint/no-unused-labels': 'error',
        '@typescript-eslint/no-unused-private-class-members': 'error',
        '@typescript-eslint/no-unused-vars': 'error',
        '@typescript-eslint/no-use-before-define': 'error',
        '@typescript-eslint/no-useless-backreference': 'error',
        '@typescript-eslint/require-atomic-updates': 'error',
        '@typescript-eslint/use-isnan ': 'error',
        '@typescript-eslint/valid-typeof': 'error',
        curly: 'error'
    }
};

package.json contents:

...
  "scripts": {
    "lint": "eslint \"{src,libs}/**/*.ts\" --fix",
    "lint:ci": "eslint \"{src,libs}/**/*.ts\"",
...
  "devDependencies": {
    "@typescript-eslint/eslint-plugin": "5.12.1",
    "@typescript-eslint/parser": "5.12.1",
    "eslint": "8.9.0",
    "eslint-config-prettier": "8.4.0",
    "eslint-plugin-import": "2.25.4",
    "eslint-plugin-prettier": "4.0.0",
...

Full error list:

 1:1  error  Definition for rule '@typescript-eslint/for-direction' was not found                    @typescript-eslint/for-direction
  1:1  error  Definition for rule '@typescript-eslint/getter-return' was not found                    @typescript-eslint/getter-return
  1:1  error  Definition for rule '@typescript-eslint/no-async-promise-executor' was not found        @typescript-eslint/no-async-promise-executor
  1:1  error  Definition for rule '@typescript-eslint/no-await-in-loop' was not found                 @typescript-eslint/no-await-in-loop
  1:1  error  Definition for rule '@typescript-eslint/no-class-assign' was not found                  @typescript-eslint/no-class-assign
  1:1  error  Definition for rule '@typescript-eslint/no-compare-neg-zero' was not found              @typescript-eslint/no-compare-neg-zero
  1:1  error  Definition for rule '@typescript-eslint/no-cond-assign' was not found                   @typescript-eslint/no-cond-assign
  1:1  error  Definition for rule '@typescript-eslint/no-const-assign' was not found                  @typescript-eslint/no-const-assign
  1:1  error  Definition for rule '@typescript-eslint/no-constant-condition' was not found            @typescript-eslint/no-constant-condition
  1:1  error  Definition for rule '@typescript-eslint/no-constructor-return' was not found            @typescript-eslint/no-constructor-return
  1:1  error  Definition for rule '@typescript-eslint/no-control-regex' was not found                 @typescript-eslint/no-control-regex
  1:1  error  Definition for rule '@typescript-eslint/no-debugger' was not found                      @typescript-eslint/no-debugger
  1:1  error  Definition for rule '@typescript-eslint/no-dupe-args' was not found                     @typescript-eslint/no-dupe-args
  1:1  error  Definition for rule '@typescript-eslint/no-dupe-else-if' was not found                  @typescript-eslint/no-dupe-else-if
  1:1  error  Definition for rule '@typescript-eslint/no-dupe-keys' was not found                     @typescript-eslint/no-dupe-keys
  1:1  error  Definition for rule '@typescript-eslint/no-duplicate-case' was not found                @typescript-eslint/no-duplicate-case
  1:1  error  Definition for rule '@typescript-eslint/no-empty-character-class' was not found         @typescript-eslint/no-empty-character-class
  1:1  error  Definition for rule '@typescript-eslint/no-empty-pattern' was not found                 @typescript-eslint/no-empty-pattern
  1:1  error  Definition for rule '@typescript-eslint/no-ex-assign' was not found                     @typescript-eslint/no-ex-assign
  1:1  error  Definition for rule '@typescript-eslint/no-fallthrough' was not found                   @typescript-eslint/no-fallthrough
  1:1  error  Definition for rule '@typescript-eslint/no-func-assign' was not found                   @typescript-eslint/no-func-assign
  1:1  error  Definition for rule '@typescript-eslint/no-import-assign' was not found                 @typescript-eslint/no-import-assign
  1:1  error  Definition for rule '@typescript-eslint/no-inner-declarations' was not found            @typescript-eslint/no-inner-declarations
  1:1  error  Definition for rule '@typescript-eslint/no-invalid-regexp' was not found                @typescript-eslint/no-invalid-regexp
  1:1  error  Definition for rule '@typescript-eslint/no-irregular-whitespace' was not found          @typescript-eslint/no-irregular-whitespace
  1:1  error  Definition for rule '@typescript-eslint/no-misleading-character-class' was not found    @typescript-eslint/no-misleading-character-class
  1:1  error  Definition for rule '@typescript-eslint/no-new-symbol' was not found                    @typescript-eslint/no-new-symbol
  1:1  error  Definition for rule '@typescript-eslint/no-obj-calls' was not found                     @typescript-eslint/no-obj-calls
  1:1  error  Definition for rule '@typescript-eslint/no-promise-executor-return' was not found       @typescript-eslint/no-promise-executor-return
  1:1  error  Definition for rule '@typescript-eslint/no-prototype-builtins' was not found            @typescript-eslint/no-prototype-builtins
  1:1  error  Definition for rule '@typescript-eslint/no-self-assign' was not found                   @typescript-eslint/no-self-assign
  1:1  error  Definition for rule '@typescript-eslint/no-self-compare' was not found                  @typescript-eslint/no-self-compare
  1:1  error  Definition for rule '@typescript-eslint/no-setter-return' was not found                 @typescript-eslint/no-setter-return
  1:1  error  Definition for rule '@typescript-eslint/no-sparse-arrays' was not found                 @typescript-eslint/no-sparse-arrays
  1:1  error  Definition for rule '@typescript-eslint/no-template-curly-in-string' was not found      @typescript-eslint/no-template-curly-in-string
  1:1  error  Definition for rule '@typescript-eslint/no-this-before-super' was not found             @typescript-eslint/no-this-before-super
  1:1  error  Definition for rule '@typescript-eslint/no-undef' was not found                         @typescript-eslint/no-undef
  1:1  error  Definition for rule '@typescript-eslint/no-unexpected-multiline' was not found          @typescript-eslint/no-unexpected-multiline
  1:1  error  Definition for rule '@typescript-eslint/no-unmodified-loop-condition' was not found     @typescript-eslint/no-unmodified-loop-condition
  1:1  error  Definition for rule '@typescript-eslint/no-unreachable' was not found                   @typescript-eslint/no-unreachable
  1:1  error  Definition for rule '@typescript-eslint/no-unreachable-loop' was not found              @typescript-eslint/no-unreachable-loop
  1:1  error  Definition for rule '@typescript-eslint/no-unsafe-finally' was not found                @typescript-eslint/no-unsafe-finally
  1:1  error  Definition for rule '@typescript-eslint/no-unsafe-negation' was not found               @typescript-eslint/no-unsafe-negation
  1:1  error  Definition for rule '@typescript-eslint/no-unsafe-optional-chaining' was not found      @typescript-eslint/no-unsafe-optional-chaining
  1:1  error  Definition for rule '@typescript-eslint/no-unused-labels' was not found                 @typescript-eslint/no-unused-labels
  1:1  error  Definition for rule '@typescript-eslint/no-unused-private-class-members' was not found  @typescript-eslint/no-unused-private-class-members
  1:1  error  Definition for rule '@typescript-eslint/no-useless-backreference' was not found         @typescript-eslint/no-useless-backreference
  1:1  error  Definition for rule '@typescript-eslint/require-atomic-updates' was not found           @typescript-eslint/require-atomic-updates
  1:1  error  Definition for rule '@typescript-eslint/use-isnan ' was not found                       @typescript-eslint/use-isnan 
  1:1  error  Definition for rule '@typescript-eslint/valid-typeof' was not found                     @typescript-eslint/valid-typeof

I don't really know what else I need to add to my configuration to make eslint work with the recommended rules. I've been pouring over the docs and it feels like I'm just trying things at random to try to get the errors to disappear.

1 Answers

The error comes from ESLint thinking that the TypeScript rule is a missing rule.

Although your package.json specifies the correct version for @typescript-eslint/eslint-plugin and @typescript-eslint/parser, double-check that your project is indeed using the correct version.

Run the following commands:

npm ls @typescript-eslint/eslint-plugin
npm ls @typescript-eslint/parser

If they are not both 5.12.1, try to update them to that version.

npm install --save-dev @typescript-eslint/eslint-plugin@5.12.1
npm install --save-dev @typescript-eslint/parser@5.12.1

Note: according to the author, if you installed ESLint globally, then install @typescript-eslint/eslint-plugin globally as well (use -g instead of --save-dev).

Related