Skip to content

SrBrahma/eslint-config-gev

Repository files navigation

npm npm

eslint-config-gev

Curated ESLint configs that I've been improving over the years. All my projects use this.

Since v4, this should be used together with Biome. Internally it uses my other package, the eslint-config-biome. If you want to stay without Biome, use v3 together with Prettier (I recommend prettier-config-gev)

💿 Install:

Run npx eslint-config-gev <flavor>, being flavor one of the following: ts, next, react, react-native, js. This list and further options can be seen by running npx eslint-config-gev --help.

This command adds the required package to your package.json and sets up the .eslintrc.cjs.

Manually

npm i -D eslint-config-gev
  • Add the following to the top of your .eslintrc.js:
// This is a workaround for https://github.com/eslint/eslint/issues/3458
require('@rushstack/eslint-patch/modern-module-resolution');

With it, you won't need to install eslint and all the plugins we use!

Do one of the following

Typescript

  • Add 'eslint-config-gev' (or 'eslint-config-gev/ts') to the extends: [...] field in your eslintrc.

    .eslintrc.js example
    // https://github.com/SrBrahma/eslint-config-gev
    // This is a workaround for https://github.com/eslint/eslint/issues/3458
    require('@rushstack/eslint-patch/modern-module-resolution');
    
    module.exports = {
      root: true,
      env: {
        es2021: true,
        node: true,
      },
      extends: ['eslint-config-gev/js'],
      overrides: [
        {
          files: ['*.ts'],
          extends: ['eslint-config-gev/ts'],
          parser: '@typescript-eslint/parser',
          parserOptions: {
            tsconfigRootDir: __dirname,
            project: ['./tsconfig.json'],
            ecmaVersion: 12,
            sourceType: 'module',
          },
        },
      ],
      ignorePatterns: ['/lib/**/*', '/dist/**/*'],
      rules: {},
    };

Javascript

  • Add 'eslint-config-gev/js' to the extends: [...] field in your eslintrc.

    .eslintrc.js example
    // https://github.com/SrBrahma/eslint-config-gev
    // This is a workaround for https://github.com/eslint/eslint/issues/3458
    require('@rushstack/eslint-patch/modern-module-resolution');
    module.exports = {
      root: true,
      env: {
        es2021: true,
        node: true,
      },
      extends: ['eslint-config-gev/js'],
      ignorePatterns: [],
      rules: {},
    };

React

Typescript

  • Add 'eslint-config-gev/react' to the extends: [...] field in your eslintrc.

    .eslintrc.js example
    // https://github.com/SrBrahma/eslint-config-gev
    // This is a workaround for https://github.com/eslint/eslint/issues/3458
    require('@rushstack/eslint-patch/modern-module-resolution');
    
    module.exports = {
      root: true,
      env: {
        es2021: true,
        node: true,
      },
      extends: ['eslint-config-gev/react-js'],
      overrides: [
        {
          files: ['*.ts', '*.tsx'],
          extends: ['eslint-config-gev/react'],
          parser: '@typescript-eslint/parser',
          parserOptions: {
            tsconfigRootDir: __dirname,
            project: ['./tsconfig.json'],
            ecmaVersion: 12,
            sourceType: 'module',
            ecmaFeatures: {
              jsx: true,
            },
          },
        },
      ],
      ignorePatterns: ['/lib/**/*', '/dist/**/*'],
      rules: {},
    };

Javascript

  • Add 'eslint-config-gev/react-js' to the extends: [...] field in your eslintrc.

    .eslintrc.js example
    // https://github.com/SrBrahma/eslint-config-gev
    // This is a workaround for https://github.com/eslint/eslint/issues/3458
    require('@rushstack/eslint-patch/modern-module-resolution');
    
    module.exports = {
      root: true,
      env: {
        es2021: true,
        node: true,
      },
      extends: ['eslint-config-gev/react-js'],
      ignorePatterns: ['/lib/**/*', '/dist/**/*'],
      rules: {},
    };

React Native

Typescript

  • Add 'eslint-config-gev/react-native' to the extends: [...] field in your eslintrc.

    .eslintrc.js example
    // https://github.com/SrBrahma/eslint-config-gev
    // This is a workaround for https://github.com/eslint/eslint/issues/3458
    require('@rushstack/eslint-patch/modern-module-resolution');
    
    module.exports = {
      root: true,
      env: {
        es2021: true,
        node: true,
        'react-native/react-native': true, // *1
      },
      extends: ['eslint-config-gev/react-native-js'],
      overrides: [
        {
          files: ['*.ts', '*.tsx'],
          extends: ['eslint-config-gev/react-native'],
          parser: '@typescript-eslint/parser',
          parserOptions: {
            tsconfigRootDir: __dirname,
            project: ['./tsconfig.json'],
            ecmaVersion: 12,
            sourceType: 'module',
            ecmaFeatures: {
              // *1
              jsx: true,
            },
          },
        },
      ],
      rules: {},
    };
    
    // [*1]: https://github.com/Intellicode/eslint-plugin-react-native#configuration

Javascript

  • Add 'eslint-config-gev/react-native-js' to the extends: [...] field in your eslintrc.

    .eslintrc.js example
    // https://github.com/SrBrahma/eslint-config-gev
    // This is a workaround for https://github.com/eslint/eslint/issues/3458
    require('@rushstack/eslint-patch/modern-module-resolution');
    
    module.exports = {
      root: true,
      env: {
        es2021: true,
        node: true,
        'react-native/react-native': true, // *1
      },
      extends: ['eslint-config-gev/react-native-js'],
      rules: {},
    };
    
    // [*1]: https://github.com/Intellicode/eslint-plugin-react-native#configuration