Skip to content

Yoctol/eslint-config-yoctol-base

Repository files navigation

eslint-config-yoctol-base

NPM version Build Status Greenkeeper badge Dependency Status

Yoctol Info. base ESLint config, fork from eslint-config-airbnb-base.

Usage

We export two ESLint configurations for your usage.

eslint-config-yoctol-base

Our default export contains all of our ESLint rules, including ECMAScript 6+. It requires eslint, eslint-plugin-import, eslint-plugin-prettier, eslint-plugin-sort-imports-es6-autofix and prettier.

  1. Install the correct versions of each package, which are listed by the command:
npm info "eslint-config-yoctol-base@latest" peerDependencies

Linux/OSX users can simply run

(
  export PKG=eslint-config-yoctol-base;
  npm info "$PKG@latest" peerDependencies --json | command sed 's/[\{\},]//g ; s/: /@/g' | xargs npm install --save-dev "$PKG@latest"
)

Which produces and runs a command like:

  npm install --save-dev eslint-config-yoctol-base eslint@^#.#.# eslint-plugin-import@^#.#.# eslint-plugin-prettier@^#.#.# eslint-plugin-sort-imports-es6-autofix@^#.#.#

Windows users can either install all the peer dependencies manually, or use the install-peerdeps cli tool.

npm install -g install-peerdeps
install-peerdeps --dev eslint-config-yoctol-base

The cli will produce and run a command like:

npm install --save-dev eslint-config-yoctol-base eslint@^#.#.# eslint-plugin-import@^#.#.# eslint-plugin-prettier@^#.#.# eslint-plugin-sort-imports-es6-autofix@^#.#.#
  1. Add "extends": "yoctol-base" to your .eslintrc

eslint-config-yoctol-base/legacy

Lints ES5 and below. Requires eslint and eslint-plugin-import.

  1. Install the correct versions of each package, which are listed by the command:
npm info "eslint-config-yoctol-base@latest" peerDependencies

Linux/OSX users can simply run

(
  export PKG=eslint-config-yoctol-base;
  npm info "$PKG" peerDependencies --json | command sed 's/[\{\},]//g ; s/: /@/g' | xargs npm install --save-dev "$PKG"
)

Which produces and runs a command like:

npm install --save-dev eslint-config-yoctol-base eslint@^#.#.# eslint-plugin-import@^#.#.# eslint-plugin-prettier@^#.#.# eslint-plugin-sort-imports-es6-autofix@^#.#.#
  1. Add "extends": "yoctol-base/legacy" to your .eslintrc

See Airbnb's overarching ESLint config, Airbnb's Javascript styleguide, and the ESlint config docs for more information.

Rules be overwritten

best-practices

- 'class-methods-use-this': 'off'
- 'consistent-return': 'off'

errors

- 'comma-dangle': ['error', {
    arrays: 'always-multiline',
    objects: 'always-multiline',
    imports: 'always-multiline',
    exports: 'always-multiline',
    functions: 'ignore',
  }]

es6

- 'arrow-parens': ['error', 'as-needed']
- 'prefer-arrow-callback': ['error', { allowNamedFunctions: true }]
- 'prefer-destructuring': [
  'error',
  {
    VariableDeclarator: {
      array: false,
      object: true
    },
    AssignmentExpression: {
      array: false,
      object: false
    }
  },
  {
    enforceForRenamedProperties: false
  }
]

import

- import/prefer-default-export: 'off'
- import/order: ['error', {
  groups: ['builtin', 'external', 'internal', 'parent', 'sibling', 'index'],
  'newlines-between': 'always',
}]
- import/no-extraneous-dependencies: ['error', {
  devDependencies: [
    '**/__tests__/*.spec.js',
    '**/__stories__/*.story.js',
    '**/scripts/*.js',
    '**/test/**/*.js',
    '**/webpack.config.*.js',
  ],
}]

node

- 'global-require': 'off'

style

- linebreak-style: 'off'
- max-len: ['error', 100, 2, {
  ignorePattern: ' // eslint-disable-line ',
  ignoreUrls: true,
  ignoreComments: false,
  ignoreStrings: true,
  ignoreTemplateLiterals: true,
  ignoreRegExpLiterals: true,
}]
- no-plusplus: ['error', { allowForLoopAfterthoughts: true }]
- no-underscore-dangle: 'off'
- no-restricted-syntax: [
  'error',
  {
    selector: 'ForInStatement',
    message:
      'for..in loops iterate over the entire prototype chain, which is virtually never what you want. Use Object.{keys,values,entries}, and iterate over the resulting array.',
  },
  {
    selector: 'LabeledStatement',
    message:
      'Labels are a form of GOTO; using them makes code confusing and hard to maintain and understand.',
  },
  {
    selector: 'WithStatement',
    message:
      '`with` is disallowed in strict mode because it makes code impossible to predict and optimize.',
  },
]
(Note: remove ForOfStatement from airbnb's no-restricted-syntax)

prettier

- prettier/prettier: [
  'error',
  {
    trailingComma: 'es5',
    singleQuote: true
  },
  'arrow-body-style': 'off',
  'prefer-arrow-callback': 'off',
]

sort-imports-es6-autofix

- sort-imports-es6-autofix/sort-imports-es6: [
  'error',
  {
    ignoreCase: false,
    ignoreMemberSort: false,
    memberSyntaxSortOrder: ['single', 'multiple', 'all', 'none'],
  },
]