# JSDoc
interfaced/jsdoc-tags-order: ["error", {
  tagsOrder: [
    "deprecated",
    "template",
    "abstract",
    "virtual",
    "extends",
    "implements",
    "override",
    "suppress",
    "type",
    "this",
    "param",
    "return",
    "throws",
    "public",
    "protected",
    "private"
  ]
}]
interfaced/jsdoc-type-application-dot: ["error", "never"]
interfaced/jsdoc-type-indent: ["error", 4]
interfaced/jsdoc-type-spacing: ["error", {
  topBraces: "never",
  parens: "never",
  unaryOperator: "never",
  unionPipe: { before: "never", after: "never" },
  typeApplicationBrackets: "never",
  typeApplicationComma: { before: "never", after: "always" },
  recordBraces: "never",
  recordFieldComma: { before: "never", after: "always" },
  recordFieldColon: { before: "never", after: "always" },
  functionKeyword: "never",
  functionParens: "never",
  functionParamComma: { before: "never", after: "always" },
  functionParamColon: { before: "never", after: "always" },
  functionResultColon: { before: "never", after: "always" }
}]
interfaced/no-jsdoc-type-multi-spaces: "error"
interfaced/no-jsdoc-type-tabs: "error"
interfaced/no-restricted-jsdoc-tags: ["error", {
  tags: ["inheritdoc", "public", {
    tag: "extends",
    allowWithTags: ["interface", "constructor", "record"],
    allowWithTypes: ["TypeApplication"] # Lets use @extends for generics
  }]
}]
interfaced/prefer-shorthand-jsdoc-types: ["error", { optionalParam: "always", nullableType: "always" }]
interfaced/prevent-unused-jsdoc-types: "error"

# Naming convention
interfaced/abstract-class-name-prefix: "error"
interfaced/capitalized-enum: "error"
interfaced/capitalized-typedef: "error"
interfaced/caps-const: "error"
interfaced/event-const-desc: "error"
interfaced/event-const-value: "error"
interfaced/interface-name-prefix: "error"
interfaced/singular-enum: "error"

# Stylistic issues
interfaced/lines-around-class: ["error", { before: 2, after: 2, collisionPriority: "before" }]
interfaced/lines-between-methods: ["error", { amount: 1 }]
interfaced/lines-between-props: ["error", { amount: 1 }]
interfaced/methods-order: ["error", { scopesOrder: ["public", "protected", "private"], staticInTheEnd: true }]
interfaced/props-order: ["error", { scopesOrder: ["public", "protected", "private"], constInTheEnd: true }]
interfaced/typecast-spacing: "error"

# Other
interfaced/no-empty-method: "error"
interfaced/no-public-underscore: "error"
interfaced/prevent-unused-meta-params: "error"

# Redefined
interfaced/no-param-reassign: "error"
interfaced/no-unused-expressions: "error"
