diff --git a/Library/.rubocop.yml b/Library/.rubocop.yml
index 99de0d8a2119da6a3aaa6e2c5e588fcab11e9b77..2fe2394470ad041c77e60527b0b1d54c237c2c8c 100644
--- a/Library/.rubocop.yml
+++ b/Library/.rubocop.yml
@@ -1,12 +1,156 @@
-inherit_from:
-  - .rubocop_rules.yml
-  - .rubocop_todo.yml
-
 AllCops:
   TargetRubyVersion: 2.0
-  Include:
-    - '**/.simplecov'
-  Exclude:
-    - 'Homebrew/cask/**/*'
-    - 'Homebrew/vendor/**/*'
-    - 'Homebrew/test/vendor/**/*'
+
+Metrics/AbcSize:
+  Enabled: false
+
+Metrics/ClassLength:
+  Enabled: false
+
+Metrics/CyclomaticComplexity:
+  Enabled: false
+
+Metrics/LineLength:
+  Enabled: false
+
+Metrics/MethodLength:
+  Enabled: false
+
+Metrics/ModuleLength:
+  CountComments: false
+
+Metrics/PerceivedComplexity:
+  Enabled: false
+
+# favor parens-less DSL-style arguments
+Lint/AmbiguousOperator:
+  Enabled: false
+
+Lint/AmbiguousRegexpLiteral:
+  Enabled: false
+
+Lint/AssignmentInCondition:
+  Enabled: false
+
+Lint/EndAlignment:
+  AlignWith: variable
+
+Lint/ParenthesesAsGroupedExpression:
+  Enabled: false
+
+Style/Alias:
+  EnforcedStyle: prefer_alias
+
+Style/AlignHash:
+  Enabled: false
+
+# `system` is a special case and aligns on second argument
+Style/AlignParameters:
+  Enabled: false
+
+Style/CaseIndentation:
+  IndentWhenRelativeTo: end
+
+Style/ClassAndModuleChildren:
+  EnforcedStyle: nested
+
+# percent-x is allowed for multiline
+Style/CommandLiteral:
+  EnforcedStyle: mixed
+
+# our current conditional style is established, clear and
+# requiring users to change that now would be confusing.
+Style/ConditionalAssignment:
+  Enabled: false
+
+Style/Documentation:
+ Enabled: false
+
+Style/EmptyLineBetweenDefs:
+  AllowAdjacentOneLineDefs: true
+
+# dashes in filenames are typical
+Style/FileName:
+  Regex: !ruby/regexp /^[\w\@\-\+\.]+(\.rb)?$/
+
+Style/GuardClause:
+  Enabled: false
+
+Style/HashSyntax:
+  EnforcedStyle: hash_rockets
+
+Style/IfUnlessModifier:
+  Enabled: false
+
+Style/IndentArray:
+  EnforcedStyle: special_inside_parentheses
+
+# only for numbers >= 1_000_000
+Style/NumericLiterals:
+  MinDigits: 7
+
+# zero-prefixed octal literals are just too widely used (and mostly 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': '()'
+
+# we prefer Perl-style regex back references
+Style/PerlBackrefs:
+  Enabled: false
+
+Style/RaiseArgs:
+  EnforcedStyle: exploded
+
+# paths abound, easy escape
+Style/RegexpLiteral:
+  EnforcedStyle: slashes
+
+# conflicts with DSL-style path concatenation with `/`
+Style/SpaceAroundOperators:
+  Enabled: false
+
+# not a problem for typical shell users
+Style/SpecialGlobalVars:
+  Enabled: false
+
+# ruby style guide favorite
+Style/StringLiterals:
+  EnforcedStyle: double_quotes
+
+# consistency with above
+Style/StringLiteralsInInterpolation:
+  EnforcedStyle: double_quotes
+
+# TODO: enforce when rubocop has shipped this
+# https://github.com/bbatsov/rubocop/pull/3513
+Style/TernaryParentheses:
+  Enabled: false
+
+# makes diffs nicer
+Style/TrailingCommaInLiteral:
+  EnforcedStyleForMultiline: comma
+
+Style/UnneededCapitalW:
+  Enabled: false
+
+# TODO: enforce when rubocop has fixed this
+# https://github.com/bbatsov/rubocop/issues/3516
+Style/VariableNumber:
+  Enabled: false
+
+# TODO: enforce when rubocop has fixed this
+# https://github.com/bbatsov/rubocop/issues/1543
+Style/WordArray:
+  Enabled: false
diff --git a/Library/.rubocop_rules.yml b/Library/.rubocop_rules.yml
deleted file mode 100644
index 63898929104b421bf3ca481c0a290993cf68272d..0000000000000000000000000000000000000000
--- a/Library/.rubocop_rules.yml
+++ /dev/null
@@ -1,258 +0,0 @@
-Metrics/AbcSize:
-  Enabled: false
-
-Metrics/ClassLength:
-  Enabled: false
-
-Metrics/CyclomaticComplexity:
-  Enabled: false
-
-Metrics/LineLength:
-  Enabled: false
-
-Metrics/MethodLength:
-  Enabled: false
-
-Metrics/ModuleLength:
-  CountComments: false
-  Exclude:
-    - 'Homebrew/cask/lib/hbc/locations.rb'
-    - 'Homebrew/cask/lib/hbc/macos.rb'
-    - 'Homebrew/cask/lib/hbc/utils.rb'
-
-Metrics/PerceivedComplexity:
-  Enabled: false
-
-# favor parens-less DSL-style arguments
-Lint/AmbiguousOperator:
-  Enabled: false
-
-Lint/AmbiguousRegexpLiteral:
-  Enabled: false
-
-Lint/AssignmentInCondition:
-  Enabled: false
-
-Lint/EndAlignment:
-  AlignWith: variable
-
-# `formula do` uses nested method definitions
-Lint/NestedMethodDefinition:
-  Exclude:
-    - 'Homebrew/test/**/*'
-
-Lint/ParenthesesAsGroupedExpression:
-  Enabled: false
-
-Style/Alias:
-  EnforcedStyle: prefer_alias
-
-Style/AlignHash:
-  Enabled: false
-
-# `system` is a special case and aligns on second argument
-Style/AlignParameters:
-  Enabled: false
-
-Style/BarePercentLiterals:
-  Exclude:
-    - 'Taps/**/*'
-  EnforcedStyle: percent_q
-
-Style/BlockDelimiters:
-  EnforcedStyle: semantic
-  Exclude:
-    - 'Taps/**/*'
-  FunctionalMethods:
-    - expect
-    - find
-    - let
-    - let!
-    - subject
-    - watch
-    - inject
-    - map
-    - map!
-    - collect
-    - collect!
-    - reject
-    - reject!
-    - delete_if
-    - with_object
-    - popen_read
-  ProceduralMethods:
-    - after
-    - at_exit
-    - before
-    - benchmark
-    - bm
-    - bmbm
-    - capture_io
-    - capture_output
-    - capture_subprocess_io
-    - chdir
-    - context
-    - create
-    - define_method
-    - define_singleton_method
-    - fork
-    - measure
-    - new
-    - open
-    - realtime
-    - shutup
-    - tap
-    - each
-    - each_pair
-    - each_with_index
-    - reverse_each
-    - ignore_interrupts
-  IgnoredMethods:
-    - each_with_object
-    - it
-    - its
-    - lambda
-    - proc
-    - formula
-    - mock
-    - devel
-    - stable
-    - head
-    - assert_raises
-    - assert_nothing_raised
-    - resource
-    - with_build_environment
-    - ensure_writable
-    - satisfy
-    - fetch
-    - brew
-    - expand
-    - env
-    - recursive_dependencies
-    - trap
-    - link_dir
-    - with_system_path
-
-Style/CaseIndentation:
-  IndentWhenRelativeTo: end
-
-Style/ClassAndModuleChildren:
-  EnforcedStyle: nested
-
-# percent-x is allowed for multiline
-Style/CommandLiteral:
-  EnforcedStyle: mixed
-
-# our current conditional style is established, clear and
-# requiring users to change that now would be confusing.
-Style/ConditionalAssignment:
-  Enabled: false
-
-Style/Documentation:
- Enabled: false
-
-Style/EmptyLineBetweenDefs:
-  AllowAdjacentOneLineDefs: true
-
-# dashes in filenames are typical
-Style/FileName:
-  Regex: !ruby/regexp /^[\w\@\-\+\.]+(\.rb)?$/
-
-# counterproductive in formulas, notably within the install method
-Style/GuardClause:
-  Exclude:
-    - 'Taps/**/*'
-
-# depends_on foo: :bar looks rubbish
-Style/HashSyntax:
-  EnforcedStyle: ruby19_no_mixed_keys
-  Exclude:
-    - 'Taps/**/*'
-
-Style/IfUnlessModifier:
-  Exclude:
-    - 'Taps/**/*'
-
-Style/IndentArray:
-  EnforcedStyle: special_inside_parentheses
-
-# we won't change backward compatible method names
-Style/MethodName:
-  Exclude:
-    - 'Homebrew/compat/**/*'
-
-# only for numbers >= 1_000_000
-Style/NumericLiterals:
-  MinDigits: 7
-
-# zero-prefixed octal literals are just too widely used (and mostly 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': '()'
-
-# we prefer Perl-style regex back references
-Style/PerlBackrefs:
-  Enabled: false
-
-# we won't change backward compatible predicate names
-Style/PredicateName:
-  Exclude:
-    - 'Homebrew/compat/**/*'
-  NameWhitelist: is_32_bit?, is_64_bit?
-
-Style/RaiseArgs:
-  EnforcedStyle: exploded
-
-# paths abound, easy escape
-Style/RegexpLiteral:
-  EnforcedStyle: slashes
-
-# conflicts with DSL-style path concatenation with `/`
-Style/SpaceAroundOperators:
-  Enabled: false
-
-# not a problem for typical shell users
-Style/SpecialGlobalVars:
-  Enabled: false
-
-# ruby style guide favorite
-Style/StringLiterals:
-  EnforcedStyle: double_quotes
-
-# consistency with above
-Style/StringLiteralsInInterpolation:
-  EnforcedStyle: double_quotes
-
-# TODO: enforce when rubocop has shipped this
-# https://github.com/bbatsov/rubocop/pull/3513
-Style/TernaryParentheses:
-  Enabled: false
-
-# makes diffs nicer
-Style/TrailingCommaInLiteral:
-  EnforcedStyleForMultiline: comma
-
-Style/UnneededCapitalW:
-  Enabled: false
-
-# TODO: enforce when rubocop has fixed this
-# https://github.com/bbatsov/rubocop/issues/3516
-Style/VariableNumber:
-  Enabled: false
-
-# TODO: enforce when rubocop has fixed this
-# https://github.com/bbatsov/rubocop/issues/1543
-Style/WordArray:
-  Enabled: false
diff --git a/Library/.rubocop_todo.yml b/Library/.rubocop_todo.yml
deleted file mode 100644
index d3be22eb5fc86d4b826aa0360fe31a25788af041..0000000000000000000000000000000000000000
--- a/Library/.rubocop_todo.yml
+++ /dev/null
@@ -1,231 +0,0 @@
-# This configuration was generated by
-# `rubocop --auto-gen-config --exclude-limit 100`
-# on 2016-09-25 02:39:38 +0200 using RuboCop version 0.43.0.
-# The point is for the user to remove these configuration records
-# one by one as the offenses are removed from the code base.
-# Note that changes in the inspected code, or installation of new
-# versions of RuboCop, may require this file to be generated again.
-
-# Offense count: 16
-Lint/HandleExceptions:
-  Exclude:
-    - 'Homebrew/cmd/install.rb'
-    - 'Homebrew/cmd/reinstall.rb'
-    - 'Homebrew/cmd/tap.rb'
-    - 'Homebrew/cmd/update-report.rb'
-    - 'Homebrew/cmd/upgrade.rb'
-    - 'Homebrew/cmd/uses.rb'
-    - 'Homebrew/descriptions.rb'
-    - 'Homebrew/diagnostic.rb'
-    - 'Homebrew/extend/ENV/super.rb'
-    - 'Homebrew/extend/pathname.rb'
-    - 'Homebrew/formula.rb'
-    - 'Homebrew/formula_versions.rb'
-    - 'Homebrew/test/test_ENV.rb'
-
-# Offense count: 3
-Lint/IneffectiveAccessModifier:
-  Exclude:
-    - 'Homebrew/formula.rb'
-    - 'Homebrew/version.rb'
-
-# Offense count: 1
-Lint/Loop:
-  Exclude:
-    - 'Homebrew/patch.rb'
-
-# Offense count: 1
-Lint/NestedMethodDefinition:
-  Exclude:
-    - 'Homebrew/test/**/*'
-    - 'Homebrew/dev-cmd/bottle.rb'
-
-# Offense count: 28
-Lint/RescueException:
-  Exclude:
-    - 'Homebrew/brew.rb'
-    - 'Homebrew/build.rb'
-    - 'Homebrew/cmd/fetch.rb'
-    - 'Homebrew/cmd/reinstall.rb'
-    - 'Homebrew/cmd/update-report.rb'
-    - 'Homebrew/debrew.rb'
-    - 'Homebrew/dev-cmd/pull.rb'
-    - 'Homebrew/dev-cmd/test.rb'
-    - 'Homebrew/formula.rb'
-    - 'Homebrew/formula_installer.rb'
-    - 'Homebrew/migrator.rb'
-    - 'Homebrew/postinstall.rb'
-    - 'Homebrew/readall.rb'
-    - 'Homebrew/test.rb'
-    - 'Homebrew/test/test_ENV.rb'
-    - 'Homebrew/utils/fork.rb'
-
-# Offense count: 1
-Lint/ShadowedException:
-  Exclude:
-    - 'Homebrew/utils/fork.rb'
-
-# Offense count: 14
-Metrics/BlockNesting:
-  Max: 5
-
-# Offense count: 19
-# Configuration parameters: CountComments.
-Metrics/ModuleLength:
-  Max: 366
-
-# Offense count: 2
-# Configuration parameters: CountKeywordArgs.
-Metrics/ParameterLists:
-  Max: 6
-
-# Offense count: 9
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle, SupportedStyles.
-# SupportedStyles: percent_q, bare_percent
-Style/BarePercentLiterals:
-  Exclude:
-    - 'Taps/**/*'
-    - 'Homebrew/dev-cmd/audit.rb'
-    - 'Homebrew/test/test_diagnostic.rb'
-    - 'Homebrew/test/test_exceptions.rb'
-    - 'Homebrew/test/test_integration_cmds.rb'
-    - 'Homebrew/test/test_patch.rb'
-    - 'Homebrew/test/test_string.rb'
-
-# Offense count: 136
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle, SupportedStyles, ProceduralMethods, FunctionalMethods, IgnoredMethods.
-# SupportedStyles: line_count_based, semantic, braces_for_chaining
-# ProceduralMethods: benchmark, bm, bmbm, create, each_with_object, measure, new, realtime, tap, with_object
-# FunctionalMethods: let, let!, subject, watch
-# IgnoredMethods: lambda, proc, it
-Style/BlockDelimiters:
-  Exclude:
-    - 'Taps/**/*'
-    - 'Homebrew/caveats.rb'
-    - 'Homebrew/cleaner.rb'
-    - 'Homebrew/cleanup.rb'
-    - 'Homebrew/cmd/deps.rb'
-    - 'Homebrew/cmd/desc.rb'
-    - 'Homebrew/cmd/fetch.rb'
-    - 'Homebrew/cmd/help.rb'
-    - 'Homebrew/cmd/info.rb'
-    - 'Homebrew/cmd/linkapps.rb'
-    - 'Homebrew/cmd/list.rb'
-    - 'Homebrew/cmd/outdated.rb'
-    - 'Homebrew/cmd/reinstall.rb'
-    - 'Homebrew/cmd/search.rb'
-    - 'Homebrew/cmd/tap-info.rb'
-    - 'Homebrew/cmd/unlinkapps.rb'
-    - 'Homebrew/cmd/update-report.rb'
-    - 'Homebrew/cmd/upgrade.rb'
-    - 'Homebrew/cmd/uses.rb'
-    - 'Homebrew/compilers.rb'
-    - 'Homebrew/debrew.rb'
-    - 'Homebrew/descriptions.rb'
-    - 'Homebrew/dev-cmd/aspell-dictionaries.rb'
-    - 'Homebrew/dev-cmd/audit.rb'
-    - 'Homebrew/dev-cmd/bottle.rb'
-    - 'Homebrew/dev-cmd/edit.rb'
-    - 'Homebrew/dev-cmd/man.rb'
-    - 'Homebrew/diagnostic.rb'
-    - 'Homebrew/exceptions.rb'
-    - 'Homebrew/extend/ARGV.rb'
-    - 'Homebrew/extend/ENV/shared.rb'
-    - 'Homebrew/extend/ENV/std.rb'
-    - 'Homebrew/extend/fileutils.rb'
-    - 'Homebrew/extend/os/mac/formula_cellar_checks.rb'
-    - 'Homebrew/extend/pathname.rb'
-    - 'Homebrew/formula.rb'
-    - 'Homebrew/formula_assertions.rb'
-    - 'Homebrew/formula_cellar_checks.rb'
-    - 'Homebrew/formula_installer.rb'
-    - 'Homebrew/formulary.rb'
-    - 'Homebrew/global.rb'
-    - 'Homebrew/keg.rb'
-    - 'Homebrew/language/haskell.rb'
-    - 'Homebrew/language/node.rb'
-    - 'Homebrew/language/python.rb'
-    - 'Homebrew/migrator.rb'
-    - 'Homebrew/os/mac/linkage_checker.rb'
-    - 'Homebrew/os/mac/xquartz.rb'
-    - 'Homebrew/patch.rb'
-    - 'Homebrew/readall.rb'
-    - 'Homebrew/software_spec.rb'
-    - 'Homebrew/tap.rb'
-    - 'Homebrew/test/lib/config.rb'
-    - 'Homebrew/test/test_ARGV.rb'
-    - 'Homebrew/test/test_cleanup.rb'
-    - 'Homebrew/test/test_cmd_audit.rb'
-    - 'Homebrew/test/test_dependency_collector.rb'
-    - 'Homebrew/test/test_formula_installer.rb'
-    - 'Homebrew/test/test_formula_installer_bottle.rb'
-    - 'Homebrew/test/test_formulary.rb'
-    - 'Homebrew/test/test_gpg.rb'
-    - 'Homebrew/test/test_integration_cmds.rb'
-    - 'Homebrew/test/test_migrator.rb'
-    - 'Homebrew/test/test_pathname.rb'
-    - 'Homebrew/test/test_tap.rb'
-    - 'Homebrew/test/test_utils.rb'
-    - 'Homebrew/test/testing_env.rb'
-    - 'Homebrew/utils.rb'
-    - 'Homebrew/utils/github.rb'
-
-# Offense count: 7
-Style/ClassVars:
-  Exclude:
-    - 'Homebrew/dev-cmd/audit.rb'
-    - 'Homebrew/formula_installer.rb'
-    - 'Homebrew/test/testing_env.rb'
-    - 'Homebrew/utils.rb'
-
-# Offense count: 13
-# Configuration parameters: AllowedVariables.
-Style/GlobalVars:
-  Exclude:
-    - 'Homebrew/diagnostic.rb'
-    - 'Homebrew/utils.rb'
-
-# Offense count: 2
-# Cop supports --auto-correct.
-# Configuration parameters: SupportedStyles, IndentationWidth.
-# SupportedStyles: special_inside_parentheses, consistent, align_brackets
-Style/IndentArray:
-  EnforcedStyle: special_inside_parentheses
-
-# Offense count: 5
-# Configuration parameters: EnforcedStyle, SupportedStyles.
-# SupportedStyles: module_function, extend_self
-Style/ModuleFunction:
-  Exclude:
-    - 'Homebrew/global.rb'
-    - 'Homebrew/os/mac/xcode.rb'
-    - 'Homebrew/os/mac/xquartz.rb'
-
-# Offense count: 8
-Style/MultilineBlockChain:
-  Exclude:
-    - 'Homebrew/cmd/search.rb'
-    - 'Homebrew/dev-cmd/aspell-dictionaries.rb'
-    - 'Homebrew/dev-cmd/audit.rb'
-    - 'Homebrew/dev-cmd/man.rb'
-    - 'Homebrew/diagnostic.rb'
-    - 'Homebrew/test/test_patching.rb'
-
-# Offense count: 4
-# Cop supports --auto-correct.
-Style/MutableConstant:
-  Exclude:
-    - 'Homebrew/dependency_collector.rb'
-    - 'Homebrew/formulary.rb'
-    - 'Homebrew/tab.rb'
-    - 'Homebrew/tap.rb'
-
-# Offense count: 9
-# Offense count: 8
-Style/OpMethod:
-  Exclude:
-    - 'Homebrew/dependencies.rb'
-    - 'Homebrew/install_renamed.rb'
-    - 'Homebrew/options.rb'
diff --git a/Library/Homebrew/.rubocop.yml b/Library/Homebrew/.rubocop.yml
new file mode 100644
index 0000000000000000000000000000000000000000..f4f80800aa3bba05509e23c68993a5d695ec32df
--- /dev/null
+++ b/Library/Homebrew/.rubocop.yml
@@ -0,0 +1,112 @@
+inherit_from:
+  - ../.rubocop.yml
+  - .rubocop_todo.yml
+
+AllCops:
+  Include:
+    - '**/.simplecov'
+  Exclude:
+    - 'cask/**/*'
+    - '**/vendor/**/*'
+
+# `formula do` uses nested method definitions
+Lint/NestedMethodDefinition:
+  Exclude:
+    - 'test/**/*'
+
+Metrics/ModuleLength:
+  CountComments: false
+  Exclude:
+    - 'cask/lib/hbc/locations.rb'
+    - 'cask/lib/hbc/macos.rb'
+    - 'cask/lib/hbc/utils.rb'
+
+Style/BarePercentLiterals:
+  EnforcedStyle: percent_q
+
+Style/BlockDelimiters:
+  EnforcedStyle: semantic
+  FunctionalMethods:
+    - expect
+    - find
+    - let
+    - let!
+    - subject
+    - watch
+    - inject
+    - map
+    - map!
+    - collect
+    - collect!
+    - reject
+    - reject!
+    - delete_if
+    - with_object
+    - popen_read
+  ProceduralMethods:
+    - after
+    - at_exit
+    - before
+    - benchmark
+    - bm
+    - bmbm
+    - capture_io
+    - capture_output
+    - capture_subprocess_io
+    - chdir
+    - context
+    - create
+    - define_method
+    - define_singleton_method
+    - fork
+    - measure
+    - new
+    - open
+    - realtime
+    - shutup
+    - tap
+    - each
+    - each_pair
+    - each_with_index
+    - reverse_each
+    - ignore_interrupts
+  IgnoredMethods:
+    - each_with_object
+    - it
+    - its
+    - lambda
+    - proc
+    - formula
+    - mock
+    - devel
+    - stable
+    - head
+    - assert_raises
+    - assert_nothing_raised
+    - resource
+    - with_build_environment
+    - ensure_writable
+    - satisfy
+    - fetch
+    - brew
+    - expand
+    - env
+    - recursive_dependencies
+    - trap
+    - link_dir
+    - with_system_path
+
+Style/HashSyntax:
+  EnforcedStyle: ruby19_no_mixed_keys
+
+# we won't change backward compatible method names
+Style/MethodName:
+  Exclude:
+    - 'compat/**/*'
+
+# we won't change backward compatible predicate names
+Style/PredicateName:
+  Exclude:
+    - 'compat/**/*'
+  NameWhitelist: is_32_bit?, is_64_bit?
+
diff --git a/Library/Homebrew/.rubocop_todo.yml b/Library/Homebrew/.rubocop_todo.yml
new file mode 100644
index 0000000000000000000000000000000000000000..4c6a4bbc55b8ca3a045365d7d56b33c6cc112cda
--- /dev/null
+++ b/Library/Homebrew/.rubocop_todo.yml
@@ -0,0 +1,211 @@
+# This configuration was generated by
+# `rubocop --auto-gen-config --exclude-limit 100`
+# on 2016-09-28 22:26:33 +0200 using RuboCop version 0.43.0.
+# The point is for the user to remove these configuration records
+# one by one as the offenses are removed from the code base.
+# Note that changes in the inspected code, or installation of new
+# versions of RuboCop, may require this file to be generated again.
+
+# Offense count: 16
+Lint/HandleExceptions:
+  Exclude:
+    - 'cmd/install.rb'
+    - 'cmd/reinstall.rb'
+    - 'cmd/tap.rb'
+    - 'cmd/update-report.rb'
+    - 'cmd/upgrade.rb'
+    - 'cmd/uses.rb'
+    - 'descriptions.rb'
+    - 'diagnostic.rb'
+    - 'extend/ENV/super.rb'
+    - 'extend/pathname.rb'
+    - 'formula.rb'
+    - 'formula_versions.rb'
+    - 'test/test_ENV.rb'
+
+# Offense count: 3
+Lint/IneffectiveAccessModifier:
+  Exclude:
+    - 'formula.rb'
+    - 'version.rb'
+
+# Offense count: 1
+Lint/Loop:
+  Exclude:
+    - 'patch.rb'
+
+# Offense count: 28
+Lint/RescueException:
+  Exclude:
+    - 'brew.rb'
+    - 'build.rb'
+    - 'cmd/fetch.rb'
+    - 'cmd/reinstall.rb'
+    - 'cmd/update-report.rb'
+    - 'debrew.rb'
+    - 'dev-cmd/pull.rb'
+    - 'dev-cmd/test.rb'
+    - 'formula.rb'
+    - 'formula_installer.rb'
+    - 'migrator.rb'
+    - 'postinstall.rb'
+    - 'readall.rb'
+    - 'test.rb'
+    - 'test/test_ENV.rb'
+    - 'utils/fork.rb'
+
+# Offense count: 1
+Lint/ShadowedException:
+  Exclude:
+    - 'utils/fork.rb'
+
+# Offense count: 14
+Metrics/BlockNesting:
+  Max: 5
+
+# Offense count: 19
+# Configuration parameters: CountComments.
+Metrics/ModuleLength:
+  Max: 366
+
+# Offense count: 2
+# Configuration parameters: CountKeywordArgs.
+Metrics/ParameterLists:
+  Max: 6
+
+# Offense count: 8
+# Cop supports --auto-correct.
+# Configuration parameters: EnforcedStyle, SupportedStyles.
+# SupportedStyles: percent_q, bare_percent
+Style/BarePercentLiterals:
+  Exclude:
+    - 'dev-cmd/audit.rb'
+    - 'test/test_diagnostic.rb'
+    - 'test/test_exceptions.rb'
+    - 'test/test_patch.rb'
+    - 'test/test_string.rb'
+
+# Offense count: 134
+# Cop supports --auto-correct.
+# Configuration parameters: EnforcedStyle, SupportedStyles, ProceduralMethods, FunctionalMethods, IgnoredMethods.
+# SupportedStyles: line_count_based, semantic, braces_for_chaining
+# ProceduralMethods: benchmark, bm, bmbm, create, each_with_object, measure, new, realtime, tap, with_object
+# FunctionalMethods: let, let!, subject, watch
+# IgnoredMethods: lambda, proc, it
+Style/BlockDelimiters:
+  Exclude:
+    - 'caveats.rb'
+    - 'cleaner.rb'
+    - 'cleanup.rb'
+    - 'cmd/deps.rb'
+    - 'cmd/desc.rb'
+    - 'cmd/fetch.rb'
+    - 'cmd/help.rb'
+    - 'cmd/info.rb'
+    - 'cmd/linkapps.rb'
+    - 'cmd/list.rb'
+    - 'cmd/outdated.rb'
+    - 'cmd/reinstall.rb'
+    - 'cmd/search.rb'
+    - 'cmd/tap-info.rb'
+    - 'cmd/unlinkapps.rb'
+    - 'cmd/update-report.rb'
+    - 'cmd/upgrade.rb'
+    - 'cmd/uses.rb'
+    - 'compilers.rb'
+    - 'debrew.rb'
+    - 'descriptions.rb'
+    - 'dev-cmd/aspell-dictionaries.rb'
+    - 'dev-cmd/audit.rb'
+    - 'dev-cmd/bottle.rb'
+    - 'dev-cmd/edit.rb'
+    - 'dev-cmd/man.rb'
+    - 'diagnostic.rb'
+    - 'exceptions.rb'
+    - 'extend/ARGV.rb'
+    - 'extend/ENV/shared.rb'
+    - 'extend/ENV/std.rb'
+    - 'extend/fileutils.rb'
+    - 'extend/os/mac/formula_cellar_checks.rb'
+    - 'extend/pathname.rb'
+    - 'formula.rb'
+    - 'formula_assertions.rb'
+    - 'formula_cellar_checks.rb'
+    - 'formula_installer.rb'
+    - 'formulary.rb'
+    - 'global.rb'
+    - 'keg.rb'
+    - 'language/haskell.rb'
+    - 'language/node.rb'
+    - 'language/python.rb'
+    - 'migrator.rb'
+    - 'os/mac/linkage_checker.rb'
+    - 'os/mac/xquartz.rb'
+    - 'patch.rb'
+    - 'readall.rb'
+    - 'software_spec.rb'
+    - 'tap.rb'
+    - 'test/lib/config.rb'
+    - 'test/test_ARGV.rb'
+    - 'test/test_cleanup.rb'
+    - 'test/test_dependency_collector.rb'
+    - 'test/test_formula_installer.rb'
+    - 'test/test_formula_installer_bottle.rb'
+    - 'test/test_formulary.rb'
+    - 'test/test_gpg.rb'
+    - 'test/test_migrator.rb'
+    - 'test/test_pathname.rb'
+    - 'test/test_tap.rb'
+    - 'test/test_utils.rb'
+    - 'test/testing_env.rb'
+    - 'utils.rb'
+    - 'utils/github.rb'
+
+# Offense count: 7
+Style/ClassVars:
+  Exclude:
+    - 'dev-cmd/audit.rb'
+    - 'formula_installer.rb'
+    - 'test/testing_env.rb'
+    - 'utils.rb'
+
+# Offense count: 13
+# Configuration parameters: AllowedVariables.
+Style/GlobalVars:
+  Exclude:
+    - 'diagnostic.rb'
+    - 'utils.rb'
+
+# Offense count: 2
+# Configuration parameters: EnforcedStyle, SupportedStyles.
+# SupportedStyles: module_function, extend_self
+Style/ModuleFunction:
+  Exclude:
+    - 'global.rb'
+    - 'os/mac/xcode.rb'
+
+# Offense count: 8
+Style/MultilineBlockChain:
+  Exclude:
+    - 'cmd/search.rb'
+    - 'dev-cmd/aspell-dictionaries.rb'
+    - 'dev-cmd/audit.rb'
+    - 'dev-cmd/man.rb'
+    - 'diagnostic.rb'
+    - 'test/test_patching.rb'
+
+# Offense count: 4
+# Cop supports --auto-correct.
+Style/MutableConstant:
+  Exclude:
+    - 'dependency_collector.rb'
+    - 'formulary.rb'
+    - 'tab.rb'
+    - 'tap.rb'
+
+# Offense count: 8
+Style/OpMethod:
+  Exclude:
+    - 'dependencies.rb'
+    - 'install_renamed.rb'
+    - 'options.rb'
diff --git a/Library/Homebrew/cmd/style.rb b/Library/Homebrew/cmd/style.rb
index db61116be74b6b873adc2d0fa5393153b20dbefc..e666eb2007732fc2888f928e9384553f5b8d747c 100644
--- a/Library/Homebrew/cmd/style.rb
+++ b/Library/Homebrew/cmd/style.rb
@@ -19,7 +19,7 @@ require "utils/json"
 module Homebrew
   def style
     target = if ARGV.named.empty?
