{
    "extends": [
        "eslint:recommended",
        "plugin:react/recommended"
    ],
    "rules": {
        // Possible Errors
        "no-console": [1, { "allow": ["warn", "error", "info"] }],
        "no-prototype-builtins": 0,
        // Best Practices
        "block-scoped-var": 1,
        "class-methods-use-this": [1, {
            "exceptMethods": [
                "componentWillMount",
                "componentDidMount",
                "componentWillReceiveProps",
                "shouldComponentUpdate",
                "componentWillUpdate",
                "componentDidUpdate",
                "componentWillUnmount"
            ]
        }],
        "consistent-return": [2, { "treatUndefinedAsUnspecified": true }],
        "curly": [2, "all"],
        "default-case": 2,
        "dot-location": [2, "property"],
        "eqeqeq": 2,
        "guard-for-in": 2,
        "no-alert": 2,
        "no-caller": 1,
        "no-else-return": 1,
        "no-empty-function": 2,
        "no-extra-bind": 2,
        "no-extend-native": 1,
        "no-implicit-coercion": 1,
        "no-invalid-this": 2,
        "no-lone-blocks": 2,
        "no-loop-func": 2,
        "no-magic-numbers": [1, { "ignoreArrayIndexes": true, "ignore": [-1, 0, 1, 2], "enforceConst": true }],
        "no-multi-spaces": 2,
        "no-multi-str": 1,
        "no-new": 2,
        "no-new-func": 2,
        "no-new-wrappers": 2,
        "no-octal-escape": 2,
        "no-param-reassign": 2,
        "no-proto": 2,
        "no-return-assign": [2, "always"],
        "no-return-await": 1,
        "no-script-url": 2,
        "no-self-compare": 2,
        "no-sequences": 2,
        "no-throw-literal": 2,
        "no-unused-expressions": 2,
        "no-useless-concat": 2,
        "no-useless-return": 2,
        "no-void": 2,
        "prefer-promise-reject-errors": 1,
        "require-await": 1,
        "wrap-iife": [2, "inside"],
        "yoda": 2,
        // variables
        "no-shadow": 2,
        "no-shadow-restricted-names": 2,
        "no-undef": 0,
        "no-undef-init": 2,
        // Node.js and CommonJS
        "callback-return": 2,
        "no-buffer-constructor": 2,
        "no-new-require": 2,
        "no-path-concat": 2,
        // stylistic issues
        "array-bracket-newline": [2, { "multiline": true }],
        "array-bracket-spacing": [2, "never"],
        "brace-style": [2, "1tbs", { "allowSingleLine": true }],
        "camelcase": 2,
        "comma-dangle": [2, "always-multiline"],
        "comma-spacing": ["error", { "before": false, "after": true }],
        "comma-style": [2, "last"],
        "computed-property-spacing": [2, "never"],
        "eol-last": [2, "always"],
        "func-call-spacing": [2, "never"],
        "func-name-matching": 1,
        "func-style": [2, "declaration"],
        "indent": [2, 4],
        "jsx-quotes": [2, "prefer-double"],
        "key-spacing": [2, { "beforeColon": false, "afterColon": true, "mode": "strict" }],
        "keyword-spacing": [2, { "before": true, "after": true }],
        "line-comment-position": [1, { "position": "above" }],
        "linebreak-style": [2, "unix"],
        "max-params": [1, { "max": 4 }],
        "max-statements-per-line": [2, { "max": 1 }],
        "new-parens": 2,
        "no-array-constructor": 2,
        "no-lonely-if": 2,
        "no-mixed-operators": 2,
        "no-multi-assign": 2,
        "no-multiple-empty-lines": [2, { "max": 1, "maxEOF": 1, "maxBOF": 0 }],
        "no-nested-ternary": 2,
        "no-new-object": 2,
        "no-trailing-spaces": 2,
        "no-underscore-dangle": 2,
        "no-unneeded-ternary": 1,
        "no-whitespace-before-property": 2,
        "one-var": [2, "never"],
        "operator-assignment": [1, "always"],
        "operator-linebreak": [2, "after"],
        "padded-blocks": [2, "never"],
        "quotes": [2, "single", { "allowTemplateLiterals": true }],
        "semi": [2, "always"],
        "semi-spacing": [2, { "before": false, "after": false }],
        "space-before-function-paren": [2, "never"],
        "space-in-parens": [2, "never"],
        "space-infix-ops": 2,
        "space-unary-ops": [2, { "words": true, "nonwords": false }],
        "switch-colon-spacing": [2, { "after": true, "before": false }],
        // ECMAScript 6
        "arrow-spacing": [2, { "before": true, "after": true }],
        "no-confusing-arrow": 1,
        "no-duplicate-imports": 2,
        "no-useless-computed-key": 2,
        "no-useless-constructor": 2,
        "no-var": 2,
        "prefer-const": 2,
        "prefer-spread": 2,
        "prefer-template": 2,
        "rest-spread-spacing": [2, "never"],
        // eslint-react-plugin
        "react/boolean-prop-naming": 2,
        "react/default-props-match-prop-types": 2,
        "react/no-array-index-key": 1,
        "react/no-did-update-set-state": 1,
        "react/no-multi-comp": 2,
        "react/no-redundant-should-component-update": 2,
        "react/no-typos": 2,
        "react/no-unescaped-entities": 1,
        "react/no-unused-prop-types": 2,
        "react/no-will-update-set-state": 2,
        "react/prefer-es6-class": [2, "always"],
        "react/prefer-stateless-function": 2,
        "react/self-closing-comp": 2,
        "react/style-prop-object": 2,
        "react/void-dom-elements-no-children": 2,
        "react/jsx-closing-bracket-location": [2, "line-aligned"],
        "react/jsx-equals-spacing": [2, "never"],
        "react/jsx-handler-names": 2,
        "react/jsx-indent": [2, 4],
        "react/jsx-no-bind": 2,
        "react/jsx-no-undef": 1,
        "react/jsx-pascal-case": 2,
        "react/jsx-tag-spacing": [2, {
            "closingSlash": "never",
            "beforeSelfClosing": "never",
            "afterOpening": "never"
        }]
    },
    "parserOptions": {
        "ecmaVersion": 6,
        "sourceType": "module",
        "ecmaFeatures": {
            "jsx": true
        }
    },
    "env": {
        "browser": true,
        "node": true
    },
    "plugins": [
        "react"
    ]
}
