Merge pull request #4797 from MikeMcQuaid/rubocop-tweaks

.rubocop: tweak rules.
This commit is contained in:
Mike McQuaid 2018-09-02 21:13:23 +01:00 committed by GitHub
commit 3b91c5f1ae
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
39 changed files with 266 additions and 236 deletions

View File

@ -7,12 +7,15 @@ AllCops:
require: ./Homebrew/rubocops.rb
# enable all formulae audits
FormulaAudit:
Enabled: true
# enable all formulae strict audits
FormulaAuditStrict:
Enabled: true
# disable all formulae strict audits by default
NewFormulaAudit:
Enabled: false
@ -20,18 +23,19 @@ NewFormulaAudit:
Layout/AlignParameters:
Enabled: false
# favour parens-less DSL-style arguments
Lint/AmbiguousOperator:
Enabled: false
# this is a bit less "floaty"
Layout/CaseIndentation:
EnforcedStyle: end
Layout/EmptyLineBetweenDefs:
AllowAdjacentOneLineDefs: true
# this is a bit less "floaty"
Layout/EndAlignment:
EnforcedStyleAlignWith: variable
Layout/IndentArray:
EnforcedStyle: special_inside_parentheses
EnforcedStyleAlignWith: start_of_line
# enforce use of <<~EOS
Layout/IndentHeredoc:
EnforcedStyle: squiggly
@ -39,22 +43,29 @@ Layout/IndentHeredoc:
Layout/SpaceAroundOperators:
Enabled: false
# favor parens-less DSL-style arguments
Lint/AmbiguousOperator:
Enabled: false
# use spaces for indentation; detect tabs
Layout/Tab:
Enabled: true
# so many of these in formulae and can't be autocorrected
Lint/AmbiguousRegexpLiteral:
Enabled: false
# favor parens-less DSL-style arguments
# 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
@ -62,58 +73,64 @@ Lint/ParenthesesAsGroupedExpression:
# most metrics don't make sense to apply for formulae/taps
Metrics/AbcSize:
Enabled: false
Metrics/BlockLength:
Enabled: false
Metrics/ClassLength:
Enabled: false
Metrics/CyclomaticComplexity:
Enabled: false
Metrics/MethodLength:
Enabled: false
# Metrics/ModuleLength:
# Enabled: false
Metrics/PerceivedComplexity:
Enabled: false
# keyword arguments don't have the same readability problems
Metrics/ParameterLists:
CountKeywordArgs: false
# GitHub diff UI wraps beyond 118 characters (so that's the goal)
Metrics/LineLength:
# 118 is the goal as GitHub diff UI wraps beyond that
Max: 189
# ignore manpage comments and long single-line strings
IgnoredPatterns: ['#: ', ' url "', ' mirror "', ' plist_options :']
Metrics/MethodLength:
Enabled: false
# dashes in filenames are typical
Naming/FileName:
Regex: !ruby/regexp /^[\w\@\-\+\.]+(\.rb)?$/
Metrics/ModuleLength:
Enabled: false
# implicitly allow EOS as we use it everywhere
Naming/HeredocDelimiterNaming:
Blacklist:
- END, EOD, EOF
Metrics/ParameterLists:
CountKeywordArgs: false
Metrics/PerceivedComplexity:
# we have too many variables like sha256 where this harms readability
Naming/VariableNumber:
Enabled: false
# makes code less readable for minor performance increases
Performance/Caller:
Enabled: false
Style/Alias:
EnforcedStyle: prefer_alias
Style/AsciiComments:
Enabled: false
# we're doing this already so why not
Performance/CaseWhenSplat:
Enabled: true
# enable to avoid leaking resources
Style/AutoResourceCleanup:
Enabled: true
# this is a little more obvious what's going on
Style/BarePercentLiterals:
EnforcedStyle: percent_q
Style/BlockDelimiters:
EnforcedStyle: line_count_based
# consistency helps readability and helps people who don't know Ruby
Style/CollectionMethods:
Enabled: true
Style/ClassAndModuleChildren:
EnforcedStyle: nested
# our current conditional style is established, clear and
# requiring users to change that now would be confusing.
# our current conditional style is established
# TODO: enable this when possible
Style/ConditionalAssignment:
Enabled: false
@ -121,32 +138,17 @@ Style/ConditionalAssignment:
Style/Documentation:
Enabled: false
# we don't need UTF-8 encoding comments
Style/Encoding:
Enabled: true
# disabled until we get the Metrics/LineLength down to 80.
Style/IfUnlessModifier:
Enabled: false
# messes with existing plist/caveats style
Style/TrailingBodyOnMethodDefinition:
Enabled: false
# use spaces for indentation; detect tabs
Layout/Tab:
Enabled: true
# We have no use for using `warn` because we are
# calling Ruby with warnings disabled ourselves.
Style/StderrPuts:
Enabled: false
# dashes in filenames are typical
Naming/FileName:
Regex: !ruby/regexp /^[\w\@\-\+\.]+(\.rb)?$/
# falsely flags e.g. curl formatting arguments as format strings
Style/FormatStringToken:
EnforcedStyle: template
# 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
@ -162,33 +164,31 @@ Style/HashSyntax:
- '**/lib/**/*'
- '**/spec/**/*'
# this doesn't make sense for wide lines below maximum line length
# https://github.com/rubocop-hq/rubocop/issues/6149
Style/IfUnlessModifier:
Enabled: false
# only for numbers >= 1_000_000
Style/NumericLiterals:
MinDigits: 7
# zero-prefixed octal literals are just too widely used (and mostly understood)
# zero-prefixed octal literals are just too widely used (and understood)
Style/NumericLiteralPrefix:
EnforcedOctalStyle: zero_only
# consistency and readability when faced with string interpolation
Style/PercentLiteralDelimiters:
PreferredDelimiters:
'%': '()'
'%i': '()'
'%q': '()'
'%Q': '()'
'%r': '{}'
'%s': '()'
'%w': '[]'
'%W': '[]'
'%x': '()'
# rescuing StandardError is an understood default
Style/RescueStandardError:
EnforcedStyle: implicit
Style/RaiseArgs:
EnforcedStyle: exploded
# return nil is unnecessary and a common mistake believing it's required
Style/ReturnNil:
Enabled: true
# paths abound, easy escape
Style/RegexpLiteral:
EnforcedStyle: slashes
# We have no use for using `warn` because we are
# calling Ruby with warnings disabled ourselves (for now).
Style/StderrPuts:
Enabled: false
# ruby style guide favorite
Style/StringLiterals:
@ -198,46 +198,30 @@ Style/StringLiterals:
Style/StringLiteralsInInterpolation:
EnforcedStyle: double_quotes
# consistency helps readability and helps people who don't know Ruby
Style/StringMethods:
Enabled: true
# less confusing to non-Rubyists
Style/SymbolArray:
EnforcedStyle: brackets
# make things a bit easier to read
Style/TernaryParentheses:
EnforcedStyle: require_parentheses_when_complex
# makes diffs nicer
# messes with existing plist/caveats style
Style/TrailingBodyOnMethodDefinition:
Enabled: false
# all trailing commas make diffs nicer
Style/TrailingCommaInArguments:
EnforcedStyleForMultiline: comma
Style/TrailingCommaInArrayLiteral:
EnforcedStyleForMultiline: comma
Style/TrailingCommaInHashLiteral:
EnforcedStyleForMultiline: comma
Style/TrailingCommaInArguments:
EnforcedStyleForMultiline: comma
# we have too many variables like sha256 where this harms readability
Naming/VariableNumber:
Enabled: false
# doesn't make sense for Homebrew/brew but does for taps
Naming/UncommunicativeMethodParamName:
Enabled: true
# a bit confusing to non-Rubyists but useful for longer arrays
Style/WordArray:
MinSize: 4
# we want to add this slowly and manually
Style/FrozenStringLiteralComment:
Enabled: false
# generally rescuing StandardError is fine
Style/RescueStandardError:
Enabled: false
# implicitly allow EOS as we use it everywhere
Naming/HeredocDelimiterNaming:
Blacklist:
- END, EOD, EOF
# we output how to use interpolated strings too often
Lint/InterpolationCheck:
Enabled: false