-      [HOMEBREW_LIBRARY_PATH]
+      nil
     elsif ARGV.named.any? { |file| File.exist? file }
       ARGV.named
     elsif ARGV.named.any? { |tap| tap.count("/") == 1 }
@@ -49,27 +49,32 @@ module Homebrew
 
     args = %W[
       --force-exclusion
-      --config #{HOMEBREW_LIBRARY}/.rubocop.yml
     ]
     args << "--auto-correct" if fix
-    args += files
-
-    HOMEBREW_LIBRARY.cd do
-      case output_type
-      when :print
-        args << "--display-cop-names" if ARGV.include? "--display-cop-names"
-        system "rubocop", "--format", "simple", *args
-        !$?.success?
-      when :json
-        json = Utils.popen_read_text("rubocop", "--format", "json", *args)
-        # exit status of 1 just means violations were found; other numbers mean execution errors
-        # exitstatus can also be nil if RuboCop process crashes, e.g. due to
-        # native extension problems
-        raise "Error while running RuboCop" if $?.exitstatus.nil? || $?.exitstatus > 1
-        RubocopResults.new(Utils::JSON.load(json))
-      else
-        raise "Invalid output_type for check_style_impl: #{output_type}"
-      end
+
+    if files.nil?
+      args << "--config" << HOMEBREW_LIBRARY_PATH/".rubocop.yml"
+      args += [HOMEBREW_LIBRARY_PATH]
+    else
+      args << "--config" << HOMEBREW_LIBRARY/".rubocop.yml"
+      args += files
+    end
+
+    case output_type
+    when :print
+      args << "--display-cop-names" if ARGV.include? "--display-cop-names"
+      args << "--format" << "simple" if files
+      system "rubocop", *args
+      !$?.success?
+    when :json
+      json = Utils.popen_read_text("rubocop", "--format", "json", *args)
+      # exit status of 1 just means violations were found; other numbers mean execution errors
+      # exitstatus can also be nil if RuboCop process crashes, e.g. due to
+      # native extension problems
+      raise "Error while running RuboCop" if $?.exitstatus.nil? || $?.exitstatus > 1
+      RubocopResults.new(Utils::JSON.load(json))
+    else
+      raise "Invalid output_type for check_style_impl: #{output_type}"
     end
   end
 
