parser: "@typescript-eslint/parser"
parserOptions:
  ecmaVersion: 6
  ecmaFeatures:
    jsx: true
  project: "./tsconfig.json"
  tsconfigRootDir: "./"
settings:
  react:
    pragma: "React"
    version: "detect"
  linkComponents:
    - name: Link
      linkAttribute: to
    - name: NavLink
      linkAttribute: to
env:
  browser: true
  es6: true
plugins:
  - "react"
  - "react-hooks"
  - "@typescript-eslint"
extends:
  - "standard"
  - "plugin:react/recommended"
  - "plugin:@typescript-eslint/recommended"
rules:
  quotes:
    - warn
    - single
  indent:
    - warn
    - 4
    - SwitchCase: 1
  semi:
    - warn
    - always
  comma-dangle:
    - warn
    - always-multiline
  spaced-comment:
    - warn
  array-bracket-spacing:
    - warn
    - always
  # Remove errors for not having newlines between operands of ternary expressions https://eslint.org/docs/rules/multiline-ternary
  multiline-ternary: 0
  "react-hooks/rules-of-hooks":
    - error
  "react-hooks/exhaustive-deps": 0
  "@typescript-eslint/explicit-function-return-type": 0
  "@typescript-eslint/explicit-member-accessibility": 0
  "@typescript-eslint/ban-ts-ignore": 0
  "@typescript-eslint/no-explicit-any": 0
  "@typescript-eslint/no-non-null-assertion": 0
  "@typescript-eslint/ban-ts-comment": 0
  # This would be nice to have, but don't want to deal with the warning spam at the moment.
  "@typescript-eslint/explicit-module-boundary-types": 0
  no-restricted-imports:
    - error
    - paths:
        - name: styled-components
          message: Please import from styled-components/macro.
      patterns:
        - "!styled-components/macro"
  # Not sure, this rule just doesn't work right and is protected by our use of Typescript anyways
  # so I'm just not going to worry about it.
  "react/prop-types": 0
  "react/display-name": 0
  "react/jsx-indent-props":
    - warn
    - 4
  "react/jsx-boolean-value":
    - warn
    - never
  "react/jsx-closing-bracket-location":
    - 1
    - "line-aligned"
  "react/jsx-closing-tag-location": 1
  # This setup is required to avoid a spam of errors when running eslint about React being
  # used before it is defined.
  #
  # see https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/no-use-before-define.md#how-to-use
  no-use-before-define: 0
  "@typescript-eslint/no-use-before-define":
    - warn
overrides:
  - files:
      - "**/*.tsx"
    rules:
      operator-linebreak:
        - error
        - before
        - overrides:
            "&&": "after"
            "?": "ignore"
            ":": "ignore"