View File

@ -10,14 +10,11 @@ AllCops:
- '**/Casks/**/*'
- '**/vendor/**/*'
# make rspec formatting more flexible
Layout/MultilineMethodCallIndentation:
Exclude:
- '**/*_spec.rb'
# Gets false positives with our heredocs nested inside arrays
Layout/ClosingHeredocIndentation:
Enabled: false
# so many of these in formulae but none in here
Lint/AmbiguousRegexpLiteral:
Enabled: true
@ -31,70 +28,101 @@ Lint/NestedMethodDefinition:
Lint/ParenthesesAsGroupedExpression:
Enabled: true
# unused keyword arguments improve APIs
Lint/UnusedMethodArgument:
AllowUnusedKeywordArguments: true
# TODO: try to bring down all metrics maximums
Metrics/AbcSize:
Max: 250
Enabled: true
Max: 275
Metrics/BlockLength:
Max: 1250
Enabled: true
Max: 1100
Metrics/BlockNesting:
Enabled: true
Max: 5
Metrics/ClassLength:
Max: 1226
Enabled: true
Max: 1400
Metrics/CyclomaticComplexity:
Enabled: true
Max: 75
Metrics/MethodLength:
Enabled: true
Max: 300
Metrics/ModuleLength:
Enabled: true
Max: 500
Metrics/PerceivedComplexity:
Enabled: true
Max: 100
# GitHub diff UI wraps beyond 118 characters
Metrics/LineLength:
# 118 is the goal as GitHub diff UI wraps beyond that
Max: 118
# ignore manpage comments
IgnoredPatterns: ['#: ']
Metrics/MethodLength:
Max: 195
Metrics/ModuleLength:
Max: 222
Metrics/PerceivedComplexity:
Max: 100
# we won't change backward compatible method names
Naming/MethodName:
Exclude:
- 'compat/**/*'
# we won't change backward compatible predicate names
# TODO: deprecate whitelisted names and move to compat
Naming/PredicateName:
Exclude:
- 'compat/**/*'
NameWhitelist: is_32_bit?, is_64_bit?
# f meaning formulae is pretty standard
# whitelist those that are standard
# TODO: try to remove some of these
Naming/UncommunicativeMethodParamName:
Enabled: false
AllowedNames:
- '_'
- 'a'
- 'b'
- 'cc'
- 'c1'
- 'c2'
- 'd'
- 'e'
- 'f'
- 'ff'
- 'fn'
- 'id'
- 'io'
- 'o'
- 'p'
- 'pr'
- 'r'
- 'rb'
- 's'
- 'to'
- 'v'
# Avoid false positives on modifiers used on symbols of methods
# See https://github.com/rubocop-hq/rubocop/issues/5953
Style/AccessModifierDeclarations:
Enabled: false
# make rspec formatting more flexible
Style/BlockDelimiters:
Exclude:
- '**/*_spec.rb'
- '**/shared_examples/**/*.rb'
# document our public APIs
Style/Documentation:
Enabled: true
Include:
- 'Library/Homebrew/formula.rb'
Style/DocumentationMethod:
Enabled: true
Include:
- 'Library/Homebrew/formula.rb'
# so many of these in formulae but none in here
Style/GuardClause:
Enabled: true
# hash-rockets preferred for formulae, a: 1 preferred elsewhere
# hash-rockets preferred for formulae, a: 1 preferred here
Style/HashSyntax:
EnforcedStyle: ruby19_no_mixed_keys

