2.0.0 • Published 2 years ago

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

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

@heinzelman-labs/eslint-config-base

npm version total downloads monthly downloads license

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

References

This config ...

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

Installation

yarn

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

npm

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

Usage

Basic .eslintrc.js

module.exports = {
    extends: [
        '@heinzelman-labs/eslint-config-base'
    ],
    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,.cjs,.mjs

Diff eslint-config-airbnb-base

ESLint Rules

Possible Errors

No changes.

Best Practices

  'no-unused-expressions': ['error', {
-     allowShortCircuit: false,
+     allowShortCircuit: true,
-     allowTernary: false,
+     allowTernary: true,
      allowTaggedTemplates: false,
  }],
  
- 'no-void': 'error',
+ 'no-void': 'off'

Strict Mode

No changes.

Variables

- 'no-shadow': 'error',
+ 'no-shadow': 'off',
  
  'no-use-before-define': ['error', {
-     functions: true, 
+     functions: false, 
      classes: true,
-     variables: true, 
+     variables: false
  }]

Node.js and CommonJS

No changes.

Stylistic Issues

- 'brace-style': ['error', '1tbs', { allowSingleLine: true }], 
+ 'brace-style': ['error', 'stroustrup', { allowSingleLine: true }],
  
- 'comma-dangle': ['error', {
-     arrays: 'always-multiline',
-     objects: 'always-multiline',
-     imports: 'always-multiline',
-     exports: 'always-multiline',
-     functions: 'always-multiline',
- }],
+ 'comma-dangle': ['error', 'never'],

- 'function-call-argument-newline': ['error', 'consistent'],
+ 'function-call-argument-newline': 'off',

- 'function-paren-newline': ['error', semver.satisfies(eslintPkg.version, '>= 6') ? 'multiline-arguments' : 'consistent'],
+ 'function-paren-newline': ['error', 'consistent'],
  
- indent: ['error', 2, {
+ indent: ['error', 4, {
      SwitchCase: 1,
-     VariableDeclarator: 1,
-     outerIIFEBody: 1,
-     FunctionDeclaration: {
-         parameters: 1,
-         body: 1
-     },
-     FunctionExpression: {
-         parameters: 1,
-         body: 1
-     },
-     CallExpression: {
-         arguments: 1
-     },
-     ArrayExpression: 1,
-     ObjectExpression: 1,
-     ImportDeclaration: 1,
-     flatTernaryExpressions: false,
+     flatTernaryExpressions: true,
-     ignoredNodes: ['JSXElement', 'JSXElement > *', 'JSXAttribute', 'JSXIdentifier', 'JSXNamespacedName', 'JSXMemberExpression', 'JSXSpreadAttribute', 'JSXExpressionContainer', 'JSXOpeningElement', 'JSXClosingElement', 'JSXFragment', 'JSXOpeningFragment', 'JSXClosingFragment', 'JSXText', 'JSXEmptyExpression', 'JSXSpreadChild'],
-     ignoreComments: false
  }],
  
 'lines-between-class-members': ['error', 'always', { 
-     exceptAfterSingleLine: false 
+     exceptAfterSingleLine: true 
 }],
  
- 'max-len': ['error', 100, 2, {
+ 'max-len': ['error', {
+     code: 120,
      ignoreUrls: true,
-     ignoreComments: false,
      ignoreRegExpLiterals: true,
-     ignoreStrings: true,
-     ignoreTemplateLiterals: true,
}],

- 'no-bitwise': 'error',
+ 'no-bitwise': 'off',

- 'no-multiple-empty-lines': ['error', { max: 1, maxBOF: 0, maxEOF: 0 }],
+ 'no-multiple-empty-lines': ['error', { max: 2, maxBOF: 0, maxEOF: 0 }],
  
- 'no-nested-ternary': 'error',
+ 'no-nested-ternary': 'off',
  
- 'no-plusplus': 'error',
+ 'no-plusplus': 'off',
  
- 'no-trailing-spaces': ['error', {
-     skipBlankLines: false,
-     ignoreComments: false,
- }],
+ 'no-trailing-spaces': 'off',
  
  'object-curly-newline': ['error', {
      ObjectExpression: {
-         minProperties: 4, 
          multiline: true, 
          consistent: true
      },
      ObjectPattern: {
-         minProperties: 4, 
          multiline: true, 
          consistent: true
      },
      ImportDeclaration: {
-         minProperties: 4, 
          multiline: true, 
          consistent: true
      },
      ExportDeclaration: {
-         minProperties: 4, 
          multiline: true, 
          consistent: true
      },
  }],
  
- 'no-restricted-exports': ['error', {
-     restrictedNamedExports: [
-         'default', // use `export default` to provide a default export
-         'then', // this will cause tons of confusion when your module is dynamically `import()`ed, and will break in most node ESM versions
-     ],
- }],
+ 'no-restricted-exports': 'off'
          
- 'operator-linebreak': ['error', 'before', { overrides: { '=': 'none' } }],
+ 'operator-linebreak': ['error', 'after', { overrides: { '=': 'none' } }],

ECMAScript 6

- 'arrow-body-style': ['error', 'as-needed', { requireReturnForObjectLiteral: false }],
+ 'arrow-body-style': 'off',
  
- 'arrow-parens': ['error', 'always'],
+ 'arrow-parens': 'off',

Import/Export Syntax Rules

  'import/extensions': ['error', 'ignorePackages', {
      js: 'never',
+     cjs: 'never',
      mjs: 'never',
      jsx: 'never',
+     ts: 'never',
+     cts: 'never',
+     mts: 'never',
+     tsx: 'never'
  }],
  
- 'import/prefer-default-export': 'error',
+ 'import/prefer-default-export': 'off'

License

MIT License