{
  // Consider using no-identical-functions and disabling in faulty tests
  // Consider using cognitive-complexity and refactor
  // Consider using no-useless-cast but it's annoying
  "extends": [
    "tslint-no-circular-imports"
  ],
  "rulesDirectory": [
    "node_modules/tslint-sonarts/lib/rules"
  ],
  "linterOptions": {
    "format": "codeFrame",
    "exclude": [
      "dist-schema/**",
      "**/third_party/**"
    ]
  },
  "rules": {
    // ==================================================================================================
    // tslint-sonarts rules. See https://github.com/SonarSource/SonarTS
    // These rules are part of the bug detection section of tslint-sonarts
    "no-big-function": true,
    "no-all-duplicated-branches": true,
    "no-case-with-or": true,
    "no-collection-size-mischeck": true,
    "no-element-overwrite": true,
    "no-empty-destructuring": true,
    "no-identical-conditions": true,
    "no-ignored-initial-value": true,
    "no-ignored-return": true,
    "no-in-misuse": true,
    "no-misleading-array-reverse": true,
    "no-misspelled-operator": true,
    "no-self-assignment": true,
    "no-unthrown-error": true,
    "no-use-of-empty-return-value": true,
    "no-useless-increment": true,
    "no-invalid-await": true,
    "prefer-promise-shorthand": true,

    //These rules are part of the code smell detection section of tslint-sonarts
    "no-dead-store": true,
    "no-useless-intersection": true,
    // ==================================================================================================
    // base tslint rules
    "arrow-return-shorthand": true,
    "no-duplicate-imports": true,
    "no-angle-bracket-type-assertion": true,
    "no-conditional-assignment": true,
    "no-non-null-assertion": true,
    "no-unnecessary-qualifier": true,
    "no-string-throw": true,
    "encoding": true,
    "no-floating-promises": true,
    "no-implicit-dependencies": [
      true,
      // Specs can depend on the package they are testing.
      // This is a workaround, we should instead have a dedicated
      // tslint config only for specs.
      ["@angular-devkit/build-angular"]
    ],
    "no-import-side-effect": [true, {"ignore-module": "^(?!rxjs\/)"}],
    "align": [
      true,
      "elements",
      "members",
      "parameters",
      "statements"
    ],
    "max-line-length": [true, 140],
    "no-inferrable-types": true,
    "class-name": true,
    "comment-format": [
      true,
      "check-space"
    ],
    "indent": [
      true,
      "spaces"
    ],
    "eofline": true,
    "import-spacing": true,
    "newline-before-return": true,
    "no-consecutive-blank-lines": [true, 2],
    "no-duplicate-variable": true,
    "no-eval": true,
    "no-any": true,
    "no-arg": true,
    "no-debugger": true,
    "no-console": true,
    "no-internal-module": true,
    "no-trailing-whitespace": true,
    "no-unused-expression": true,
    "no-var-keyword": true,
    "one-line": [
      true,
      "check-catch",
      "check-else",
      "check-finally",
      "check-open-brace",
      "check-whitespace"
    ],
    "ordered-imports": [
      true,
      {
        "import-sources-order": "lowercase-last",
        "named-imports-order": "lowercase-last"
      }
    ],
    "prefer-const": true,
    "quotemark": [
      true,
      "single",
      "avoid-escape"
    ],
    "semicolon": [true, "always"],
    "trailing-comma": [
      true,
      {
        "multiline": "always",
        "singleline": "never"
      }
    ],
    "typedef-whitespace": [
      true,
      {
        "call-signature": "nospace",
        "index-signature": "nospace",
        "parameter": "nospace",
        "property-declaration": "nospace",
        "variable-declaration": "nospace"
      }
    ],
    "curly": true,
    "file-header": [
      true,
      "Copyright Google Inc\\. All Rights Reserved\\."
    ],
    "variable-name": [
      true,
      "ban-keywords",
      "check-format",
      "allow-leading-underscore",
      "allow-pascal-case"
    ],
    "whitespace": [
      true,
      "check-branch",
      "check-decl",
      "check-module",
      "check-preblock",
      "check-operator",
      "check-separator",
      "check-type",
      "check-typecast"
    ]
  }
}
