• Stars
    star
    415
  • Rank 104,301 (Top 3 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created about 8 years ago
  • Updated 3 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

The most strict (yet practical) ESLint config. 53 plugins. 1342 rules. React, Vue, Node, and pure JS/TS.

eslint-config-hardcore

npm code style: prettier

The most strict (yet practical) ESLint config.

Aims to include as many plugins and rules as possible to make your code extremely consistent and robust.

46 plugins. 1226 rules.

Usage

npm install eslint-config-hardcore --save-dev

Available configs:

  • hardcore - base framework-agnostic config
  • hardcore/ts - additional config for TypeScript
  • hardcore/node- additional config for Node.js
  • hardcore/react - additional config for React
  • hardcore/vue - additional config for Vue 3/Nuxt 3
  • hardcore/react-testing-library - additional config for React Testing Library
  • hardcore/jest - additional config for Jest
  • hardcore/fp - additional config for functional programming
  • hardcore/ts-for-js - additional config for linting JavaScript with typescript-eslint

Example .eslintrc.json for a React project:

{
  "root": true,

  "extends": [
    "hardcore",
    "hardcore/react",
    "hardcore/react-testing-library",
    "hardcore/jest",
    "hardcore/fp"
  ],

  "env": {
    "browser": true
  },

  "overrides": [
    {
      "files": ["server/**/*.js"],

      "extends": ["hardcore/node"],

      "env": {
        "browser": false
      }
    }
  ]
}

Example .eslintrc.json for a TypeScript React project:

{
  "root": true,

  "extends": [
    "hardcore",
    "hardcore/react",
    "hardcore/react-testing-library",
    "hardcore/jest",
    "hardcore/fp",
    "hardcore/ts"
  ],

  "parserOptions": {
    "project": "./tsconfig.json"
  },

  "env": {
    "browser": true
  },

  "overrides": [
    {
      "files": ["server/**/*.ts"],

      "extends": ["hardcore/node"],

      "env": {
        "browser": false
      }
    }
  ]
}

Example .eslintrc.json for a Vue 3 project:

{
  "root": true,

  "extends": ["hardcore", "hardcore/vue"],

  "settings": {
    "import/resolver": {
      "alias": {
        "map": [["@", "./src/"]],
        "extensions": [".js", ".vue"]
      }
    }
  }
}

Example .eslintrc.json for a Nuxt 3 project:

{
  "root": true,

  "extends": ["hardcore", "hardcore/vue"],

  "settings": {
    "import/resolver": {
      "alias": {
        "map": [
          ["@", "./"],
          ["#imports", ".nuxt/imports.d.ts"]
        ],

        "extensions": [".js", ".vue"]
      }
    }
  }
}

Example .eslintrc.json for a TypeScript Vue 3 project (depending on project configuration, you might want to change tsconfig.json to tsconfig.app.json):

{
  "root": true,

  "extends": ["hardcore", "hardcore/ts", "hardcore/vue"],

  "parserOptions": {
    "project": "tsconfig.json"
  },

  "overrides": [
    {
      "files": [
        "vite.config.*",
        "vitest.config.*",
        "cypress.config.*",
        "playwright.config.*"
      ],

      "parserOptions": {
        "project": "tsconfig.node.json"
      }
    },

    {
      "files": ["src/**/__tests__/*"],

      "parserOptions": {
        "project": "tsconfig.vitest.json"
      }
    }
  ]
}

Example .eslintrc.json for a TypeScript Nuxt 3 project:

{
  "root": true,

  "extends": ["hardcore", "hardcore/ts", "hardcore/vue"],

  "parserOptions": {
    "project": "tsconfig.json"
  }
}

Configs

hardcore

Base framework-agnostic config.

Plugin Enabled rules
ESLint core rules 184
eslint-plugin-unicorn 94
eslint-plugin-putout 71
eslint-plugin-regexp 72
eslint-plugin-import 34
eslint-plugin-sonarjs 31
HTML ESLint 21
eslint-plugin-promise 13
eslint-plugin-security 12
eslint-plugin-eslint-comments 6
eslint-plugin-sdl 5
eslint-plugin-array-func 3
eslint-plugin-unused-imports 2
eslint-plugin-no-constructor-bind 1
eslint-plugin-no-unsanitized 2
@shopify/eslint-plugin 1
eslint-plugin-no-use-extend-native 1
eslint-plugin-ext 1
eslint-plugin-no-only-tests 1
eslint-plugin-json¹ 1
eslint-plugin-prettier² 1
Total: 566

¹ eslint-plugin-json actually includes 19 rules, but I consider them as one "no-invalid-json" rule. ² eslint-plugin-prettier actually replaces dozens of other formatting rules, but I consider it as one "no-invalid-formatting" rule.

hardcore/ts

Config for TypeScript.

Plugin Enabled rules
typescript-eslint 106
eslint-plugin-etc 10
eslint-plugin-total-functions 8
@shopify/eslint-plugin 3
eslint-plugin-sort-class-members 1
eslint-plugin-decorator-position 1
eslint-plugin-no-explicit-type-exports 1
Total: 130

hardcore/node

Config for Node.js.

Plugin Enabled rules
eslint-plugin-n 35
eslint-plugin-sdl 1
Total: 36

hardcore/react

Config for React.

Plugin Enabled rules
eslint-plugin-react 81
eslint-plugin-styled-components-a11y 33
eslint-plugin-jsx-a11y 34
eslint-plugin-storybook 14
eslint-plugin-react-perf 4
eslint-plugin-react-form-fields 4
eslint-plugin-ssr-friendly 4
@shopify/eslint-plugin 3
eslint-plugin-react-hook-form 3
eslint-plugin-react-hooks 2
eslint-plugin-validate-jsx-nesting 1
Total: 183

hardcore/vue

Config for Vue 3/Nuxt 3.

Plugin Enabled rules
eslint-plugin-vue 158
eslint-plugin-vuejs-accessibility 21
eslint-plugin-vue-scoped-css 13
Total: 192

hardcore/react-testing-library

Config for React Testing Library.

Plugin Enabled rules
eslint-plugin-testing-library 25
Total: 25

hardcore/jest

Config for Jest.

Plugin Enabled rules
eslint-plugin-jest 48
eslint-plugin-jest-dom 11
eslint-plugin-jest-formatting 7
Total: 66

hardcore/fp

Config for functional programming.

Plugin Enabled rules
eslint-plugin-fp 13
eslint-plugin-ramda 24
Total: 37

hardcore/ts-for-js

Config for linting JavaScript with typescript-eslint.

Plugin Enabled rules
typescript-eslint 27
eslint-plugin-etc 4
@shopify/eslint-plugin 2
eslint-plugin-sort-class-members 1
eslint-plugin-decorator-position 1
Total: 35

Did you know you can lint JavaScript code with typescript-eslint?

Use this config to take advantage of typescript-eslint's advanced type-aware rules (like @typescript-eslint/naming-convention and @typescript-eslint/prefer-optional-chain) without the need to switch to writing TypeScript.

  1. First, you'll need to create tsconfig.json in the root of your project. You don't have to specify any options, just {} should do it.
  2. Then add hardcore/ts-for-js to the overrides section in your .eslintrc like this:
{
  "extends": ["hardcore"],

  "env": {
    "browser": true
  },

  "overrides": [
    {
      "files": ["*.js"],
      "extends": ["hardcore/ts-for-js"],
      "parserOptions": {
        "project": "./tsconfig.json"
      }
    }
  ]
}

Changelog

License

MIT