View File

@ -174,7 +174,7 @@ class Build
raise
end
Keg.new(path).optlink
rescue StandardError
rescue
raise "#{f.opt_prefix} not present or broken\nPlease reinstall #{f.full_name}. Sorry :("
end
end

View File

@ -30,7 +30,7 @@ module Hbc
def class_for_dsl_key(dsl_key)
namespace = self.class.name.to_s.sub(/::.*::.*$/, "")
self.class.const_get("#{namespace}::DSL::#{dsl_key.to_s.split("_").collect(&:capitalize).join}")
self.class.const_get("#{namespace}::DSL::#{dsl_key.to_s.split("_").map(&:capitalize).join}")
end
def abstract_phase(dsl_key)

View File

@ -39,7 +39,7 @@ module Hbc
check_latest_with_auto_updates
check_stanza_requires_uninstall
self
rescue StandardError => e
rescue => e
odebug "#{e.message}\n#{e.backtrace.join("\n")}"
add_error "exception while auditing #{cask}: #{e.message}"
self

View File

@ -94,7 +94,7 @@ module Hbc
path = PATH.new(tap_cmd_directories, ENV["HOMEBREW_PATH"])
external_ruby_cmd = tap_cmd_directories.map { |d| d/"brewcask-#{command}.rb" }
.detect(&:file?)
.find(&:file?)
external_ruby_cmd ||= which("brewcask-#{command}.rb", path)
if external_ruby_cmd
@ -126,7 +126,7 @@ module Hbc
end
def detect_command_and_arguments(*args)
command = args.detect do |arg|
command = args.find do |arg|
if self.class.commands.include?(arg)
true
else

