---
parserOptions:
  sourceType: module
  ecmaFeatures:
    jsx: true

env:
  amd: true
  browser: true
  es6: true
  jquery: true
  node: true

# http://eslint.org/docs/rules/
rules:
  # Possible Errors
  no-await-in-loop: off
  no-cond-assign: error
  no-console: off
  no-constant-condition: error
  no-control-regex: error
  no-debugger: error
  no-dupe-args: error
  no-dupe-keys: error
  no-duplicate-case: error
  no-empty-character-class: error
  no-empty: error
  no-ex-assign: error
  no-extra-boolean-cast: error
  no-extra-parens: off
  no-extra-semi: error
  no-func-assign: error
  no-inner-declarations:
    - error
    - functions
  no-invalid-regexp: error
  no-irregular-whitespace: error
  no-negated-in-lhs: error
  no-obj-calls: error
  no-prototype-builtins: off
  no-regex-spaces: error
  no-sparse-arrays: error
  no-template-curly-in-string: off
  no-unexpected-multiline: error
  no-unreachable: error
  no-unsafe-finally: off
  no-unsafe-negation: off
  use-isnan: error
  valid-jsdoc: off
  valid-typeof: error

  # Best Practices
  accessor-pairs: error
  array-callback-return: off
  block-scoped-var: off
  class-methods-use-this: off
  complexity:
    - error
    - 6
  consistent-return: off
  curly: off
  default-case: off
  dot-location: off
  dot-notation: off
  eqeqeq: error
  guard-for-in: error
  no-alert: error
  no-caller: error
  no-case-declarations: error
  no-div-regex: error
  no-else-return: off
  no-empty-function: off
  no-empty-pattern: error
  no-eq-null: error
  no-eval: error
  no-extend-native: error
  no-extra-bind: error
  no-extra-label: off
  no-fallthrough: error
  no-floating-decimal: off
  no-global-assign: off
  no-implicit-coercion: off
  no-implied-eval: error
  no-invalid-this: off
  no-iterator: error
  no-labels:
    - error
    - allowLoop: true
      allowSwitch: true
  no-lone-blocks: error
  no-loop-func: error
  no-magic-number: off
  no-multi-spaces: off
  no-multi-str: off
  no-native-reassign: error
  no-new-func: error
  no-new-wrappers: error
  no-new: error
  no-octal-escape: error
  no-octal: error
  no-param-reassign: off
  no-proto: error
  no-redeclare: error
  no-restricted-properties: off
  no-return-assign: error
  no-return-await: off
  no-script-url: error
  no-self-assign: off
  no-self-compare: error
  no-sequences: off
  no-throw-literal: off
  no-unmodified-loop-condition: off
  no-unused-expressions: error
  no-unused-labels: off
  no-useless-call: error
  no-useless-concat: error
  no-useless-escape: off
  no-useless-return: off
  no-void: error
  no-warning-comments: off
  no-with: error
  prefer-promise-reject-errors: off
  radix: error
  require-await: off
  vars-on-top: off
  wrap-iife: error
  yoda: off

  # Strict
  strict: off

  # Variables
  init-declarations: off
  no-catch-shadow: error
  no-delete-var: error
  no-label-var: error
  no-restricted-globals: off
  no-shadow-restricted-names: error
  no-shadow: off
  no-undef-init: error
  no-undef: off
  no-undefined: off
  no-unused-vars: off
  no-use-before-define: off

  # Node.js and CommonJS
  callback-return: error
  global-require: error
  handle-callback-err: error
  no-mixed-requires: off
  no-new-require: off
  no-path-concat: error
  no-process-env: off
  no-process-exit: error
  no-restricted-modules: off
  no-sync: off

  # Stylistic Issues
  array-bracket-spacing: off
  block-spacing: off
  brace-style: off
  camelcase: off
  capitalized-comments: off
  comma-dangle:
    - error
    - never
  comma-spacing: off
  comma-style: off
  computed-property-spacing: off
  consistent-this: off
  eol-last: off
  func-call-spacing: off
  func-name-matching: off
  func-names: off
  func-style: off
  id-length: off
  id-match: off
  indent: off
  jsx-quotes: off
  key-spacing: off
  keyword-spacing: off
  line-comment-position: off
  linebreak-style: off
  lines-around-comment: off
  lines-around-directive: off
  max-depth: off
  max-len: off
  max-nested-callbacks: off
  max-params: off
  max-statements-per-line: off
  max-statements:
    - error
    - 30
  multiline-ternary: off
  new-cap: off
  new-parens: off
  newline-after-var: off
  newline-before-return: off
  newline-per-chained-call: off
  no-array-constructor: off
  no-bitwise: off
  no-continue: off
  no-inline-comments: off
  no-lonely-if: off
  no-mixed-operators: off
  no-mixed-spaces-and-tabs: off
  no-multi-assign: off
  no-multiple-empty-lines: off
  no-negated-condition: off
  no-nested-ternary: off
  no-new-object: off
  no-plusplus: off
  no-restricted-syntax: off
  no-spaced-func: off
  no-tabs: off
  no-ternary: off
  no-trailing-spaces: off
  no-underscore-dangle: off
  no-unneeded-ternary: off
  object-curly-newline: off
  object-curly-spacing: off
  object-property-newline: off
  one-var-declaration-per-line: off
  one-var: off
  operator-assignment: off
  operator-linebreak: off
  padded-blocks: off
  quote-props: off
  quotes: off
  require-jsdoc: off
  semi-spacing: off
  semi: off
  sort-keys: off
  sort-vars: off
  space-before-blocks: off
  space-before-function-paren: off
  space-in-parens: off
  space-infix-ops: off
  space-unary-ops: off
  spaced-comment: off
  template-tag-spacing: off
  unicode-bom: off
  wrap-regex: off

  # ECMAScript 6
  arrow-body-style: off
  arrow-parens: off
  arrow-spacing: off
  constructor-super: off
  generator-star-spacing: off
  no-class-assign: off
  no-confusing-arrow: off
  no-const-assign: off
  no-dupe-class-members: off
  no-duplicate-imports: off
  no-new-symbol: off
  no-restricted-imports: off
  no-this-before-super: off
  no-useless-computed-key: off
  no-useless-constructor: off
  no-useless-rename: off
  no-var: off
  object-shorthand: off
  prefer-arrow-callback: off
  prefer-const: off
  prefer-destructuring: off
  prefer-numeric-literals: off
  prefer-rest-params: off
  prefer-reflect: off
  prefer-spread: off
  prefer-template: off
  require-yield: off
  rest-spread-spacing: off
  sort-imports: off
  symbol-description: off
  template-curly-spacing: off
  yield-star-spacing: off
