{
  "parserOptions": {
    "ecmaVersion": 5
  },
  "env": {
    "browser": true
  },
  "globals": {
    "$": true,
    "window": true,
    "document": true
  },
  "rules": {
    "max-len": ["error", 800],
    "vars-on-top": "off",
    "prefer-template": "off",
    "no-var": "off",
    /**
     * Strict mode
     */
    "strict": 0,
    // http://eslint.org/docs/rules/strict

    /**
     * Variables
     */
    "no-shadow": "error",
    // http://eslint.org/docs/rules/no-shadow
    "no-shadow-restricted-names": "error",
    // http://eslint.org/docs/rules/no-shadow-restricted-names
    "no-unused-vars": [
      "error",
      {
        // http://eslint.org/docs/rules/no-unused-vars
        "vars": "local",
        "args": "after-used"
      }
    ],
    /**
     * Possible errors
     */
    "comma-dangle": 0,
    // http://eslint.org/docs/rules/comma-dangle
    "no-cond-assign": [
      "error",
      "always"
    ],
    // http://eslint.org/docs/rules/no-cond-assign
    "no-console": "warn",
    // http://eslint.org/docs/rules/no-console
    "no-debugger": "warn",
    // http://eslint.org/docs/rules/no-debugger
    "no-alert": "warn",
    "no-continue": "off",
    "prefer-rest-params": 0,
    // http://eslint.org/docs/rules/no-alert
    "no-constant-condition": "warn",
    // http://eslint.org/docs/rules/no-constant-condition
    "no-dupe-keys": "error",
    // http://eslint.org/docs/rules/no-dupe-keys
    "no-duplicate-case": "error",
    // http://eslint.org/docs/rules/no-duplicate-case
    "no-empty": "error",
    // http://eslint.org/docs/rules/no-empty
    "no-empty-character-class": "error",
    // http://eslint.org/docs/rules/no-empty-character-class
    "no-ex-assign": "error",
    // http://eslint.org/docs/rules/no-ex-assign
    "no-extra-semi": "error",
    // http://eslint.org/docs/rules/no-extra-semi
    "no-func-assign": "error",
    // http://eslint.org/docs/rules/no-func-assign
    "no-inner-declarations": "error",
    // http://eslint.org/docs/rules/no-inner-declarations
    "no-invalid-regexp": "error",
    // http://eslint.org/docs/rules/no-invalid-regexp
    "no-irregular-whitespace": "error",
    // http://eslint.org/docs/rules/no-irregular-whitespace
    "no-negated-in-lhs": "error",
    // http://eslint.org/docs/rules/no-negated-in-lhs
    "no-new-require": "error",
    // http://eslint.org/docs/rules/no-new-require
    "no-obj-calls": "error",
    // http://eslint.org/docs/rules/no-obj-calls
    "no-path-concat": "error",
    // http://eslint.org/docs/rules/no-path-concat
    "no-regex-spaces": "error",
    // http://eslint.org/docs/rules/no-regex-spaces
    "no-sparse-arrays": "error",
    // http://eslint.org/docs/rules/no-sparse-arrays
    "no-unreachable": "error",
    // http://eslint.org/docs/rules/no-unreachable
    "use-isnan": "error",
    // http://eslint.org/docs/rules/use-isnan
    "valid-jsdoc": "error",
    // http://eslint.org/docs/rules/valid-jsdoc
    "valid-typeof": "error",
    // http://eslint.org/docs/rules/valid-typeof
    "no-restricted-syntax": "off",

    /**
     * Best practices
     */
    "consistent-return": "error",
    // http://eslint.org/docs/rules/consistent-return
    "curly": [
      "error",
      "multi-line"
    ],
    // http://eslint.org/docs/rules/curly
    "default-case": "error",
    // http://eslint.org/docs/rules/default-case
    "dot-notation": [
      "error",
      {
        // http://eslint.org/docs/rules/dot-notation
        "allowKeywords": true
      }
    ],
    "eqeqeq": "error",
    // http://eslint.org/docs/rules/eqeqeq
    "guard-for-in": "error",
    // http://eslint.org/docs/rules/guard-for-in
    "no-caller": "error",
    // http://eslint.org/docs/rules/no-caller
    "no-div-regex": "error",
    // http://eslint.org/docs/rules/no-div-regex
    "no-else-return": "error",
    // http://eslint.org/docs/rules/no-else-return
    "no-labels": "error",
    // http://eslint.org/docs/rules/no-labels
    "no-eq-null": "error",
    // http://eslint.org/docs/rules/no-eq-null
    "no-eval": 0,
    // http://eslint.org/docs/rules/no-eval
    "no-extend-native": "error",
    // http://eslint.org/docs/rules/no-extend-native
    "no-extra-bind": "error",
    // http://eslint.org/docs/rules/no-extra-bind
    "no-fallthrough": "error",
    // http://eslint.org/docs/rules/no-fallthrough
    "no-floating-decimal": "error",
    // http://eslint.org/docs/rules/no-floating-decimal
    "no-implied-eval": "error",
    // http://eslint.org/docs/rules/no-implied-eval
    "no-lone-blocks": "error",
    // http://eslint.org/docs/rules/no-lone-blocks
    "no-loop-func": "error",
    // http://eslint.org/docs/rules/no-loop-func
    "no-multi-str": "error",
    // http://eslint.org/docs/rules/no-multi-str
    "no-native-reassign": "error",
    // http://eslint.org/docs/rules/no-native-reassign
    "no-new": "error",
    // http://eslint.org/docs/rules/no-new
    "no-new-func": "error",
    // http://eslint.org/docs/rules/no-new-func
    "no-new-wrappers": "error",
    // http://eslint.org/docs/rules/no-new-wrappers
    "no-octal": "error",
    // http://eslint.org/docs/rules/no-octal
    "no-octal-escape": "error",
    // http://eslint.org/docs/rules/no-octal-escape
    "no-param-reassign": "off",
    // http://eslint.org/docs/rules/no-param-reassign
    "no-process-exit": "error",
    // http://eslint.org/docs/rules/no-process-exit
    "no-proto": "error",
    // http://eslint.org/docs/rules/no-proto
    "no-redeclare": "error",
    // http://eslint.org/docs/rules/no-redeclare
    "no-return-assign": "error",
    // http://eslint.org/docs/rules/no-return-assign
    "no-script-url": "error",
    // http://eslint.org/docs/rules/no-script-url
    "no-self-compare": "error",
    // http://eslint.org/docs/rules/no-self-compare
    "no-sequences": "error",
    // http://eslint.org/docs/rules/no-sequences
    "no-throw-literal": "error",
    // http://eslint.org/docs/rules/no-throw-literal
    "no-undef": "error",
    // http://eslint.org/docs/rules/no-undef
    "no-undef-init": "error",
    // http://eslint.org/docs/rules/no-undef-init
    "no-undefined": "warn",
    // http://eslint.org/docs/rules/no-undefined
    "no-underscore-dangle": 0,
    "no-with": "error",
    // http://eslint.org/docs/rules/no-with
    "handle-callback-err": "warn",
    // http://eslint.org/docs/rules/handle-callback-err
    "radix": "error",
    // http://eslint.org/docs/rules/radix
    "wrap-iife": [
      "error",
      "any"
    ],
    // http://eslint.org/docs/rules/wrap-iife
    "yoda": "error",
    // http://eslint.org/docs/rules/yoda

    /**
     * Style
     */
    "indent": [
      "error",
      2
    ],
    // http://eslint.org/docs/rules/indent
    "brace-style": [
      "error",
      // http://eslint.org/docs/rules/brace-style
      "1tbs",
      {
        "allowSingleLine": true
      }
    ],
    "quotes": [
      // http://eslint.org/docs/rules/quotes
      "error",
      "single",
      "avoid-escape"
    ],
    "camelcase": [
      "warn",
      {
        // http://eslint.org/docs/rules/camelcase
        "properties": "never"
      }
    ],
    "comma-spacing": [
      "error",
      {
        // http://eslint.org/docs/rules/comma-spacing
        "before": false,
        "after": true
      }
    ],
    "comma-style": [
      "error",
      "last"
    ],
    // http://eslint.org/docs/rules/comma-style
    "eol-last": "error",
    // http://eslint.org/docs/rules/eol-last
    "func-names": 0,
    "prefer-arrow-callback": 0,
    "object-shorthand": 0,
    // http://eslint.org/docs/rules/func-names
    "key-spacing": [
      "error",
      {
        // http://eslint.org/docs/rules/key-spacing
        "beforeColon": false,
        "afterColon": true
      }
    ],
    "new-cap": [
      "error",
      {
        // http://eslint.org/docs/rules/new-cap
        "newIsCap": true
      }
    ],
    "new-parens": "error",
    // http://eslint.org/docs/rules/new-parens
    "no-array-constructor": "error",
    // http://eslint.org/docs/rules/no-array-constructor
    "no-lonely-if": "warn",
    // http://eslint.org/docs/rules/no-lonely-if
    "no-mixed-spaces-and-tabs": "warn",
    // http://eslint.org/docs/rules/no-mixed-spaces-and-tabs
    "no-multiple-empty-lines": [
      "error",
      {
        // http://eslint.org/docs/rules/no-multiple-empty-lines
        "max": 2
      }
    ],
    "no-nested-ternary": "error",
    // http://eslint.org/docs/rules/no-nested-ternary
    "no-new-object": "error",
    // http://eslint.org/docs/rules/no-new-object
    "no-spaced-func": "error",
    // http://eslint.org/docs/rules/no-spaced-func
    "no-trailing-spaces": "error",
    // http://eslint.org/docs/rules/no-trailing-spaces
    "no-extra-parens": [
      "error",
      "functions"
    ],
    // http://eslint.org/docs/rules/no-extra-params
    "one-var": [
      "error",
      "never"
    ],
    // http://eslint.org/docs/rules/one-var
    "padded-blocks": [
      "error",
      "never"
    ],
    // http://eslint.org/docs/rules/padded-blocks
    "semi": [
      "error",
      "always"
    ],
    // http://eslint.org/docs/rules/semi
    "semi-spacing": [
      "error",
      {
        // http://eslint.org/docs/rules/semi-spacing
        "before": false,
        "after": true
      }
    ],
    "keyword-spacing": "error",
    // http://eslint.org/docs/rules/keyword-spacing
    "space-before-blocks": "error",
    // http://eslint.org/docs/rules/space-before-blocks
    "space-before-function-paren": [
      "error",
      {
        "anonymous": "always",
        "named": "never"
      }
    ],
    // http://eslint.org/docs/rules/space-before-function-paren
    "space-infix-ops": "error",
    // http://eslint.org/docs/rules/space-infix-ops
    "space-unary-ops": "error",
    // http://eslint.org/docs/rules/space-unary-ops
    "spaced-comment": [
      "error",
      "always",
      {
        // http://eslint.org/docs/rules/spaced-comment
        "exceptions": [
          "-",
          "+"
        ],
        "markers": [
          "=",
          "!"
        ]
        // space here to support sprockets directives
      }
    ]
  }
}