View File

@ -49,7 +49,7 @@ module Hbc
if locations.empty?
puts self.class.none_string
else
locations.collect do |l|
locations.map do |l|
add_error "Legacy install at #{l}. Run \"brew uninstall --force brew-cask\"."
puts l
end
@ -163,7 +163,7 @@ module Hbc
def self.cask_count_for_tap(tap)
Formatter.pluralize(tap.cask_files.count, "cask")
rescue StandardError
rescue
add_error "Unable to read from Tap: #{tap.path}"
"0"
end

View File

@ -63,7 +63,7 @@ module Hbc
begin
value = cask.send(stanza)
rescue StandardError
rescue
opoo "failure calling '#{stanza}' on Cask '#{cask}'" unless quiet?
puts ""
next

View File

@ -39,7 +39,7 @@ module Hbc
def fetch
downloader.fetch
@downloaded_path = downloader.cached_location
rescue StandardError => e
rescue => e
error = CaskError.new("Download failed on Cask '#{cask}' with message: #{e}")
error.set_backtrace e.backtrace
raise error

View File

@ -102,7 +102,7 @@ module Hbc
instance_variable_set("@#{stanza}", yield)
rescue CaskInvalidError
raise
rescue StandardError => e
rescue => e
raise CaskInvalidError.new(cask, "'#{stanza}' stanza failed with: #{e}")
end
@ -271,7 +271,7 @@ module Hbc
artifacts.add(klass.from_args(cask, *args))
rescue CaskInvalidError
raise
rescue StandardError => e
rescue => e
raise CaskInvalidError.new(cask, "invalid '#{klass.dsl_key}' stanza: #{e}")
end
end

View File

@ -48,7 +48,7 @@ module Hbc
else
raise
end
rescue StandardError
rescue
raise "invalid 'depends_on macos' value: #{arg.inspect}"
end
end

View File

@ -74,7 +74,7 @@ module Hbc
extract_primary_container
save_caskfile
rescue StandardError => e
rescue => e
purge_versioned_files
raise e
end
@ -209,7 +209,7 @@ module Hbc
artifact.install_phase(command: @command, verbose: verbose?, force: force?)
already_installed_artifacts.unshift(artifact)
end
rescue StandardError => e
rescue => e
begin
already_installed_artifacts.each do |artifact|
next unless artifact.respond_to?(:uninstall_phase)
@ -397,7 +397,7 @@ module Hbc
See System Preferences to enable it manually.
EOS
end
rescue StandardError => e
rescue => e
purge_versioned_files
raise e
end
@ -503,12 +503,12 @@ module Hbc
end
def backup_path
return nil if @cask.staged_path.nil?
return if @cask.staged_path.nil?
Pathname.new "#{@cask.staged_path}.upgrading"
end
def backup_metadata_path
return nil if @cask.metadata_versioned_path.nil?
return if @cask.metadata_versioned_path.nil?
Pathname.new "#{@cask.metadata_versioned_path}.upgrading"
end

View File

@ -47,7 +47,7 @@ module Hbc
parent = metadata_timestamped_path(version: version, timestamp: timestamp, create: create)
return nil if parent.nil?
return if parent.nil?
subdir = parent.join(leaf)

View File

@ -13,13 +13,13 @@ module Hbc
def plist_set(key, value)
plist_exec("Set #{key} #{value}")
rescue StandardError => e
rescue => e
raise CaskError, "#{@cask.token}: 'plist_set' failed with: #{e}"
end
def bundle_identifier
plist_exec("Print CFBundleIdentifier").stdout.chomp
rescue StandardError => e
rescue => e
raise CaskError, "#{@cask.token}: 'bundle_identifier' failed with: #{e}"
end

View File

@ -27,7 +27,7 @@ module Hbc
tried_ownership = false
begin
yield path
rescue StandardError
rescue
# in case of permissions problems
unless tried_permissions
# TODO: Better handling for the case where path is a symlink.

View File

@ -151,7 +151,7 @@ module Homebrew
end
def deps_for_formulae(formulae, recursive = false, &block)
formulae.map { |f| deps_for_formula(f, recursive) }.inject(&block)
formulae.map { |f| deps_for_formula(f, recursive) }.reduce(&block)
end
def puts_deps(formulae)

