As-of 3.1: this mean that you omit the hash value if the name is the same as the key. We're allowing this already and it didn't make sense to land until the bulk of the other RuboCop 3.1 changes did but, now we're ready, it is more concise and a pattern that people will need to understand anyway.
471 lines
11 KiB
YAML
471 lines
11 KiB
YAML
---
|
|
require:
|
|
- ./Homebrew/rubocops.rb
|
|
- rubocop-md
|
|
- rubocop-performance
|
|
- rubocop-rspec
|
|
- rubocop-sorbet
|
|
|
|
inherit_mode:
|
|
merge:
|
|
- Include
|
|
- Exclude
|
|
|
|
AllCops:
|
|
TargetRubyVersion: 3.1
|
|
NewCops: enable
|
|
Include:
|
|
# FIXME: https://github.com/rubocop/rubocop/issues/12695
|
|
- "Homebrew/**/*.rbi"
|
|
Exclude:
|
|
- "Homebrew/sorbet/rbi/{dsl,gems}/**/*.rbi"
|
|
- "Homebrew/sorbet/rbi/parlour.rbi"
|
|
- "Homebrew/bin/*"
|
|
- "Homebrew/vendor/**/*"
|
|
- "Taps/*/*/vendor/**/*"
|
|
SuggestExtensions:
|
|
rubocop-minitest: false
|
|
|
|
Cask/Desc:
|
|
Description: "Ensure that the desc stanza conforms to various content and style checks."
|
|
Enabled: true
|
|
|
|
Cask/HomepageUrlTrailingSlash:
|
|
Description: "Ensure that the homepage url has a slash after the domain name."
|
|
Enabled: true
|
|
|
|
Cask/StanzaGrouping:
|
|
Description: "Ensure that cask stanzas are grouped correctly. More info at https://docs.brew.sh/Cask-Cookbook#stanza-order"
|
|
Enabled: true
|
|
|
|
Cask/StanzaOrder:
|
|
Description: "Ensure that cask stanzas are sorted correctly. More info at https://docs.brew.sh/Cask-Cookbook#stanza-order"
|
|
Enabled: true
|
|
|
|
FormulaAudit:
|
|
Enabled: true
|
|
|
|
FormulaAuditStrict:
|
|
Enabled: true
|
|
|
|
Homebrew:
|
|
Enabled: true
|
|
|
|
Homebrew/Blank:
|
|
Exclude:
|
|
# Core extensions are not available here:
|
|
- "Homebrew/startup/bootsnap.rb"
|
|
|
|
Homebrew/CompactBlank:
|
|
Exclude:
|
|
# `blank?` is not necessarily available here:
|
|
- "Homebrew/extend/enumerable.rb"
|
|
|
|
# only used internally
|
|
Homebrew/MoveToExtendOS:
|
|
Enabled: false
|
|
|
|
Homebrew/NegateInclude:
|
|
Exclude:
|
|
# `exclude?` is not available here:
|
|
- "Homebrew/standalone/init.rb"
|
|
- "Homebrew/rubocops/**/*"
|
|
- "Homebrew/sorbet/tapioca/**/*"
|
|
|
|
# `system` is a special case and aligns on second argument, so allow this for formulae.
|
|
Layout/ArgumentAlignment:
|
|
Exclude:
|
|
- "Taps/*/*/*.rb"
|
|
- "/**/Formula/**/*.rb"
|
|
- "**/Formula/**/*.rb"
|
|
|
|
# this is a bit less "floaty"
|
|
Layout/CaseIndentation:
|
|
EnforcedStyle: end
|
|
|
|
# significantly less indentation involved; more consistent
|
|
Layout/FirstArrayElementIndentation:
|
|
EnforcedStyle: consistent
|
|
Layout/FirstHashElementIndentation:
|
|
EnforcedStyle: consistent
|
|
|
|
# this is a bit less "floaty"
|
|
Layout/EndAlignment:
|
|
EnforcedStyleAlignWith: start_of_line
|
|
|
|
# make our hashes consistent
|
|
Layout/HashAlignment:
|
|
EnforcedHashRocketStyle: table
|
|
EnforcedColonStyle: table
|
|
|
|
# Need to allow #: for external commands.
|
|
Layout/LeadingCommentSpace:
|
|
Exclude:
|
|
- "Taps/*/*/cmd/*.rb"
|
|
|
|
# GitHub diff UI wraps beyond 118 characters
|
|
Layout/LineLength:
|
|
Max: 118
|
|
# ignore manpage comments and long single-line strings
|
|
AllowedPatterns:
|
|
[
|
|
"#: ",
|
|
' url "',
|
|
' mirror "',
|
|
" plist_options ",
|
|
' appcast "',
|
|
' executable: "',
|
|
' font "',
|
|
' homepage "',
|
|
' name "',
|
|
' pkg "',
|
|
' pkgutil: "',
|
|
" sha256 cellar: ",
|
|
" sha256 ",
|
|
"#{language}",
|
|
"#{version.",
|
|
' "/Library/Application Support/',
|
|
'"/Library/Caches/',
|
|
'"/Library/PreferencePanes/',
|
|
' "~/Library/Application Support/',
|
|
'"~/Library/Caches/',
|
|
'"~/Library/Containers',
|
|
'"~/Application Support',
|
|
" was verified as official when first introduced to the cask",
|
|
]
|
|
|
|
# conflicts with DSL-style path concatenation with `/`
|
|
Layout/SpaceAroundOperators:
|
|
Enabled: false
|
|
|
|
# makes DSL usage ugly.
|
|
Layout/SpaceBeforeBrackets:
|
|
Exclude:
|
|
- "**/*_spec.rb"
|
|
- "Taps/*/*/*.rb"
|
|
- "/**/{Formula,Casks}/**/*.rb"
|
|
- "**/{Formula,Casks}/**/*.rb"
|
|
|
|
# favour parens-less DSL-style arguments
|
|
Lint/AmbiguousBlockAssociation:
|
|
Enabled: false
|
|
|
|
Lint/DuplicateBranch:
|
|
Exclude:
|
|
- "Taps/*/*/*.rb"
|
|
- "/**/{Formula,Casks}/**/*.rb"
|
|
- "**/{Formula,Casks}/**/*.rb"
|
|
|
|
# so many of these in formulae and can't be autocorrected
|
|
Lint/ParenthesesAsGroupedExpression:
|
|
Exclude:
|
|
- "Taps/*/*/*.rb"
|
|
- "/**/Formula/**/*.rb"
|
|
- "**/Formula/**/*.rb"
|
|
|
|
# unused keyword arguments improve APIs
|
|
Lint/UnusedMethodArgument:
|
|
AllowUnusedKeywordArguments: true
|
|
|
|
# These metrics didn't end up helping.
|
|
Metrics:
|
|
Enabled: false
|
|
|
|
# Disabled because it breaks Sorbet: "The declaration for `with` is missing parameter(s): & (RuntimeError)"
|
|
Naming/BlockForwarding:
|
|
Enabled: false
|
|
|
|
# Allow dashes in filenames.
|
|
Naming/FileName:
|
|
Regex: !ruby/regexp /^[\w\@\-\+\.]+(\.rb)?$/
|
|
|
|
# Implicitly allow EOS as we use it everywhere.
|
|
Naming/HeredocDelimiterNaming:
|
|
ForbiddenDelimiters:
|
|
- END, EOD, EOF
|
|
|
|
Naming/InclusiveLanguage:
|
|
CheckStrings: true
|
|
FlaggedTerms:
|
|
slave:
|
|
AllowedRegex:
|
|
- "gitslave" # Used in formula `gitslave`
|
|
- "log_slave" # Used in formula `ssdb`
|
|
- "ssdb_slave" # Used in formula `ssdb`
|
|
- "var_slave" # Used in formula `ssdb`
|
|
- "patches/13_fix_scope_for_show_slave_status_data.patch" # Used in formula `mytop`
|
|
|
|
Naming/MethodName:
|
|
AllowedPatterns:
|
|
- '\A(fetch_)?HEAD\?\Z'
|
|
|
|
Naming/MethodParameterName:
|
|
inherit_mode:
|
|
merge:
|
|
- AllowedNames
|
|
|
|
# Both styles are used depending on context,
|
|
# e.g. `sha256` and `something_countable_1`.
|
|
Naming/VariableNumber:
|
|
Enabled: false
|
|
|
|
# Makes code less readable for minor performance increases.
|
|
Performance/Caller:
|
|
Enabled: false
|
|
|
|
# Does not hinder readability, so might as well enable it.
|
|
Performance/CaseWhenSplat:
|
|
Enabled: true
|
|
|
|
# Makes code less readable for minor performance increases.
|
|
Performance/MethodObjectAsBlock:
|
|
Enabled: false
|
|
|
|
RSpec:
|
|
Include:
|
|
- 'Homebrew/test/**/*'
|
|
|
|
# Intentionally disabled as it doesn't fit with our code style.
|
|
RSpec/AnyInstance:
|
|
Enabled: false
|
|
RSpec/DescribeClass:
|
|
Enabled: false
|
|
RSpec/FilePath:
|
|
Enabled: false
|
|
RSpec/SpecFilePathFormat:
|
|
Enabled: false
|
|
RSpec/StubbedMock:
|
|
Enabled: false
|
|
RSpec/SubjectStub:
|
|
Enabled: false
|
|
|
|
# We use `allow(:foo).to receive(:bar)` everywhere.
|
|
RSpec/MessageSpies:
|
|
EnforcedStyle: receive
|
|
|
|
# These were ever-growing numbers, not useful.
|
|
RSpec/ExampleLength:
|
|
Enabled: false
|
|
RSpec/MultipleExpectations:
|
|
Enabled: false
|
|
RSpec/NestedGroups:
|
|
Enabled: false
|
|
RSpec/MultipleMemoizedHelpers:
|
|
Enabled: false
|
|
|
|
# Annoying to have these autoremoved.
|
|
RSpec/Focus:
|
|
AutoCorrect: false
|
|
|
|
# Try getting rid of these.
|
|
Sorbet/ConstantsFromStrings:
|
|
Enabled: false
|
|
|
|
# This is already the default
|
|
Sorbet/FalseSigil:
|
|
Enabled: false
|
|
|
|
# We generally prefer to colo rbi files with the Ruby files they describe.
|
|
Sorbet/ForbidRBIOutsideOfAllowedPaths:
|
|
Enabled: false
|
|
|
|
# T::Sig is monkey-patched into Module
|
|
Sorbet/RedundantExtendTSig:
|
|
Enabled: true
|
|
|
|
Sorbet/StrictSigil:
|
|
Enabled: true
|
|
inherit_mode:
|
|
override:
|
|
- Include
|
|
Include:
|
|
- "**/*.rbi"
|
|
|
|
Sorbet/TrueSigil:
|
|
Enabled: true
|
|
Exclude:
|
|
- "Taps/**/*"
|
|
- "/**/{Formula,Casks}/**/*.rb"
|
|
- "**/{Formula,Casks}/**/*.rb"
|
|
- "Homebrew/test/**/*.rb"
|
|
|
|
# Require &&/|| instead of and/or
|
|
Style/AndOr:
|
|
EnforcedStyle: always
|
|
|
|
# Disabled because it breaks Sorbet: "The declaration for `with` is missing parameter(s): & (RuntimeError)"
|
|
Style/ArgumentsForwarding:
|
|
Enabled: false
|
|
|
|
# Avoid leaking resources.
|
|
Style/AutoResourceCleanup:
|
|
Enabled: true
|
|
|
|
# This makes these a little more obvious.
|
|
Style/BarePercentLiterals:
|
|
EnforcedStyle: percent_q
|
|
|
|
Style/BlockDelimiters:
|
|
BracesRequiredMethods:
|
|
- "sig"
|
|
|
|
Style/ClassAndModuleChildren:
|
|
Exclude:
|
|
- "**/*.rbi"
|
|
|
|
# Use consistent style for better readability.
|
|
Style/CollectionMethods:
|
|
Enabled: true
|
|
|
|
# Don't allow cops to be disabled in casks and formulae.
|
|
Style/DisableCopsWithinSourceCodeDirective:
|
|
Enabled: true
|
|
Include:
|
|
- "Taps/*/*/*.rb"
|
|
- "/**/{Formula,Casks}/**/*.rb"
|
|
- "**/{Formula,Casks}/**/*.rb"
|
|
|
|
# The files actually scanned in this cop are in `Library/Homebrew/.rubocop.yml`.
|
|
Style/Documentation:
|
|
Exclude:
|
|
- "Taps/**/*"
|
|
- "/**/{Formula,Casks}/**/*.rb"
|
|
- "**/{Formula,Casks}/**/*.rb"
|
|
- "**/*.rbi"
|
|
|
|
# This is quite a large change, so don't enforce this yet for formulae.
|
|
# We should consider doing so in the future, but be aware of the impact on third-party taps.
|
|
Style/FetchEnvVar:
|
|
Exclude:
|
|
- "Taps/*/*/*.rb"
|
|
- "/**/Formula/**/*.rb"
|
|
- "**/Formula/**/*.rb"
|
|
|
|
# Not used for casks and formulae.
|
|
Style/FrozenStringLiteralComment:
|
|
EnforcedStyle: always
|
|
Exclude:
|
|
- "Taps/*/*/*.rb"
|
|
- "/**/{Formula,Casks}/**/*.rb"
|
|
- "**/{Formula,Casks}/**/*.rb"
|
|
- "Homebrew/test/**/Casks/**/*.rb"
|
|
- "**/*.rbi"
|
|
- "**/Brewfile"
|
|
|
|
# potential for errors in formulae too high with this
|
|
Style/GuardClause:
|
|
Exclude:
|
|
- "Taps/*/*/*.rb"
|
|
- "/**/{Formula,Casks}/**/*.rb"
|
|
- "**/{Formula,Casks}/**/*.rb"
|
|
|
|
# Allow for license expressions
|
|
Style/HashAsLastArrayItem:
|
|
Exclude:
|
|
- "Taps/*/*/*.rb"
|
|
- "/**/Formula/**/*.rb"
|
|
- "**/Formula/**/*.rb"
|
|
|
|
Style/InverseMethods:
|
|
InverseMethods:
|
|
:blank?: :present?
|
|
|
|
Style/InvertibleUnlessCondition:
|
|
Enabled: true
|
|
InverseMethods:
|
|
# Favor `if a != b` over `unless a == b`
|
|
:==: :!=
|
|
# Unset this (prefer `unless a.zero?` over `if a.nonzero?`)
|
|
:zero?:
|
|
:blank?: :present?
|
|
|
|
Style/MutableConstant:
|
|
# would rather freeze too much than too little
|
|
EnforcedStyle: strict
|
|
|
|
# Zero-prefixed octal literals are widely used and understood.
|
|
Style/NumericLiteralPrefix:
|
|
EnforcedOctalStyle: zero_only
|
|
|
|
# Only use this for numbers >= `1_000_000`.
|
|
Style/NumericLiterals:
|
|
MinDigits: 7
|
|
Strict: true
|
|
Exclude:
|
|
- "**/Brewfile"
|
|
|
|
Style/OpenStructUse:
|
|
Exclude:
|
|
- "Taps/**/*"
|
|
# TODO: This is a pre-existing violation and should be corrected
|
|
# to define methods so that call sites can be type-checked.
|
|
- "Homebrew/cli/args.rb"
|
|
- "Homebrew/cli/args.rbi"
|
|
|
|
# Rescuing `StandardError` is an understood default.
|
|
Style/RescueStandardError:
|
|
EnforcedStyle: implicit
|
|
|
|
# Returning `nil` is unnecessary.
|
|
Style/ReturnNil:
|
|
Enabled: true
|
|
|
|
# We have no use for using `warn` because we
|
|
# are calling Ruby with warnings disabled.
|
|
Style/StderrPuts:
|
|
Enabled: false
|
|
|
|
# so many of these in formulae and can't be autocorrected
|
|
Style/StringConcatenation:
|
|
Exclude:
|
|
- "Taps/*/*/*.rb"
|
|
- "/**/{Formula,Casks}/**/*.rb"
|
|
- "**/{Formula,Casks}/**/*.rb"
|
|
|
|
# ruby style guide favorite
|
|
Style/StringLiterals:
|
|
EnforcedStyle: double_quotes
|
|
|
|
# consistency with above
|
|
Style/StringLiteralsInInterpolation:
|
|
EnforcedStyle: double_quotes
|
|
|
|
# Use consistent method names.
|
|
Style/StringMethods:
|
|
Enabled: true
|
|
|
|
# Treating this the same as Style/MethodCallWithArgsParentheses
|
|
Style/SuperWithArgsParentheses:
|
|
Enabled: false
|
|
|
|
# An array of symbols is more readable than a symbol array
|
|
# and also allows for easier grepping.
|
|
Style/SymbolArray:
|
|
EnforcedStyle: brackets
|
|
|
|
# make things a bit easier to read
|
|
Style/TernaryParentheses:
|
|
EnforcedStyle: require_parentheses_when_complex
|
|
|
|
Style/TopLevelMethodDefinition:
|
|
Enabled: true
|
|
Exclude:
|
|
- "Taps/**/*"
|
|
|
|
# Trailing commas make diffs nicer.
|
|
Style/TrailingCommaInArguments:
|
|
EnforcedStyleForMultiline: comma
|
|
Style/TrailingCommaInArrayLiteral:
|
|
EnforcedStyleForMultiline: comma
|
|
Style/TrailingCommaInHashLiteral:
|
|
EnforcedStyleForMultiline: comma
|
|
|
|
# `unless ... ||` and `unless ... &&` are hard to mentally parse
|
|
Style/UnlessLogicalOperators:
|
|
Enabled: true
|
|
EnforcedStyle: forbid_logical_operators
|
|
|
|
# a bit confusing to non-Rubyists but useful for longer arrays
|
|
Style/WordArray:
|
|
MinSize: 4
|