---
    parserOptions:
        ecmaFeatures:
            jsx: true
    plugins:
        - react
    settings:
        'import/ignore':
        # We don't want to lint some modules/files
        - package.json
        - ../shared/errors.json
        - lodash.throttle
        - react
        - react-dom
    globals:
        "$": true
    rules:
        # Parent rules that are overriden.

        # Conflicts with another React rule forcing several lines tags to be
        # withing parenthesis.
        no-extra-parens:
            - 0
        # Can't enforce when enforcing a functions ordering.
        no-use-before-define:
            - 0

        # React plugin rules.
        react/display-name:
            - 0
        react/forbid-component-props:
            - 0
        react/forbid-prop-types:
            - 2
            - {'forbid': ['any']}
        react/forbid-foreign-prop-types:
            - 2
        react/no-children-prop:
            - 2
        react/no-danger:
            - 2
        react/no-danger-with-children:
            - 2
        react/no-deprecated:
            - 2
        react/no-did-mount-set-state:
            - 2
        react/no-did-update-set-state:
            - 2
        react/no-direct-mutation-state:
            - 2
        react/no-find-dom-node:
            - 0 # TODO 1
        react/no-is-mounted:
            - 2
        react/no-multi-comp:
            - 0
        react/no-render-return-value:
            - 2
        react/no-set-state:
            - 0
        react/no-string-refs:
            - 2
        react/no-unescaped-entities:
            - 2
        react/no-unknown-property:
            - 2
        react/no-unused-prop-types:
            - 2
        react/prefer-es6-class:
            - 2
        react/prefer-stateless-function:
            - 2
        react/prop-types:
            - 1 # TODO 2
        react/react-in-jsx-scope:
            - 2
        react/require-optimization:
            - 0
        react/require-render-return:
            - 2
        react/self-closing-comp:
            - 2
        react/sort-comp:
            - 0
        react/sort-prop-types:
            - 0
        react/style-prop-object:
            - 2

        # JSX specific rules.
        # Enforce boolean attributes notation in JSX
        react/jsx-boolean-value:
            - 2
            - 'always'
        react/jsx-closing-bracket-location:
            - 0
        react/jsx-curly-spacing:
            - 0
        react/jsx-equals-spacing:
            - 2
        react/jsx-filename-extension:
            - 0
        react/jsx-first-prop-new-line:
            - 2
            - "multiline-multiprop"
        react/jsx-handler-names:
            - 2
        react/jsx-indent:
            - 2
            - 4
        react/jsx-indent-props:
            - 0
        react/jsx-key:
            - 2
        react/jsx-max-props-per-line:
            - 0
        react/jsx-no-bind:
            - 2
        react/jsx-no-comment-textnodes:
            - 2
        react/jsx-no-duplicate-props:
            - 2
        react/jsx-no-literals:
            - 0
        react/jsx-no-target-blank:
            - 2
        react/jsx-no-undef:
            - 2
        react/jsx-pascal-case:
            - 2
        react/jsx-sort-props:
            - 0 # lolno
        react/jsx-tag-spacing:
            - 2
            - { closingSlash: "never", beforeSelfClosing: "always", afterOpening: "never" }
        react/jsx-uses-react:
            - 2
        react/jsx-uses-vars:
            - 2
        react/jsx-wrap-multilines:
            - 2

        import/no-unresolved:
            - 2
        import/namespace:
            - 2
