Keep only the parts of rubocop.rbi that we actually use

- This file was _massive_ - over 60k lines and we had to bump the file
  size limit for pushes to the repo!
- This was because by default Tapioca, when it encounters a
  `require "rubocop"` during RBI generation, loads all of the cops ever
  because they're all classes inside `RuboCop::Cop`.
- There wasn't an easy way to control this at Tapioca generation time
  (we tried), so now we parse the generated RBI file and delete classes
  and method definitions that we don't use.
- I regenerated the RBIs (`brew tc --update rubocop`) and added new
  things to the allowlist until Sorbet came back green.
- Now the file is ~7k lines and 240K - much better!
This commit is contained in:
Issy Long 2025-06-29 18:49:57 +01:00
parent 52d66f206a
commit 836d85277f
No known key found for this signature in database
6 changed files with 352 additions and 55054 deletions

View File

@ -68,6 +68,9 @@ module Homebrew
ohai "Updating Tapioca RBI files..."
safe_system "bundle", "exec", "tapioca", "gem", *tapioca_args
ohai "Trimming RuboCop RBI because by default it's massive..."
trim_rubocop_rbi
if args.suggest_typed?
ohai "Checking if we can bump Sorbet `typed` sigils..."
# --sorbet needed because of https://github.com/Shopify/spoom/issues/488
@ -116,6 +119,157 @@ module Homebrew
Homebrew.failed = true
end
end
sig { params(path: T.any(String, Pathname)).void }
def trim_rubocop_rbi(path: HOMEBREW_LIBRARY_PATH/"sorbet/rbi/gems/rubocop@*.rbi")
rbi_file = Dir.glob(path).first
return unless rbi_file.present?
return unless (rbi_path = Pathname.new(rbi_file)).exist?
require "prism"
original_content = rbi_path.read
parsed = Prism.parse(original_content)
return unless parsed.success?
allowlist = %w[
Parser::Source
RuboCop::AST::Node
RuboCop::AST::NodePattern
RuboCop::AST::ProcessedSource
RuboCop::CLI
RuboCop::Config
RuboCop::Cop::AllowedPattern
RuboCop::Cop::AllowedMethods
RuboCop::Cop::AutoCorrector
RuboCop::Cop::AutocorrectLogic
RuboCop::Cop::Base
RuboCop::Cop::CommentsHelp
RuboCop::Cop::ConfigurableFormatting
RuboCop::Cop::ConfigurableNaming
RuboCop::Cop::Corrector
RuboCop::Cop::IgnoredMethods
RuboCop::Cop::IgnoredNode
RuboCop::Cop::IgnoredPattern
RuboCop::Cop::MethodPreference
RuboCop::Cop::Offense
RuboCop::Cop::RangeHelp
RuboCop::Cop::Registry
RuboCop::Cop::Util
RuboCop::DirectiveComment
RuboCop::Error
RuboCop::ExcludeLimit
RuboCop::Ext::Comment
RuboCop::Ext::ProcessedSource
RuboCop::Ext::Range
RuboCop::FileFinder
RuboCop::Formatter::TextUtil
RuboCop::Formatter::PathUtil
RuboCop::Options
RuboCop::ResultCache
RuboCop::Runner
RuboCop::TargetFinder
RuboCop::Version
].freeze
nodes_to_keep = Set.new
parsed.value.statements.body.each do |node|
case node
when Prism::ModuleNode, Prism::ClassNode
# Keep if it's in our allowlist or is a top-level essential node.
full_name = extract_full_name(node)
nodes_to_keep << node if full_name.blank? || allowlist.any? { |name| full_name.start_with?(name) }
when Prism::ConstantWriteNode # Keep essential constants.
nodes_to_keep << node if node.name.to_s.match?(/^[[:digit:][:upper:]_]+$/)
else # Keep other top-level nodes (comments, etc.)
nodes_to_keep << node
end
end
new_content = generate_trimmed_rbi(original_content, nodes_to_keep, parsed)
rbi_path.write(new_content)
end
private
sig { params(node: Prism::Node).returns(String) }
def extract_full_name(node)
case node
when Prism::ModuleNode, Prism::ClassNode
parts = []
constant_path = node.constant_path
if constant_path.is_a?(Prism::ConstantReadNode)
parts << constant_path.name.to_s
elsif constant_path.is_a?(Prism::ConstantPathNode)
parts.concat(extract_constant_path_parts(constant_path))
end
parts.join("::")
else
""
end
end
sig { params(constant_path: T.any(Prism::ConstantPathNode, Prism::Node)).returns(T::Array[String]) }
def extract_constant_path_parts(constant_path)
parts = []
current = T.let(constant_path, T.nilable(Prism::Node))
while current
case current
when Prism::ConstantPathNode
parts.unshift(current.name.to_s)
current = current.parent
when Prism::ConstantReadNode
parts.unshift(current.name.to_s)
break
else
break
end
end
parts
end
sig {
params(
original_content: String,
nodes_to_keep: T::Set[Prism::Node],
parsed: Prism::ParseResult,
).returns(String)
}
def generate_trimmed_rbi(original_content, nodes_to_keep, parsed)
lines = original_content.lines
output_lines = []
first_node = parsed.value.statements.body.first
if first_node
first_line = first_node.location.start_line - 1
(0...first_line).each { |i| output_lines << lines[i] if lines[i] }
end
parsed.value.statements.body.each do |node|
next unless nodes_to_keep.include?(node)
start_line = node.location.start_line - 1
end_line = node.location.end_line - 1
(start_line..end_line).each { |i| output_lines << lines[i] if lines[i] }
output_lines << "\n"
end
header = <<~EOS.chomp
# typed: true
# This file is autogenerated. Do not edit it by hand.
# To regenerate, run `brew typecheck --update rubocop`.
EOS
return header if output_lines.empty?
output_lines.join
end
end
end
end

