{
  "root": true,
  "parser": "@typescript-eslint/parser",
  "plugins": [
    "@typescript-eslint",
    "eslint-plugin-tsdoc"
  ],
  "parserOptions": {
    "project": "./tsconfig.json",
    "tsconfigRootDir": ".",
    "ecmaVersion": 2018,
    "ecmaFeatures": {
      "jsx": true
    },
    "sourceType": "module"
  },
  "settings": {
    "react": {
      "version": "detect"
    }
  },
  "rules": {
    "quotes": ["error", "double", { "allowTemplateLiterals": true }],
    "semi": "error",
    "indent": ["error", 2, {
      "FunctionDeclaration": { "parameters": "first" }
    }],
    "eol-last": ["error", "always"],
    "object-shorthand": ["error", "always"],
    "no-unused-vars": 0,
    "no-lonely-if": "warn",
    "no-trailing-spaces": "warn",
    "no-whitespace-before-property": "warn",
    "space-before-blocks": "warn",
    "space-in-parens": ["warn", "never"],
    "space-infix-ops": "warn",
    "eqeqeq": "warn",

    "react/display-name": 0,
    "react/prop-types": 0,
    "react/jsx-uses-react": "off",
    "react/react-in-jsx-scope": "off",

    "tsdoc/syntax": "warn",
    "@typescript-eslint/no-explicit-any": 0,
    "@typescript-eslint/explicit-module-boundary-types": ["warn", {
      "allowArgumentsExplicitlyTypedAsAny": true,
      "allowDirectConstAssertionInArrowFunctions": true,
      "allowedNames": [],
      "allowHigherOrderFunctions": true,
      "allowTypedFunctionExpressions": true
    }],
    "@typescript-eslint/consistent-type-definitions": ["error", "interface"],
    "@typescript-eslint/member-delimiter-style": ["error", {
      "multiline": {"delimiter": "semi", "requireLast": true},
      "singleline": {"delimiter": "semi", "requireLast": false}
    }],
    "@typescript-eslint/no-unused-vars": ["warn", {
      "ignoreRestSiblings": true,
      "argsIgnorePattern": "^_"
    }],
    "@typescript-eslint/no-non-null-assertion": 0,
    "@typescript-eslint/space-before-function-paren": ["warn", {
      "anonymous": "never",
      "named": "never",
      "asyncArrow": "always"
    }]
  },
  "extends": [
    "eslint:recommended",
    "plugin:@typescript-eslint/recommended",
    "plugin:react/recommended",
    "plugin:react-hooks/recommended"
  ]
}
