--- require: - ./Homebrew/rubocops.rb - rubocop-performance - rubocop-rails - rubocop-rspec - rubocop-sorbet inherit_mode: merge: - Include - Exclude AllCops: TargetRubyVersion: 2.6 DisplayCopNames: false ActiveSupportExtensionsEnabled: true NewCops: enable Include: - "**/*.rbi" Exclude: - "Homebrew/sorbet/rbi/gems/**/*.rbi" - "Homebrew/sorbet/rbi/hidden-definitions/*.rbi" - "Homebrew/sorbet/rbi/todo.rbi" - "Homebrew/bin/*" - "Homebrew/vendor/**/*" - "Taps/*/*/vendor/**/*" 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/NoDslVersion: Description: "Do not use the deprecated DSL version syntax in your cask header." 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 # only used internally Homebrew/MoveToExtendOS: Enabled: false # `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/', '"~/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 # 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: # TODO: If possible, make this stricter. 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 # Does not hinder readability, so might as well enable it. Performance/CaseWhenSplat: Enabled: true # Makes code less readable for minor performance increases. Performance/Caller: Enabled: false # Makes code less readable for minor performance increases. Performance/MethodObjectAsBlock: Enabled: false Rails: # Selectively enable what we want. Enabled: false # Do not use ActiveSupport in RuboCops. Exclude: - "Homebrew/rubocops/**/*" # These relate to ActiveSupport and not other parts of Rails. Rails/ActiveSupportAliases: Enabled: true Rails/Blank: Enabled: true Rails/CompactBlank: Enabled: true Rails/Delegate: Enabled: false # TODO Rails/DelegateAllowBlank: Enabled: true Rails/DurationArithmetic: Enabled: true Rails/ExpandedDateRange: Enabled: true Rails/Inquiry: Enabled: true Rails/NegateInclude: Enabled: true Rails/PluralizationGrammar: Enabled: true Rails/Presence: Enabled: true Rails/Present: Enabled: true Rails/RelativeDateConstant: Enabled: true Rails/SafeNavigation: Enabled: true Rails/SafeNavigationWithBlank: Enabled: true Rails/StripHeredoc: Enabled: true Rails/ToFormattedS: Enabled: true # Intentionally disabled as it doesn't fit with our code style. RSpec/AnyInstance: Enabled: false RSpec/DescribeClass: Enabled: false RSpec/FilePath: 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 Sorbet/FalseSigil: Exclude: - "Taps/**/*" - "/**/{Formula,Casks}/**/*.rb" - "**/{Formula,Casks}/**/*.rb" - "Homebrew/test/**/Casks/**/*.rb" Sorbet/StrictSigil: inherit_mode: override: - Include Enabled: true Include: - "**/*.rbi" # Require &&/|| instead of and/or Style/AndOr: EnforcedStyle: always # Avoid leaking resources. Style/AutoResourceCleanup: Enabled: true # This makes these a little more obvious. Style/BarePercentLiterals: EnforcedStyle: percent_q Style/BlockDelimiters: BracesRequiredMethods: - "sig" # 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" # would rather freeze too much than too little Style/MutableConstant: 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" # TODO: These are pre-existing violations and should be corrected # to define methods so that call sites can be type-checked. Style/OpenStructUse: Exclude: - "Homebrew/cli/args.rb" - "Taps/**/*.rb" # 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 # 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 # 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