View File

@ -7508,28 +7508,28 @@ class RuboCop::AST::YieldNode < ::RuboCop::AST::Node
end
class RuboCop::CommentConfig
# source://rubocop/1.75.2/lib/rubocop/comment_config.rb#34
# source://rubocop/1.75.6/lib/rubocop/comment_config.rb#34
def initialize(processed_source); end
# source://rubocop/1.75.2/lib/rubocop/comment_config.rb#63
# source://rubocop/1.75.6/lib/rubocop/comment_config.rb#63
def comment_only_line?(line_number); end
# source://rubocop-ast//lib/rubocop/ast/utilities/simple_forwardable.rb#19
def config(*_arg0, **_arg1, &_arg2); end
# source://rubocop/1.75.2/lib/rubocop/comment_config.rb#51
# source://rubocop/1.75.6/lib/rubocop/comment_config.rb#51
def cop_disabled_line_ranges; end
# source://rubocop/1.75.2/lib/rubocop/comment_config.rb#39
# source://rubocop/1.75.6/lib/rubocop/comment_config.rb#39
def cop_enabled_at_line?(cop, line_number); end
# source://rubocop/1.75.2/lib/rubocop/comment_config.rb#47
# source://rubocop/1.75.6/lib/rubocop/comment_config.rb#47
def cop_opted_in?(cop); end
# source://rubocop/1.75.2/lib/rubocop/comment_config.rb#55
# source://rubocop/1.75.6/lib/rubocop/comment_config.rb#55
def extra_enabled_comments; end
# source://rubocop/1.75.2/lib/rubocop/comment_config.rb#30
# source://rubocop/1.75.6/lib/rubocop/comment_config.rb#30
def processed_source; end
# source://rubocop-ast//lib/rubocop/ast/utilities/simple_forwardable.rb#19
@ -7537,51 +7537,51 @@ class RuboCop::CommentConfig
private
# source://rubocop/1.75.2/lib/rubocop/comment_config.rb#96
# source://rubocop/1.75.6/lib/rubocop/comment_config.rb#96
def analyze; end
# source://rubocop/1.75.2/lib/rubocop/comment_config.rb#124
# source://rubocop/1.75.6/lib/rubocop/comment_config.rb#124
def analyze_cop(analysis, directive); end
# source://rubocop/1.75.2/lib/rubocop/comment_config.rb#144
# source://rubocop/1.75.6/lib/rubocop/comment_config.rb#144
def analyze_disabled(analysis, directive); end
# source://rubocop/1.75.2/lib/rubocop/comment_config.rb#155
# source://rubocop/1.75.6/lib/rubocop/comment_config.rb#155
def analyze_rest(analysis, directive); end
# source://rubocop/1.75.2/lib/rubocop/comment_config.rb#135
# source://rubocop/1.75.6/lib/rubocop/comment_config.rb#135
def analyze_single_line(analysis, directive); end
# source://rubocop/1.75.2/lib/rubocop/comment_config.rb#164
# source://rubocop/1.75.6/lib/rubocop/comment_config.rb#164
def cop_line_ranges(analysis); end
# source://rubocop/1.75.2/lib/rubocop/comment_config.rb#170
# source://rubocop/1.75.6/lib/rubocop/comment_config.rb#170
def each_directive; end
# source://rubocop/1.75.2/lib/rubocop/comment_config.rb#69
# source://rubocop/1.75.6/lib/rubocop/comment_config.rb#69
def extra_enabled_comments_with_names(extras:, names:); end
# source://rubocop/1.75.2/lib/rubocop/comment_config.rb#190
# source://rubocop/1.75.6/lib/rubocop/comment_config.rb#190
def handle_enable_all(directive, names, extras); end
# source://rubocop/1.75.2/lib/rubocop/comment_config.rb#204
# source://rubocop/1.75.6/lib/rubocop/comment_config.rb#204
def handle_switch(directive, names, extras); end
# source://rubocop/1.75.2/lib/rubocop/comment_config.rb#115
# source://rubocop/1.75.6/lib/rubocop/comment_config.rb#115
def inject_disabled_cops_directives(analyses); end
# source://rubocop/1.75.2/lib/rubocop/comment_config.rb#183
# source://rubocop/1.75.6/lib/rubocop/comment_config.rb#183
def non_comment_token_line_numbers; end
# source://rubocop/1.75.2/lib/rubocop/comment_config.rb#83
# source://rubocop/1.75.6/lib/rubocop/comment_config.rb#83
def opt_in_cops; end
# source://rubocop/1.75.2/lib/rubocop/comment_config.rb#179
# source://rubocop/1.75.6/lib/rubocop/comment_config.rb#179
def qualified_cop_name(cop_name); end
end
class RuboCop::Config
# source://rubocop/1.75.2/lib/rubocop/config.rb#31
# source://rubocop/1.75.6/lib/rubocop/config.rb#31
def initialize(hash = T.unsafe(nil), loaded_path = T.unsafe(nil)); end
# source://rubocop-ast//lib/rubocop/ast/utilities/simple_forwardable.rb#19
@ -7590,40 +7590,40 @@ class RuboCop::Config
# source://rubocop-ast//lib/rubocop/ast/utilities/simple_forwardable.rb#19
def []=(*_arg0, **_arg1, &_arg2); end
# source://rubocop/1.75.2/lib/rubocop/config.rb#212
# source://rubocop/1.75.6/lib/rubocop/config.rb#212
def active_support_extensions_enabled?; end
# source://rubocop/1.75.2/lib/rubocop/config.rb#127
# source://rubocop/1.75.6/lib/rubocop/config.rb#127
def add_excludes_from_higher_level(highest_config); end
# source://rubocop/1.75.2/lib/rubocop/config.rb#239
# source://rubocop/1.75.6/lib/rubocop/config.rb#239
def allowed_camel_case_file?(file); end
# source://rubocop/1.75.2/lib/rubocop/config.rb#283
# source://rubocop/1.75.6/lib/rubocop/config.rb#283
def base_dir_for_path_parameters; end
# source://rubocop/1.75.2/lib/rubocop/config.rb#313
# source://rubocop/1.75.6/lib/rubocop/config.rb#313
def bundler_lock_file_path; end
# source://rubocop/1.75.2/lib/rubocop/config.rb#85
# source://rubocop/1.75.6/lib/rubocop/config.rb#85
def check; end
# source://rubocop/1.75.2/lib/rubocop/config.rb#180
# source://rubocop/1.75.6/lib/rubocop/config.rb#180
def clusivity_config_for_badge?(badge); end
# source://rubocop/1.75.2/lib/rubocop/config.rb#200
# source://rubocop/1.75.6/lib/rubocop/config.rb#200
def cop_enabled?(name); end
# source://rubocop-ast//lib/rubocop/ast/utilities/simple_forwardable.rb#19
def delete(*_arg0, **_arg1, &_arg2); end
# source://rubocop/1.75.2/lib/rubocop/config.rb#139
# source://rubocop/1.75.6/lib/rubocop/config.rb#139
def deprecation_check; end
# source://rubocop-ast//lib/rubocop/ast/utilities/simple_forwardable.rb#19
def dig(*_arg0, **_arg1, &_arg2); end
# source://rubocop/1.75.2/lib/rubocop/config.rb#204
# source://rubocop/1.75.6/lib/rubocop/config.rb#204
def disabled_new_cops?; end
# source://rubocop-ast//lib/rubocop/ast/utilities/simple_forwardable.rb#19
@ -7632,40 +7632,40 @@ class RuboCop::Config
# source://rubocop-ast//lib/rubocop/ast/utilities/simple_forwardable.rb#19
def each_key(*_arg0, **_arg1, &_arg2); end
# source://rubocop/1.75.2/lib/rubocop/config.rb#208
# source://rubocop/1.75.6/lib/rubocop/config.rb#208
def enabled_new_cops?; end
# source://rubocop-ast//lib/rubocop/ast/utilities/simple_forwardable.rb#19
def fetch(*_arg0, **_arg1, &_arg2); end
# source://rubocop/1.75.2/lib/rubocop/config.rb#261
# source://rubocop/1.75.6/lib/rubocop/config.rb#261
def file_to_exclude?(file); end
# source://rubocop/1.75.2/lib/rubocop/config.rb#220
# source://rubocop/1.75.6/lib/rubocop/config.rb#220
def file_to_include?(file); end
# source://rubocop/1.75.2/lib/rubocop/config.rb#196
# source://rubocop/1.75.6/lib/rubocop/config.rb#196
def for_all_cops; end
# source://rubocop/1.75.2/lib/rubocop/config.rb#166
# source://rubocop/1.75.6/lib/rubocop/config.rb#166
def for_badge(badge); end
# source://rubocop/1.75.2/lib/rubocop/config.rb#153
# source://rubocop/1.75.6/lib/rubocop/config.rb#153
def for_cop(cop); end
# source://rubocop/1.75.2/lib/rubocop/config.rb#191
# source://rubocop/1.75.6/lib/rubocop/config.rb#191
def for_department(department_name); end
# source://rubocop/1.75.2/lib/rubocop/config.rb#160
# source://rubocop/1.75.6/lib/rubocop/config.rb#160
def for_enabled_cop(cop); end
# source://rubocop/1.75.2/lib/rubocop/config.rb#338
# source://rubocop/1.75.6/lib/rubocop/config.rb#338
def gem_versions_in_target; end
# source://rubocop/1.75.2/lib/rubocop/config.rb#342
# source://rubocop/1.75.6/lib/rubocop/config.rb#342
def inspect; end
# source://rubocop/1.75.2/lib/rubocop/config.rb#110
# source://rubocop/1.75.6/lib/rubocop/config.rb#110
def internal?; end
# source://rubocop-ast//lib/rubocop/ast/utilities/simple_forwardable.rb#19
@ -7674,16 +7674,16 @@ class RuboCop::Config
# source://rubocop-ast//lib/rubocop/ast/utilities/simple_forwardable.rb#19
def keys(*_arg0, **_arg1, &_arg2); end
# source://rubocop/1.75.2/lib/rubocop/config.rb#81
# source://rubocop/1.75.6/lib/rubocop/config.rb#81
def loaded_features; end
# source://rubocop/1.75.2/lib/rubocop/config.rb#21
# source://rubocop/1.75.6/lib/rubocop/config.rb#21
def loaded_path; end
# source://rubocop/1.75.2/lib/rubocop/config.rb#77
# source://rubocop/1.75.6/lib/rubocop/config.rb#77
def loaded_plugins; end
# source://rubocop/1.75.2/lib/rubocop/config.rb#115
# source://rubocop/1.75.6/lib/rubocop/config.rb#115
def make_excludes_absolute; end
# source://rubocop-ast//lib/rubocop/ast/utilities/simple_forwardable.rb#19
@ -7692,37 +7692,37 @@ class RuboCop::Config
# source://rubocop-ast//lib/rubocop/ast/utilities/simple_forwardable.rb#19
def merge(*_arg0, **_arg1, &_arg2); end
# source://rubocop/1.75.2/lib/rubocop/config.rb#293
# source://rubocop/1.75.6/lib/rubocop/config.rb#293
def parser_engine; end
# source://rubocop/1.75.2/lib/rubocop/config.rb#274
# source://rubocop/1.75.6/lib/rubocop/config.rb#274
def path_relative_to_config(path); end
# source://rubocop/1.75.2/lib/rubocop/config.rb#270
# source://rubocop/1.75.6/lib/rubocop/config.rb#270
def patterns_to_exclude; end
# source://rubocop/1.75.2/lib/rubocop/config.rb#266
# source://rubocop/1.75.6/lib/rubocop/config.rb#266
def patterns_to_include; end
# source://rubocop/1.75.2/lib/rubocop/config.rb#324
# source://rubocop/1.75.6/lib/rubocop/config.rb#324
def pending_cops; end
# source://rubocop/1.75.2/lib/rubocop/config.rb#253
# source://rubocop/1.75.6/lib/rubocop/config.rb#253
def possibly_include_hidden?; end
# source://rubocop-ast//lib/rubocop/ast/utilities/simple_forwardable.rb#19
def replace(*_arg0, **_arg1, &_arg2); end
# source://rubocop/1.75.2/lib/rubocop/config.rb#105
# source://rubocop/1.75.6/lib/rubocop/config.rb#105
def signature; end
# source://rubocop/1.75.2/lib/rubocop/config.rb#308
# source://rubocop/1.75.6/lib/rubocop/config.rb#308
def smart_loaded_path; end
# source://rubocop/1.75.2/lib/rubocop/config.rb#216
# source://rubocop/1.75.6/lib/rubocop/config.rb#216
def string_literals_frozen_by_default?; end
# source://rubocop/1.75.2/lib/rubocop/config.rb#297
# source://rubocop/1.75.6/lib/rubocop/config.rb#297
def target_rails_version; end
# source://rubocop-ast//lib/rubocop/ast/utilities/simple_forwardable.rb#19
@ -7734,7 +7734,7 @@ class RuboCop::Config
# source://rubocop-ast//lib/rubocop/ast/utilities/simple_forwardable.rb#19
def to_hash(*_arg0, **_arg1, &_arg2); end
# source://rubocop/1.75.2/lib/rubocop/config.rb#101
# source://rubocop/1.75.6/lib/rubocop/config.rb#101
def to_s; end
# source://rubocop-ast//lib/rubocop/ast/utilities/simple_forwardable.rb#19
@ -7743,37 +7743,37 @@ class RuboCop::Config
# source://rubocop-ast//lib/rubocop/ast/utilities/simple_forwardable.rb#19
def validate(*_arg0, **_arg1, &_arg2); end
# source://rubocop/1.75.2/lib/rubocop/config.rb#92
# source://rubocop/1.75.6/lib/rubocop/config.rb#92
def validate_after_resolution; end
private
# source://rubocop/1.75.2/lib/rubocop/config.rb#392
# source://rubocop/1.75.6/lib/rubocop/config.rb#392
def department_of(qualified_cop_name); end
# source://rubocop/1.75.2/lib/rubocop/config.rb#380
# source://rubocop/1.75.6/lib/rubocop/config.rb#380
def enable_cop?(qualified_cop_name, cop_options); end
# source://rubocop/1.75.2/lib/rubocop/config.rb#367
# source://rubocop/1.75.6/lib/rubocop/config.rb#367
def gem_version_to_major_minor_float(gem_version); end
# source://rubocop/1.75.2/lib/rubocop/config.rb#373
# source://rubocop/1.75.6/lib/rubocop/config.rb#373
def read_gem_versions_from_target_lockfile; end
# source://rubocop/1.75.2/lib/rubocop/config.rb#354
# source://rubocop/1.75.6/lib/rubocop/config.rb#354
def read_rails_version_from_bundler_lock_file; end
# source://rubocop/1.75.2/lib/rubocop/config.rb#349
# source://rubocop/1.75.6/lib/rubocop/config.rb#349
def target_rails_version_from_bundler_lock_file; end
class << self
# source://rubocop/1.75.2/lib/rubocop/config.rb#23
# source://rubocop/1.75.6/lib/rubocop/config.rb#23
def create(hash, path, check: T.unsafe(nil)); end
end
end
class RuboCop::ConfigValidator
# source://rubocop/1.75.2/lib/rubocop/config_validator.rb#28
# source://rubocop/1.75.6/lib/rubocop/config_validator.rb#28
def initialize(config); end
# source://rubocop-ast//lib/rubocop/ast/utilities/simple_forwardable.rb#19
@ -7782,66 +7782,66 @@ class RuboCop::ConfigValidator
# source://rubocop-ast//lib/rubocop/ast/utilities/simple_forwardable.rb#19
def smart_loaded_path(*_arg0, **_arg1, &_arg2); end
# source://rubocop/1.75.2/lib/rubocop/config_validator.rb#65
# source://rubocop/1.75.6/lib/rubocop/config_validator.rb#65
def target_ruby_version; end
# source://rubocop/1.75.2/lib/rubocop/config_validator.rb#34
# source://rubocop/1.75.6/lib/rubocop/config_validator.rb#34
def validate; end
# source://rubocop/1.75.2/lib/rubocop/config_validator.rb#61
# source://rubocop/1.75.6/lib/rubocop/config_validator.rb#61
def validate_after_resolution; end
private
# source://rubocop/1.75.2/lib/rubocop/config_validator.rb#100
# source://rubocop/1.75.6/lib/rubocop/config_validator.rb#100
def alert_about_unrecognized_cops(invalid_cop_names); end
# source://rubocop/1.75.2/lib/rubocop/config_validator.rb#264
# source://rubocop/1.75.6/lib/rubocop/config_validator.rb#263
def check_cop_config_value(hash, parent = T.unsafe(nil)); end
# source://rubocop/1.75.2/lib/rubocop/config_validator.rb#73
# source://rubocop/1.75.6/lib/rubocop/config_validator.rb#73
def check_obsoletions; end
# source://rubocop/1.75.2/lib/rubocop/config_validator.rb#80
# source://rubocop/1.75.6/lib/rubocop/config_validator.rb#80
def check_target_ruby; end
# source://rubocop/1.75.2/lib/rubocop/config_validator.rb#205
# source://rubocop/1.75.6/lib/rubocop/config_validator.rb#205
def each_invalid_parameter(cop_name); end
# source://rubocop/1.75.2/lib/rubocop/config_validator.rb#116
# source://rubocop/1.75.6/lib/rubocop/config_validator.rb#116
def list_unknown_cops(invalid_cop_names); end
# source://rubocop/1.75.2/lib/rubocop/config_validator.rb#284
# source://rubocop/1.75.6/lib/rubocop/config_validator.rb#284
def param_error_message(parent, key, value, supposed_values); end
# source://rubocop/1.75.2/lib/rubocop/config_validator.rb#252
# source://rubocop/1.75.6/lib/rubocop/config_validator.rb#252
def reject_conflicting_safe_settings; end
# source://rubocop/1.75.2/lib/rubocop/config_validator.rb#243
# source://rubocop/1.75.6/lib/rubocop/config_validator.rb#243
def reject_mutually_exclusive_defaults; end
# source://rubocop/1.75.2/lib/rubocop/config_validator.rb#139
# source://rubocop/1.75.6/lib/rubocop/config_validator.rb#139
def suggestion(name); end
# source://rubocop/1.75.2/lib/rubocop/config_validator.rb#71
# source://rubocop/1.75.6/lib/rubocop/config_validator.rb#71
def target_ruby; end
# source://rubocop/1.75.2/lib/rubocop/config_validator.rb#217
# source://rubocop/1.75.6/lib/rubocop/config_validator.rb#217
def validate_enforced_styles(valid_cop_names); end
# source://rubocop/1.75.2/lib/rubocop/config_validator.rb#166
# source://rubocop/1.75.6/lib/rubocop/config_validator.rb#166
def validate_new_cops_parameter; end
# source://rubocop/1.75.2/lib/rubocop/config_validator.rb#191
# source://rubocop/1.75.6/lib/rubocop/config_validator.rb#191
def validate_parameter_names(valid_cop_names); end
# source://rubocop/1.75.2/lib/rubocop/config_validator.rb#177
# source://rubocop/1.75.6/lib/rubocop/config_validator.rb#177
def validate_parameter_shape(valid_cop_names); end
# source://rubocop/1.75.2/lib/rubocop/config_validator.rb#237
# source://rubocop/1.75.6/lib/rubocop/config_validator.rb#237
def validate_support_and_has_list(name, formats, valid); end
# source://rubocop/1.75.2/lib/rubocop/config_validator.rb#155
# source://rubocop/1.75.6/lib/rubocop/config_validator.rb#155
def validate_syntax_cop; end
end

