# BSD 2-Clause License

# Copyright (c) 2009-present, Homebrew contributors
# All rights reserved.

# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:

# * Redistributions of source code must retain the above copyright notice, this
#   list of conditions and the following disclaimer.

# * Redistributions in binary form must reproduce the above copyright notice,
#   this list of conditions and the following disclaimer in the documentation
#   and/or other materials provided with the distribution.

# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

# Taken from Homebrew @ Dec 3, 2018. Modified to pass yamllint
#
---
# make our hashes consistent
Layout/AlignHash:
  EnforcedHashRocketStyle: table
  EnforcedColonStyle: table

# `system` is a special case and aligns on second argument
Layout/AlignParameters:
  Enabled: false

# favour parens-less DSL-style arguments
Lint/AmbiguousOperator:
  Enabled: false

# this is a bit less "floaty"
Layout/CaseIndentation:
  EnforcedStyle: end

# this is a bit less "floaty"
Layout/EndAlignment:
  EnforcedStyleAlignWith: start_of_line

# conflicts with DSL-style path concatenation with `/`
Layout/SpaceAroundOperators:
  Enabled: false

# Auto-correct is broken (https://github.com/rubocop-hq/rubocop/issues/6300).
Layout/EmptyLineAfterGuardClause:
  Enabled: false

# Auto-correct is broken (https://github.com/rubocop-hq/rubocop/issues/6258)
# and layout is not configurable
# (https://github.com/rubocop-hq/rubocop/issues/6254).
Layout/RescueEnsureAlignment:
  Enabled: false

# favour parens-less DSL-style arguments
Lint/AmbiguousBlockAssociation:
  Enabled: false

# so many of these in formulae and can't be autocorrected
# TODO: fix these as `ruby -w` complains about them.
Lint/AmbiguousRegexpLiteral:
  Enabled: false

# assignment in conditions are useful sometimes
# TODO: add parentheses for these and remove
Lint/AssignmentInCondition:
  Enabled: false

# we output how to use interpolated strings too often
Lint/InterpolationCheck:
  Enabled: false

# so many of these in formulae and can't be autocorrected
Lint/ParenthesesAsGroupedExpression:
  Enabled: false

# most metrics don't make sense to apply for formulae/taps
Metrics/AbcSize:
  Enabled: false
Metrics/ClassLength:
  Enabled: false
Metrics/CyclomaticComplexity:
  Enabled: false
Metrics/MethodLength:
  Enabled: false
Metrics/ModuleLength:
  Enabled: false
Metrics/PerceivedComplexity:
  Enabled: false

# GitHub diff UI wraps beyond 118 characters (so that's the goal)
Metrics/LineLength:
  Max: 170
  # ignore manpage comments and long single-line strings
  IgnoredPatterns: ['#: ', ' url "', ' mirror "', ' plist_options :']

# our current conditional style is established
# TODO: enable this when possible
Style/ConditionalAssignment:
  Enabled: false

# most of our APIs are internal so don't require docs
Style/Documentation:
  Enabled: false

# we want to add this slowly and manually
# TODO: add to more files
Style/FrozenStringLiteralComment:
  Enabled: false

# so many of these in formulae and can't be autocorrected
Style/GuardClause:
  Enabled: false

# depends_on a: :b looks weird in formulae.
Style/HashSyntax:
  EnforcedStyle: hash_rockets
  Exclude:
    - '**/cmd/*.rb'

# ruby style guide favorite
Style/StringLiterals:
  EnforcedStyle: double_quotes

# consistency with above
Style/StringLiteralsInInterpolation:
  EnforcedStyle: double_quotes

# make things a bit easier to read
Style/TernaryParentheses:
  EnforcedStyle: require_parentheses_when_complex

# messes with existing plist/caveats style
Style/TrailingBodyOnMethodDefinition:
  Enabled: false

# a bit confusing to non-Rubyists but useful for longer arrays
Style/WordArray:
  MinSize: 4
