# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

env:
  browser: true
  es6: true

parser: babel-eslint

parserOptions:
  ecmaVersion: 6

plugins: [ "import" ]

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
