Skip to content

Tim-W-James/eslint-config

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

61 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ESLint Config React TypeScript

Opinionated ESLint rule set for React and TypeScript. Emphasis on auto-fixable rules that encourage consistency, safety and readability across your code base.

Read this blog post describing my general approach.

Note that ESLint is in the midst of a major upgrade to version 9, which brings with it significant changes to the configuration syntax. The AirBnB configuration - among other related tools - does not yet support v9. For now, all our documentation and approach refers to the 'legacy' ESLint syntax. Therefore, when using this config, make sure to stick with:

  • ESLint 8
  • TSESLint 7 (install @typescript-eslint/parser and @typescript-eslint/eslint-plugin, per the guide on Legacy ESLint Setup )

Install

npm

npm install -D @tim-w-james/eslint-config \
  @typescript-eslint/eslint-plugin@7 \
  @typescript-eslint/parser@7 \
  eslint@8 \
  eslint-config-airbnb \
  eslint-config-airbnb-typescript \
  eslint-config-prettier \
  eslint-plugin-filename-rules \
  eslint-plugin-import \
  eslint-plugin-jest \
  eslint-plugin-jsdoc \
  eslint-plugin-jsx-a11y \
  eslint-plugin-no-secrets \
  eslint-plugin-prefer-arrow-functions \
  eslint-plugin-prettier \
  eslint-plugin-react \
  eslint-plugin-react-hooks \
  eslint-plugin-react-refresh \
  eslint-plugin-simple-import-sort \
  eslint-plugin-sonarjs@^0.25.1 \
  eslint-plugin-tsdoc \
  prettier \
  prettier-plugin-packagejson \
  typescript

yarn

yarn add -D @tim-w-james/eslint-config \
  @typescript-eslint/eslint-plugin@7 \
  @typescript-eslint/parser@7 \
  eslint@8 \
  eslint-config-airbnb \
  eslint-config-airbnb-typescript \
  eslint-config-prettier \
  eslint-plugin-filename-rules \
  eslint-plugin-import \
  eslint-plugin-jest \
  eslint-plugin-jsdoc \
  eslint-plugin-jsx-a11y \
  eslint-plugin-no-secrets \
  eslint-plugin-prefer-arrow-functions \
  eslint-plugin-prettier \
  eslint-plugin-react \
  eslint-plugin-react-hooks \
  eslint-plugin-react-refresh \
  eslint-plugin-simple-import-sort \
  eslint-plugin-sonarjs@^0.25.1 \
  eslint-plugin-tsdoc \
  prettier \
  prettier-plugin-packagejson \
  typescript

pnpm

pnpm add -D @tim-w-james/eslint-config \
  @typescript-eslint/eslint-plugin@7 \
  @typescript-eslint/parser@7 \
  eslint@8 \
  eslint-config-airbnb \
  eslint-config-airbnb-typescript \
  eslint-config-prettier \
  eslint-plugin-filename-rules \
  eslint-plugin-import \
  eslint-plugin-jest \
  eslint-plugin-jsdoc \
  eslint-plugin-jsx-a11y \
  eslint-plugin-no-secrets \
  eslint-plugin-prefer-arrow-functions \
  eslint-plugin-prettier \
  eslint-plugin-react \
  eslint-plugin-react-hooks \
  eslint-plugin-react-refresh \
  eslint-plugin-simple-import-sort \
  eslint-plugin-sonarjs@^0.25.1 \
  eslint-plugin-tsdoc \
  prettier \
  prettier-plugin-packagejson \
  typescript

install-peerdeps

npx install-peerdeps --dev @tim-w-james/eslint-config

Once installed, bump the minimum versions to the latest/desired versions.

Usage

Add to your eslintrc config (for ESLint version 8):

module.exports = {
+  parser: "@typescript-eslint/parser",
  parserOptions: {
+    project: "./tsconfig.json",
+    ecmaVersion: 2018,
+    sourceType: "module",
+    tsconfigRootDir: __dirname,
  },
  extends: [
+  "@tim-w-james",
  ...
  ],
  rules: {
    ...
  }
};

Ecosystem

  • react
  • typescript
  • prettier
  • tsdoc
  • jest

Extends

  • airbnb
  • sonarjs
  • jsx-ally
  • import