View File

@ -4046,7 +4046,7 @@ class RuboCop::Cop::RSpec::MultipleExpectations < ::RuboCop::Cop::RSpec::Base
# source://rubocop-rspec//lib/rubocop/cop/rspec/multiple_expectations.rb#86
def expect?(param0 = T.unsafe(nil)); end
# source://rubocop/1.75.2/lib/rubocop/cop/exclude_limit.rb#11
# source://rubocop/1.75.6/lib/rubocop/cop/exclude_limit.rb#11
def max=(value); end
# source://rubocop-rspec//lib/rubocop/cop/rspec/multiple_expectations.rb#93
@ -4161,7 +4161,7 @@ RuboCop::Cop::RSpec::MultipleExpectations::TRUE_NODE = T.let(T.unsafe(nil), Proc
class RuboCop::Cop::RSpec::MultipleMemoizedHelpers < ::RuboCop::Cop::RSpec::Base
include ::RuboCop::Cop::RSpec::Variable
# source://rubocop/1.75.2/lib/rubocop/cop/exclude_limit.rb#11
# source://rubocop/1.75.6/lib/rubocop/cop/exclude_limit.rb#11
def max=(value); end
# source://rubocop-rspec//lib/rubocop/cop/rspec/multiple_memoized_helpers.rb#91
@ -4503,7 +4503,7 @@ end
class RuboCop::Cop::RSpec::NestedGroups < ::RuboCop::Cop::RSpec::Base
include ::RuboCop::Cop::RSpec::TopLevelGroup
# source://rubocop/1.75.2/lib/rubocop/cop/exclude_limit.rb#11
# source://rubocop/1.75.6/lib/rubocop/cop/exclude_limit.rb#11
def max=(value); end
# source://rubocop-rspec//lib/rubocop/cop/rspec/nested_groups.rb#107

File diff suppressed because it is too large Load Diff

View File

@ -5,4 +5,32 @@ require "dev-cmd/typecheck"
RSpec.describe Homebrew::DevCmd::Typecheck do
it_behaves_like "parseable arguments"
describe "#trim_rubocop_rbi" do
let(:rbi_file) { Pathname.new("#{TEST_FIXTURE_DIR}/rubocop@x.x.x.rbi") }
let(:typecheck) { described_class.new([]) }
before do
allow(Dir).to receive(:glob).and_return([rbi_file.to_s])
end
it "trims RuboCop RBI file to only include allowlisted classes" do
old_content = rbi_file.read
typecheck.trim_rubocop_rbi(path: rbi_file.to_s)
new_content = rbi_file.read
expect(new_content).to include("RuboCop::Config")
expect(new_content).to include("RuboCop::Cop::Base")
expect(new_content).to include("Parser::Source")
expect(new_content).to include("VERSION")
expect(new_content).to include("SOME_CONSTANT")
expect(new_content).not_to include("SomeUnusedCop")
expect(new_content).not_to include("UnusedModule")
expect(new_content).not_to include("CompletelyUnrelated")
rbi_file.write(old_content)
end
end
end

View File

@ -0,0 +1,78 @@
# typed: strict
# This file is autogenerated. Do not edit it by hand.
# To regenerate, run `brew typecheck --update rubocop`.
class Parser::Source::Comment
include ::RuboCop::Ext::Comment
end
class Parser::Source::Range
include ::RuboCop::Ext::Range
end
RuboCop::CLI::STATUS_OFFENSES = T.let(T.unsafe(nil), Integer)
RuboCop::CLI::STATUS_SUCCESS = T.let(T.unsafe(nil), Integer)
RuboCop::CommentConfig::CONFIG_DISABLED_LINE_RANGE_MIN = T.let(T.unsafe(nil), Float)
class RuboCop::Config
include ::RuboCop::PathUtil
include ::RuboCop::FileFinder
extend ::RuboCop::SimpleForwardable
# @return [Config] a new instance of Config
#
# source://rubocop//lib/rubocop/config.rb#31
def initialize(hash = T.unsafe(nil), loaded_path = T.unsafe(nil)); end
# source://rubocop-ast/1.44.1/lib/rubocop/ast/utilities/simple_forwardable.rb#19
def [](*_arg0, **_arg1, &_arg2); end
end
RuboCop::Token = RuboCop::AST::Token
class RuboCop::Cop::Base
include ::RuboCop::AST::Sexp
include ::RuboCop::PathUtil
include ::RuboCop::Cop::Util
include ::RuboCop::Cop::IgnoredNode
include ::RuboCop::Cop::AutocorrectLogic
extend ::RuboCop::AST::Sexp
extend ::RuboCop::AST::NodePattern::Macros
extend ::RuboCop::ExcludeLimit
# @return [Base] a new instance of Base
#
# source://rubocop//lib/rubocop/cop/base.rb#156
def initialize(config = T.unsafe(nil), options = T.unsafe(nil)); end
end
class RuboCop::Cop::SomeUnusedCop < RuboCop::Cop::Base
def on_send(_node); end
end
module RuboCop::Cop::UnusedModule; end
class CompletelyUnrelated
def bananas; end
end
module RuboCop::Version
class << self
# @api private
#
# source://rubocop//lib/rubocop/version.rb#121
def config_for_pwd(env); end
# @api private
#
# source://rubocop//lib/rubocop/version.rb#151
def document_version; end
end
end
VERSION = "x.x.x"
SOME_CONSTANT = "some constant value"