env:
  browser: true

parser: babel-eslint

plugins: [ "import" ]

# 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-console: 1
  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: 1
  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
  eqeqeq: ["error", "smart"]
  indent: [2, 2, {SwitchCase: 1}]
  keyword-spacing: 2
  max-len: [1, 160, 2]
  new-parens: 2
  no-mixed-spaces-and-tabs: 2
  no-multiple-empty-lines: [2, {max: 2}]
  no-trailing-spaces: 2
  object-curly-spacing: [2, "never"]
  quotes: [2, "double", "avoid-escape"]
  semi: 2
  space-before-blocks: [2, "always"]
  space-before-function-paren: [2, "never"]
  space-in-parens: [2, "never"]
  space-infix-ops: 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-confusing-arrow: 2
  prefer-const: 2

  # JSX
  jsx-quotes: [2, "prefer-double"]

  # Import
  import/no-unresolved: [1, {"commonjs": true, "amd": true}]
  import/export: 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"}]

# Global scoped method and vars
globals:
  __dirname: true
  require: true
  process: true
  ENV: true
  module: true