View File

@ -182,7 +182,7 @@ module Homebrew
end
def decorate_dependencies(dependencies)
deps_status = dependencies.collect do |dep|
deps_status = dependencies.map do |dep|
if dep.satisfied?([])
pretty_installed(dep_display_s(dep))
else
@ -193,7 +193,7 @@ module Homebrew
end
def decorate_requirements(requirements)
req_status = requirements.collect do |req|
req_status = requirements.map do |req|
req_s = req.display_s
req.satisfied? ? pretty_installed(req_s) : pretty_uninstalled(req_s)
end

View File

@ -88,7 +88,7 @@ module Homebrew
end
json << { name: f.full_name,
installed_versions: outdated_versions.collect(&:to_s),
installed_versions: outdated_versions.map(&:to_s),
current_version: current_version,
pinned: f.pinned?,
pinned_version: f.pinned_version }

View File

@ -56,7 +56,7 @@ module Homebrew
conflicts(*package_manager_switches)
end
if package_manager = PACKAGE_MANAGERS.detect { |name,| args[:"#{name}?"] }
if package_manager = PACKAGE_MANAGERS.find { |name,| args[:"#{name}?"] }
_, url = package_manager
exec_browser url.call(URI.encode_www_form_component(args.remaining.join(" ")))
return

View File

@ -60,7 +60,7 @@ module Debrew
if i.positive?
choice = menu.entries[i - 1]
else
possible = menu.entries.find_all { |e| e.name.start_with?(input) }
possible = menu.entries.select { |e| e.name.start_with?(input) }
case possible.size
when 0 then puts "No such option"

View File

@ -257,8 +257,10 @@ module Homebrew
wanted_mode = 0100644 & ~File.umask
actual_mode = formula.path.stat.mode
unless actual_mode == wanted_mode
problem format("Incorrect file permissions (%03o): chmod %03o %s",
actual_mode & 0777, wanted_mode & 0777, formula.path)
problem format("Incorrect file permissions (%03<actual>o): chmod %03<wanted>o %{path}",
actual: actual_mode & 0777,
wanted: wanted_mode & 0777,
path: formula.path)
end
problem "'DATA' was found, but no '__END__'" if text.data? && !text.end?
@ -407,7 +409,7 @@ module Homebrew
dep.options.each do |opt|
next if dep_f.option_defined?(opt)
next if dep_f.requirements.detect do |r|
next if dep_f.requirements.find do |r|
if r.recommended?
opt.name == "with-#{r.name}"
elsif r.optional?

View File

@ -29,7 +29,7 @@ module Homebrew
CacheStoreDatabase.use(:linkage) do |db|
kegs = if ARGV.kegs.empty?
Formula.installed.collect(&:opt_or_installed_prefix_keg).reject(&:nil?)
Formula.installed.map(&:opt_or_installed_prefix_keg).reject(&:nil?)
else
ARGV.kegs
end

View File

@ -513,7 +513,7 @@ module Homebrew
def self.lookup(name)
json = Utils.popen_read(HOMEBREW_BREW_FILE, "info", "--json=v1", name)
return nil unless $CHILD_STATUS.success?
return unless $CHILD_STATUS.success?
Homebrew.force_utf8!(json)
FormulaInfoFromJson.new(JSON.parse(json)[0])
@ -526,9 +526,9 @@ module Homebrew
def bottle_info(my_bottle_tag = Utils::Bottles.tag)
tag_s = my_bottle_tag.to_s
return nil unless info["bottle"]["stable"]
return unless info["bottle"]["stable"]
btl_info = info["bottle"]["stable"]["files"][tag_s]
return nil unless btl_info
return unless btl_info
BottleInfo.new(btl_info["url"], btl_info["sha256"])
end

View File

@ -61,13 +61,13 @@ module Homebrew
# Specify paths relative to a prefix eg. "include/foo.h".
# Sets @found for your convenience.
def find_relative_paths(*relative_paths)
@found = [HOMEBREW_PREFIX, "/usr/local"].uniq.inject([]) do |found, prefix|
@found = [HOMEBREW_PREFIX, "/usr/local"].uniq.reduce([]) do |found, prefix|
found + relative_paths.map { |f| File.join(prefix, f) }.select { |f| File.exist? f }
end
end
def inject_file_list(list, string)
list.inject(string) { |acc, elem| acc << " #{elem}\n" }
list.reduce(string) { |acc, elem| acc << " #{elem}\n" }
end
############# END HELPERS

