env:
  browser: true

parser: babel-eslint

plugins: [ "react" ]

# enable ECMAScript features
ecmaFeatures:
  arrowFunctions: true
  binaryLiterals: true
  blockBindings: true
  classes: true
  defaultParams: true
  destructuring: true
  forOf: true
  generators: true
  jsx: true
  modules: true
  objectLiteralShorthandMethods: true
  objectLiteralShorthandProperties: true
  octalLiterals: true
  spread: true
  templateStrings: true

rules:
  # Possible Errors
  # https://github.com/eslint/eslint/tree/master/docs/rules#possible-errors
  no-control-regex: 2
  no-debugger: 2
  no-dupe-args: 2
  no-dupe-keys: 2
  no-duplicate-case: 2
  no-empty-character-class: 2
  no-ex-assign: 2
  no-extra-boolean-cast : 2
  no-extra-semi: 2
  no-invalid-regexp: 2
  no-irregular-whitespace: 2
  no-proto: 2
  no-unexpected-multiline: 2
  no-unreachable: 2
  valid-typeof: 2

  # Best Practices
  # https://github.com/eslint/eslint/tree/master/docs/rules#best-practices
  no-fallthrough: 2
  no-redeclare: 2

  # Stylistic Issues
  # https://github.com/eslint/eslint/tree/master/docs/rules#stylistic-issues
  comma-spacing: 2
  eol-last: 2
  indent: [2, 2, {SwitchCase: 1}]
  max-len: [2, 160, 2]
  new-parens: 2
  no-mixed-spaces-and-tabs: 2
  no-multiple-empty-lines: [2, {max: 2}]
  no-trailing-spaces: 2
  quotes: [2, "single", "avoid-escape"]
  semi: 2
  space-after-keywords: 2
  space-before-blocks: [2, "always"]
  space-before-function-paren: [2, "never"]
  space-in-parens: [2, "never"]
  space-infix-ops: 2
  space-return-throw-case: 2
  space-unary-ops: 2

  # ECMAScript 6
  # http://eslint.org/docs/rules/#ecmascript-6
  arrow-parens: [2, "always"]
  arrow-spacing: [2, {"before": true, "after": true}]
  no-arrow-condition: 2
  prefer-const: 2

  # Strict Mode
  # https://github.com/eslint/eslint/tree/master/docs/rules#strict-mode
  strict: [2, "global"]

  # Variables
  # https://github.com/eslint/eslint/tree/master/docs/rules#variables
  no-undef: 2
  no-unused-vars: [2, {"args": "none"}]


  react/forbid-prop-types: 1
  react/jsx-boolean-value: 1
  react/jsx-closing-bracket-location: 1
  react/jsx-curly-spacing: 1
  react/jsx-equals-spacing: 1
  react/jsx-handler-names: 1
  react/jsx-indent-props: 1
  react/jsx-indent: [2, 2]
  react/jsx-no-bind: 1
  react/jsx-no-duplicate-props: 1
  react/jsx-no-undef: 1
  react/jsx-pascal-case: 1
  react/jsx-sort-prop-types: 1
  react/jsx-uses-react: 1
  react/jsx-uses-vars: 1
  react/no-danger: 1
  react/no-deprecated: 1
  react/no-did-mount-set-state: 1
  react/no-did-update-set-state: 1
  react/no-direct-mutation-state: 1
  react/no-is-mounted: 1
  react/no-multi-comp: 1
  react/no-string-refs: 1
  react/no-unknown-property: 1
  react/prefer-es6-class: 1
  react/react-in-jsx-scope: 1
  react/require-extension: 1
  react/self-closing-comp: 1
  react/sort-comp: 1

# Global scoped method and vars
globals:
  netlify: true
  describe: true
  it: true
  require: true
  process: true
  module: true
  CMS_ENV: true