diff --git a/Library/Homebrew/dev-cmd/bottle.rb b/Library/Homebrew/dev-cmd/bottle.rb
index b2aa3b2c50b38f91fcd0feb40dfc8487d6c6c296..83e40f25d29d64f906ca2928f661d7f885c57061 100644
--- a/Library/Homebrew/dev-cmd/bottle.rb
+++ b/Library/Homebrew/dev-cmd/bottle.rb
@@ -44,9 +44,9 @@ module Homebrew
   def keg_contain?(string, keg, ignores)
     @put_string_exists_header, @put_filenames = nil
 
-    def print_filename(string, filename)
+    print_filename = lambda do |str, filename|
       unless @put_string_exists_header
-        opoo "String '#{string}' still exists in these files:"
+        opoo "String '#{str}' still exists in these files:"
         @put_string_exists_header = true
       end
 
@@ -68,7 +68,7 @@ module Homebrew
       result ||= !linked_libraries.empty?
 
       if ARGV.verbose?
-        print_filename(string, file) unless linked_libraries.empty?
+        print_filename.call(string, file) unless linked_libraries.empty?
         linked_libraries.each do |lib|
           puts " #{Tty.gray}-->#{Tty.reset} links to #{lib}"
         end
@@ -91,7 +91,7 @@ module Homebrew
       end
 
       next unless ARGV.verbose? && !text_matches.empty?
-      print_filename string, file
+      print_filename.call(string, file)
       text_matches.first(MAXIMUM_STRING_MATCHES).each do |match, offset|
         puts " #{Tty.gray}-->#{Tty.reset} match '#{match}' at offset #{Tty.em}0x#{offset}#{Tty.reset}"
       end