View File

@ -93,7 +93,7 @@ module HomebrewArgvExtension
def kegs
require "keg"
require "formula"
@kegs ||= downcased_unique_named.collect do |name|
@kegs ||= downcased_unique_named.map do |name|
raise UsageError if name.empty?
rack = Formulary.to_rack(name.downcase)

View File

@ -23,11 +23,11 @@ class JavaRequirement < Requirement
end
def java_home_cmd
return nil unless File.executable?("/usr/libexec/java_home")
return unless File.executable?("/usr/libexec/java_home")
args = %w[--failfast]
args << "--version" << @version.to_s if @version
java_home = Utils.popen_read("/usr/libexec/java_home", *args).chomp
return nil unless $CHILD_STATUS.success?
return unless $CHILD_STATUS.success?
Pathname.new(java_home)/"bin/java"
end

View File

@ -1120,7 +1120,7 @@ class Formula
begin
yield self, staging
rescue StandardError
rescue
staging.retain! if ARGV.interactive? || ARGV.debug?
raise
ensure
@ -1373,7 +1373,7 @@ class Formula
files.each do |file|
begin
yield Formulary.factory(file)
rescue StandardError => e
rescue => e
# Don't let one broken formula break commands. But do complain.
onoe "Failed to import: #{file}"
puts e
@ -1812,7 +1812,9 @@ class Formula
@exec_count ||= 0
@exec_count += 1
logfn = format("#{logs}/#{active_log_prefix}%02d.%s", @exec_count, File.basename(cmd).split(" ").first)
logfn = format("#{logs}/#{active_log_prefix}%02<exec_count>d.%{cmd_base}",
exec_count: @exec_count,
cmd_base: File.basename(cmd).split(" ").first)
logs.mkpath
File.open(logfn, "w") do |log|
@ -2006,7 +2008,7 @@ class Formula
$stdout.reopen(out)
$stderr.reopen(out)
out.close
args.collect!(&:to_s)
args.map!(&:to_s)
begin
exec(cmd, *args)
rescue

View File

@ -283,7 +283,7 @@ module Formulary
# to install the formula will be set instead.
def self.from_rack(rack, spec = nil, alias_path: nil)
kegs = rack.directory? ? rack.subdirs.map { |d| Keg.new(d) } : []
keg = kegs.detect(&:linked?) || kegs.detect(&:optlinked?) || kegs.max_by(&:version)
keg = kegs.find(&:linked?) || kegs.find(&:optlinked?) || kegs.max_by(&:version)
if keg
from_keg(keg, spec, alias_path: alias_path)
@ -432,7 +432,7 @@ module Formulary
"#{tap}HomebrewFormula/#{name}.rb",
"#{tap}#{name}.rb",
"#{tap}Aliases/#{name}",
]).detect(&:file?)
]).find(&:file?)
end.compact
end

View File

@ -389,7 +389,7 @@ class Keg
def oldname_opt_record
@oldname_opt_record ||= if (opt_dir = HOMEBREW_PREFIX/"opt").directory?
opt_dir.subdirs.detect do |dir|
opt_dir.subdirs.find do |dir|
dir.symlink? && dir != opt_record && path.parent == dir.resolved_path.parent
end
end

View File

@ -69,8 +69,8 @@ class Locale
alias == eql?
def detect(locale_groups)
locale_groups.detect { |locales| locales.any? { |locale| eql?(locale) } } ||
locale_groups.detect { |locales| locales.any? { |locale| include?(locale) } }
locale_groups.find { |locales| locales.any? { |locale| eql?(locale) } } ||
locale_groups.find { |locales| locales.any? { |locale| include?(locale) } }
end
def to_s

View File

@ -174,7 +174,7 @@ class Migrator
keg_dirs += new_cellar.subdirs if new_cellar.exist?
keg_dirs += old_cellar.subdirs
kegs = keg_dirs.map { |d| Keg.new(d) }
kegs.detect(&:linked?) || kegs.detect(&:optlinked?)
kegs.find(&:linked?) || kegs.find(&:optlinked?)
end
def pinned?

View File

@ -37,7 +37,7 @@ module ArchitectureListExtension
end
def as_arch_flags
collect { |a| "-arch #{a}" }.join(" ")
map { |a| "-arch #{a}" }.join(" ")
end
def as_cmake_arch_flags

