2.0.0 • Published 2 years ago

@heinzelman-labs/eslint-config-react v2.0.0

Weekly downloads
-
License
MIT
Repository
gitlab
Last release
2 years ago

@heinzelman-labs/eslint-config-react

npm version total downloads monthly downloads license

A personal ESLint shareable config for React projects based on eslint-config-airbnb.

References

This config ...

Source code of this package can be found on ...

Installation

yarn

yarn add -D @heinzelman-labs/eslint-config-react

npm

npm i -D @heinzelman-labs/eslint-config-react

Usage

Basic .eslintrc.js

module.exports = {
    extends: [
        '@heinzelman-labs/eslint-config-react'
    ],
    rules: {
        // Adjust rules ...
    },
    env: {
        // Environments as needed ...
    }
};

Mono-Repo .eslintrc.js

For mono-repos don't forget to add your package directories.

const { resolve } = require('path');

module.exports = {
    // ...
    rules: {
        'import/no-extraneous-dependencies': ['error', { 
            packageDir: [
                __dirname,
                resolve(__dirname, 'packages/foo'),
                resolve(__dirname, 'packages/bar')
            ]
        }]
    },
    // ...
};

CLI

I would recommend to not use glob patterns or filenames, but to use directories to specify target files where possible. Then use the --ext option to define relevant file extensions. You may also use .eslintignore to exclude files from the result set as needed. This way ESLint will not complain if you end up not having a certain file type among your sources anymore, e.g. .mjs.

eslint ./src --ext .js,.mjs,.jsx

Base Rule Optimizations

  'no-unused-vars': ['error', { 
+     varsIgnorePattern: '^React$',
      vars: 'all', 
      args: 'none', 
      ignoreRestSiblings: true 
  }],

Diff eslint-config-airbnb

Note that unlike with eslint-config-airbnb, the rules for React hooks are integrated by default.

React

- 'react/jsx-indent-props': ['error', 2],
+ 'react/jsx-indent-props': ['error', 4],

- 'react/jsx-indent': ['error', 2],
+ 'react/jsx-indent': ['error', 4],
  
- 'react/jsx-filename-extension': ['error', { extensions: ['.jsx'] }],
+ 'react/jsx-filename-extension': ['error', { extensions: ['.js', '.jsx', '.tsx']}],
  
- 'react/jsx-one-expression-per-line': ['error', { allow: 'single-child' }],
+ 'react/jsx-one-expression-per-line': 'off',
  
- 'react/jsx-fragments': ['error', 'syntax'],
+ 'react/jsx-fragments': 'off',
  
  'react/jsx-props-no-spreading': ['error', {
-     html: 'enforce',
+     html: 'ignore',
-     custom: 'enforce',
+     custom: 'ignore',
      exceptions: [],
  }]
  
- 'react/function-component-definition': ['error', {
-     namedComponents: ['function-declaration', 'function-expression'],
-     unnamedComponents: 'function-expression',
- }],
+ 'react/function-component-definition': 'off'

React a11y

No changes.

React Hooks

No changes.

License

MIT License