{
  "defaultSeverity": "error",
  "extends": [
    "tslint-config-airbnb",
    "tslint-eslint-rules",
    "tslint-react-hooks",
    "tslint-react"
  ],
  "jsRules": {},
  "rulesDirectory": [],
  "rules": {
    "no-shadowed-variable": true,
    "arrow-parens": false,
    "whitespace": [
      false,
      "check-branch",
      "check-decl",
      "check-operator",
      "check-separator",
      "check-type"
    ],
    "linebreak-style": [true, "LF"],
    "react-hooks-nesting": "error",
    "arrow-return-shorthand": [false],
    "semicolon": [true, "never"],
    "block-spacing": [
      true,
      "never"
    ],
    "object-shorthand-properties-first": false,
    "comment-format": [true, "check-space"],
    "function-name": [false],
    "import-blacklist": [true, "rxjs"],
    "interface-over-type-literal": false,
    "interface-name": false,
    "naming-convention": [true,
      {"type": "default", "format": "camelCase", "leadingUnderscore": "allow", "trailingUnderscore": "forbid"},
      {"type": "variable", "format": ["camelCase","UPPER_CASE","PascalCase"]},
      {"type": "variable", "modifiers": ["global", "const"], "format": ["camelCase","UPPER_CASE","PascalCase"]},
      {"type": "variable", "modifiers": ["export", "const"], "format": ["camelCase","UPPER_CASE"]},
      {"type": "functionVariable", "modifiers": ["export", "const"], "leadingUnderscore": "forbid", "format": "camelCase"},
      {"type": "parameter", "modifiers": "unused", "leadingUnderscore": "allow"},
      {"type": "member", "modifiers": "private", "leadingUnderscore": "require"},
      {"type": "member", "modifiers": "protected", "leadingUnderscore": "require"},
      {"type": "method", "filter": "^toJSON$", "format": null},
      {"type": "property", "modifiers": ["public", "static", "const"], "format": "UPPER_CASE"},
      {"type": "type", "format": "PascalCase"},
      {"type": "typeAlias", "format": "PascalCase", "prefix": "T"},
      {"type": "class", "modifiers": "abstract"},
      {"type": "interface", "format": "PascalCase", "prefix": "I"},
      {"type": "genericTypeParameter", "format": "PascalCase", "prefix": "T"},
      {"type": "enumMember", "format": "PascalCase"}
    ],
    "max-line-length": [true, 120],
    "member-access": false,
    "member-ordering": [true, { "order": "fields-first" }],
    "newline-before-return": false,
    "no-any": false,
    "no-empty-interface": false,
    "no-import-side-effect": [true, {"ignore-module": "(\\.html|\\.css|\\.scss)$"}],
    "no-inferrable-types": [true, "ignore-params", "ignore-properties"],
    "no-invalid-this": [true, "check-function-in-method"],
    "no-null-keyword": false,
    "no-require-imports": false,
    "no-submodule-imports": [false],
    "no-this-assignment": [true, { "allow-destructuring": true }],
    "no-trailing-whitespace": true,
    "no-var-requires": false,
    "object-literal-sort-keys": false,
    "object-literal-shorthand": false,
    "one-variable-per-declaration": [false],
    "only-arrow-functions": [true, "allow-declarations"],
    "ordered-imports": [false],
    "prefer-method-signature": false,
    "prefer-template": [true, "allow-single-concat"],
    "no-unused-variable": true,
    "no-restricted-globals": [2, "find"],
    "no-cond-assign": [1, "always"],
    "trailing-comma": [true, {
      "singleline": "never",
      "multiline": {
        "objects": "never",
        "arrays": "never",
        "functions": "never",
        "typeLiterals": "ignore"
      }
    }],
    "newline-per-chained-call": [false],
    "triple-equals": [true, "allow-null-check"],
    "type-literal-delimiter": false,
    "typedef": [true,"parameter", "property-declaration"],
    "variable-name": [true, "ban-keywords", "check-format", "allow-pascal-case", "allow-leading-underscore"],
    "jsx-no-lambda": false,
    "ter-arrow-parens": [false],
    "ter-indent": [
      false,
      2,
      {
        "SwitchCase": 4
      }
    ],
    "quotemark": [true, "single", "jsx-single"],
    "import-name": [false],
    "no-restricted-imports": [
      1,
      "lodash"
    ],
    "new-parens": true,
    "no-plusplus": [1, { "allowForLoopAfterthoughts": true }],
    "prefer-promise-reject-errors": [1, { "allowEmptyReject": false }],
    "one-var": [1, "never"],
    "max-len": [2, { "code": 120, "ignoreStrings": true }],
    "dot-location": [2, "property"],
    "operator-linebreak": [
      2,
      "after",
      {
        "overrides": {
          ">": "before",
          ">=": "before",
          "<": "before",
          "<=": "before",
          "||": "before",
          "&&": "before",
          "+": "before",
          "-": "before"
        }
      }
    ],
    "cyclomatic-complexity": [true, 15],
    "max-statements": [2, 15],
    "max-depth": [1, 2],
    "complexity": [2, 10],
    "max-params": [1, 3],
    "max-nested-callbacks": [2, 3],
    "prefer-const": true,
    "no-param-reassign": [
      1,
      {
        "props": false
      }
    ],
    "no-console": false,
    "comma-dangle": [2, "never"],
    "func-style": [
      2,
      "declaration",
      {
        "allowArrowFunctions": true
      }
    ],
    "newline-after-var": [2, "always"],
    "new-cap": [
      2,
      {
        "capIsNewExceptions": ["Nothing", "T", "F"],
        "newIsCap": false
      }
    ],
    "no-unused-expressions": [
      2,
      {
        "allowShortCircuit": true,
        "allowTernary": true
      }
    ],
    "no-underscore-dangle": [
      2,
      {
        "allow": ["_exception", "__html"]
      }
    ],
    "jsx-quotes": [2, "prefer-single"],
    "jsx-boolean-value": "always",
    "react/jsx-indent": [4, "spaces"],
    "react/prefer-stateless-function": [
      0,
      {
        "ignorePureComponents": true
      }
    ],
    "react/require-optimization": [
      1,
      { "allowDecorators": ["pureRender", "connect"] }
    ],
    "react/forbid-prop-types": [
      2,
      {
        "forbid": ["any"]
      }
    ],
    "quote-props": [1, "consistent-as-needed"],
    "react/display-name": [
      1,
      {
        "ignoreTranspilerName": false
      }
    ],
    "react/jsx-indent-props": [1, 2],
    "react/no-multi-comp": [
      1,
      {
        "ignoreStateless": true
      }
    ],
    "react/jsx-handler-names": [
      1,
      {
        "eventHandlerPrefix": "handle",
        "eventHandlerPropPrefix": "on"
      }
    ],
    "react/jsx-max-props-per-line": [1, { "maximum": 2 }],
    "react/sort-comp": [
      2,
      {
        "order": [
          "static-methods",
          "mixins",
          "displayName",
          "actions",
          "contextTypes",
          "childContextTypes",
          "propTypes",
          "defaultProps",
          "pure",
          "statics",
          "state",
          "constructor",
          "getDefaultProps",
          "getInitialState",
          "getChildContext",
          "getStoresState",
          "componentWillMount",
          "componentDidMount",
          "componentWillReceiveProps",
          "shouldComponentUpdate",
          "componentWillUpdate",
          "componentDidUpdate",
          "componentWillUnmount",
          "/^component.+$/",
          "/^get.+$/",
          "/^on.+$/",
          "/^handle.+$/",
          "everything-else",
          "/^render.+$/",
          "render"
        ]
      }
    ],
    "import/no-unresolved": [
      2,
      {
        "commonjs": true,
        "amd": false
      }
    ],
    "import/extensions": [
      1,
      "always",
      {
        "js": "never",
        "jsx": "always"
      }
    ],
    "no-multiple-empty-lines": [
      2,
      {
        "max": 1
      }
    ]
  }
}
