inherits_from:
  - .haml-lint_todo.yml
# Whether to ignore frontmatter at the beginning of HAML documents for
# frameworks such as Jekyll/Middleman
skip_frontmatter: false
exclude:
  - 'vendor/**/*'
  - 'spec/**/*'
  - 'ee/spec/**/*'
require:
  - './haml_lint/linter/documentation_links.rb'
  - './haml_lint/linter/inline_javascript.rb'
  - './haml_lint/linter/no_plain_nodes.rb'

linters:
  AltText:
    enabled: true

  ClassAttributeWithStaticValue:
    enabled: true

  ClassesBeforeIds:
    enabled: false

  ConsecutiveComments:
    enabled: false

  ConsecutiveSilentScripts:
    enabled: false
    max_consecutive: 2

  DocumentationLinks:
    enabled: true
    include:
      - 'app/views/**/*.haml'
      - 'ee/app/views/**/*.haml'

  EmptyObjectReference:
    enabled: true

  EmptyScript:
    enabled: true

  FinalNewline:
    enabled: true
    present: true

  HtmlAttributes:
    enabled: true

  IdNames:
    enabled: false

  ImplicitDiv:
    enabled: true

  InlineJavaScript:
    enabled: true

  InlineStyles:
    enabled: false

  InstanceVariables:
    enabled: false

  LeadingCommentSpace:
    enabled: false

  LineLength:
    enabled: false
    max: 80

  MultilinePipe:
    enabled: true

  MultilineScript:
    enabled: true

  ObjectReferenceAttributes:
    enabled: true

  RepeatedId:
    enabled: false

  RuboCop:
    enabled: true
    ignored_cops:
      # These cops are incredibly noisy when it comes to HAML templates, so we
      # ignore them.
      - Layout/BlockAlignment
      - Layout/HashAlignment
      - Layout/IndentationConsistency
      - Layout/IndentationWidth
      - Layout/LineLength
      - Layout/TrailingWhitespace
      - Lint/Void
      - Naming/FileName
      - Layout/ElseAlignment
      - Style/FrozenStringLiteralComment
      - Style/IfUnlessModifier
      - Style/Next
      - Style/SoleNestedConditional
      - Style/StringLiteralsInInterpolation
      - Style/WhileUntilModifier
      - Cop/StaticTranslationDefinition

      # These cops should eventually get enabled

      # haml-lint force enables these: https://github.com/sds/haml-lint/blob/v0.51.0/config/forced_rubocop_config.yml
      - Layout/ArgumentAlignment
      - Layout/ArrayAlignment
      - Layout/ClosingParenthesisIndentation # See https://github.com/sds/haml-lint/issues/491
      - Layout/EndAlignment
      - Layout/SpaceInsideParens # See https://github.com/sds/haml-lint/issues/491

      - Cop/LineBreakAfterGuardClauses
      - Cop/LineBreakAroundConditionalBlock
      - Cop/ProjectPathHelper
      - Gitlab/FeatureAvailableUsage
      - Gitlab/Json
      - Gitlab/Rails/SafeFormat
      - GitlabSecurity/PublicSend
      - Layout/FirstHashElementIndentation
      - Layout/EmptyLineAfterGuardClause
      - Layout/EmptyLines
      - Layout/EmptyLinesAroundBlockBody
      - Layout/ExtraSpacing
      - Layout/InitialIndentation
      - Layout/LeadingCommentSpace
      - Layout/MultilineHashBraceLayout
      - Layout/SpaceAroundOperators
      - Layout/SpaceBeforeComma
      - Layout/SpaceBeforeFirstArg
      - Layout/SpaceInsideHashLiteralBraces
      - Layout/SpaceInsideStringInterpolation
      - Layout/TrailingEmptyLines
      - Lint/AmbiguousOperatorPrecedence
      - Lint/AssignmentInCondition
      - Lint/LiteralInInterpolation
      - Lint/ParenthesesAsGroupedExpression
      - Lint/RedundantStringCoercion
      - Lint/SafeNavigationConsistency
      - Lint/SymbolConversion
      - Lint/UnusedBlockArgument
      - Metrics/BlockNesting
      - Naming/VariableName
      - Performance/RedundantMatch
      - Performance/StringReplacement
      - Rails/LinkToBlank
      - Rails/OutputSafety
      - Rails/RequestReferer
      - Style/ColonMethodCall
      - Style/ConditionalAssignment
      - Style/FormatString
      - Style/HashSyntax
      - Style/IdenticalConditionalBranches
      - Style/IfInsideElse
      - Style/InlineDisableAnnotation
      - Style/MultilineTernaryOperator
      - Style/NegatedIf
      - Style/NestedTernaryOperator
      - Style/RedundantInterpolation
      - Style/SelfAssignment
      - Style/StringConcatenation
      - Style/TernaryParentheses
      - Style/TrailingCommaInHashLiteral
      - Style/UnlessElse
      - Style/WordArray
      - Style/ZeroLengthPredicate

      # WIP See https://gitlab.com/gitlab-org/gitlab/-/issues/207950
      - Cop/UserAdmin
      # See https://gitlab.com/groups/gitlab-org/-/epics/7374.
      # This should eventually be enabled
      - Gitlab/AvoidGitlabInstanceChecks

  RubyComments:
    enabled: true

  SpaceBeforeScript:
    enabled: true

  SpaceInsideHashAttributes:
    enabled: true
    style: space

  Syntax:
    enabled: true

  Indentation:
    enabled: true
    character: space  # or tab

  TagName:
    enabled: true

  TrailingEmptyLines:
    enabled: false

  TrailingWhitespace:
    enabled: true

  UnnecessaryInterpolation:
    enabled: true

  UnnecessaryStringOutput:
    enabled: true

  ViewLength:
    enabled: false