View File

@ -94,7 +94,7 @@ class JavaRequirement < Requirement
end
def preferred_java
possible_javas.detect do |java|
possible_javas.find do |java|
next false unless java&.executable?
next true unless @version
next true if satisfies_version(java)

View File

@ -335,7 +335,7 @@ class Tap
# path to the directory of all {Formula} files for this {Tap}.
def formula_dir
@formula_dir ||= potential_formula_dirs.detect(&:directory?) || path/"Formula"
@formula_dir ||= potential_formula_dirs.find(&:directory?) || path/"Formula"
end
def potential_formula_dirs

View File

@ -47,56 +47,62 @@ describe RuboCop::Cop::FormulaAudit::Patches do
inspect_source(source)
expected_offense = if patch_url =~ %r{/raw\.github\.com/}
[{ message: <<~EOS.chomp,
GitHub/Gist patches should specify a revision:
#{patch_url}
[{ message:
<<~EOS.chomp,
GitHub/Gist patches should specify a revision:
#{patch_url}
EOS
severity: :convention,
line: 5,
column: 12,
source: source }]
elsif patch_url =~ %r{macports/trunk}
[{ message: <<~EOS.chomp,
MacPorts patches should specify a revision instead of trunk:
#{patch_url}
[{ message:
<<~EOS.chomp,
MacPorts patches should specify a revision instead of trunk:
#{patch_url}
EOS
severity: :convention,
line: 5,
column: 33,
source: source }]
elsif patch_url =~ %r{^http://trac\.macports\.org}
[{ message: <<~EOS.chomp,
Patches from MacPorts Trac should be https://, not http:
#{patch_url}
[{ message:
<<~EOS.chomp,
Patches from MacPorts Trac should be https://, not http:
#{patch_url}
EOS
severity: :convention,
line: 5,
column: 5,
source: source }]
elsif patch_url =~ %r{^http://bugs\.debian\.org}
[{ message: <<~EOS.chomp,
Patches from Debian should be https://, not http:
#{patch_url}
[{ message:
<<~EOS.chomp,
Patches from Debian should be https://, not http:
#{patch_url}
EOS
severity: :convention,
line: 5,
column: 5,
source: source }]
elsif patch_url =~ %r{https?://patch-diff\.githubusercontent\.com/raw/(.+)/(.+)/pull/(.+)\.(?:diff|patch)}
[{ message: <<~EOS,
use GitHub pull request URLs:
https://github.com/foo/foo-bar/pull/100.patch
Rather than patch-diff:
https://patch-diff.githubusercontent.com/raw/foo/foo-bar/pull/100.patch
[{ message:
<<~EOS,
use GitHub pull request URLs:
https://github.com/foo/foo-bar/pull/100.patch
Rather than patch-diff:
https://patch-diff.githubusercontent.com/raw/foo/foo-bar/pull/100.patch
EOS
severity: :convention,
line: 5,
column: 5,
source: source }]
elsif patch_url =~ %r{https?://github\.com/.+/.+/(?:commit|pull)/[a-fA-F0-9]*.(?:patch|diff)}
[{ message: <<~EOS,
GitHub patches should use the full_index parameter:
#{patch_url}?full_index=1
[{ message:
<<~EOS,
GitHub patches should use the full_index parameter:
#{patch_url}?full_index=1
EOS
severity: :convention,
line: 5,
@ -132,9 +138,10 @@ describe RuboCop::Cop::FormulaAudit::Patches do
line: 4,
column: 2,
source: source },
{ message: <<~EOS.chomp,
Patches from MacPorts Trac should be https://, not http:
http://trac.macports.org/export/68507/trunk/dports/net/trafshow/files/
{ message:
<<~EOS.chomp,
Patches from MacPorts Trac should be https://, not http:
http://trac.macports.org/export/68507/trunk/dports/net/trafshow/files/
EOS
severity: :convention,
line: 8,
@ -175,47 +182,52 @@ describe RuboCop::Cop::FormulaAudit::Patches do
inspect_source(source)
expected_offense = if patch_url =~ %r{/raw\.github\.com/}
[{ message: <<~EOS.chomp,
GitHub/Gist patches should specify a revision:
#{patch_url}
[{ message:
<<~EOS.chomp,
GitHub/Gist patches should specify a revision:
#{patch_url}
EOS
severity: :convention,
line: 5,
column: 16,
source: source }]
elsif patch_url =~ %r{macports/trunk}
[{ message: <<~EOS.chomp,
MacPorts patches should specify a revision instead of trunk:
#{patch_url}
[{ message:
<<~EOS.chomp,
MacPorts patches should specify a revision instead of trunk:
#{patch_url}
EOS
severity: :convention,
line: 5,
column: 37,
source: source }]
elsif patch_url =~ %r{^http://trac\.macports\.org}
[{ message: <<~EOS.chomp,
Patches from MacPorts Trac should be https://, not http:
#{patch_url}
[{ message:
<<~EOS.chomp,
Patches from MacPorts Trac should be https://, not http:
#{patch_url}
EOS
severity: :convention,
line: 5,
column: 9,
source: source }]
elsif patch_url =~ %r{^http://bugs\.debian\.org}
[{ message: <<~EOS.chomp,
Patches from Debian should be https://, not http:
#{patch_url}
[{ message:
<<~EOS.chomp,
Patches from Debian should be https://, not http:
#{patch_url}
EOS
severity: :convention,
line: 5,
column: 9,
source: source }]
elsif patch_url =~ %r{https?://patch-diff\.githubusercontent\.com/raw/(.+)/(.+)/pull/(.+)\.(?:diff|patch)}
[{ message: <<~EOS,
use GitHub pull request URLs:
https://github.com/foo/foo-bar/pull/100.patch
Rather than patch-diff:
https://patch-diff.githubusercontent.com/raw/foo/foo-bar/pull/100.patch
[{ message:
<<~EOS,
use GitHub pull request URLs:
https://github.com/foo/foo-bar/pull/100.patch
Rather than patch-diff:
https://patch-diff.githubusercontent.com/raw/foo/foo-bar/pull/100.patch
EOS
severity: :convention,
line: 5,

View File

@ -80,11 +80,11 @@ module UnpackStrategy
def self.from_extension(extension)
strategies.sort_by { |s| s.extensions.map(&:length).max(0) }
.reverse
.detect { |s| s.extensions.any? { |ext| extension.end_with?(ext) } }
.find { |s| s.extensions.any? { |ext| extension.end_with?(ext) } }
end
def self.from_magic(path)
strategies.detect { |s| s.can_extract?(path) }
strategies.find { |s| s.can_extract?(path) }
end
def self.detect(path, extension_only: false, type: nil, ref_type: nil, ref: nil)
@ -93,7 +93,7 @@ module UnpackStrategy
if extension_only
strategy ||= from_extension(path.extname)
strategy ||= strategies.select { |s| s < Directory || s == Fossil }
.detect { |s| s.can_extract?(path) }
.find { |s| s.can_extract?(path) }
else
strategy ||= from_magic(path)
strategy ||= from_extension(path.extname)

View File

@ -31,8 +31,10 @@ module UnpackStrategy
end
def bom
# rubocop:disable Style/AsciiComments
# We need to use `find` here instead of Ruby in order to properly handle
# file names containing special characters, such as “e” + “´” vs. “é”.
# rubocop:enable Style/AsciiComments
system_command("find", args: [".", "-print0"], chdir: self, print_stderr: false)
.stdout
.split("\0")

View File

@ -182,7 +182,7 @@ module Homebrew
def _system(cmd, *args, **options)
pid = fork do
yield if block_given?
args.collect!(&:to_s)
args.map!(&:to_s)
begin
exec(cmd, *args, **options)
rescue
@ -380,7 +380,7 @@ end
# GZips the given paths, and returns the gzipped paths
def gzip(*paths)
paths.collect do |path|
paths.map do |path|
safe_system "gzip", path
Pathname.new("#{path}.gz")
end
@ -426,7 +426,7 @@ def nostdout
end
def paths
@paths ||= PATH.new(ENV["HOMEBREW_PATH"]).collect do |p|
@paths ||= PATH.new(ENV["HOMEBREW_PATH"]).map do |p|
begin
File.expand_path(p).chomp("/")
rescue ArgumentError

View File

@ -1,7 +1,7 @@
module Utils
class InreplaceError < RuntimeError
def initialize(errors)
formatted_errors = errors.inject("inreplace failed\n") do |s, (path, errs)|
formatted_errors = errors.reduce("inreplace failed\n") do |s, (path, errs)|
s << "#{path}:\n" << errs.map { |e| " #{e}\n" }.join
end
super formatted_errors