packwerk 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (153) hide show
  1. checksums.yaml +7 -0
  2. data/.github/ISSUE_TEMPLATE/bug_report.md +27 -0
  3. data/.github/probots.yml +2 -0
  4. data/.github/pull_request_template.md +27 -0
  5. data/.github/workflows/ci.yml +50 -0
  6. data/.gitignore +12 -0
  7. data/.rubocop.yml +46 -0
  8. data/.ruby-version +1 -0
  9. data/CODEOWNERS +1 -0
  10. data/CODE_OF_CONDUCT.md +76 -0
  11. data/CONTRIBUTING.md +17 -0
  12. data/Gemfile +22 -0
  13. data/Gemfile.lock +236 -0
  14. data/LICENSE.md +7 -0
  15. data/README.md +73 -0
  16. data/Rakefile +13 -0
  17. data/TROUBLESHOOT.md +67 -0
  18. data/USAGE.md +250 -0
  19. data/bin/console +15 -0
  20. data/bin/setup +8 -0
  21. data/dev.yml +32 -0
  22. data/docs/cohesion.png +0 -0
  23. data/exe/packwerk +6 -0
  24. data/lib/packwerk.rb +44 -0
  25. data/lib/packwerk/application_validator.rb +343 -0
  26. data/lib/packwerk/association_inspector.rb +44 -0
  27. data/lib/packwerk/checking_deprecated_references.rb +40 -0
  28. data/lib/packwerk/cli.rb +238 -0
  29. data/lib/packwerk/configuration.rb +82 -0
  30. data/lib/packwerk/const_node_inspector.rb +44 -0
  31. data/lib/packwerk/constant_discovery.rb +60 -0
  32. data/lib/packwerk/constant_name_inspector.rb +22 -0
  33. data/lib/packwerk/dependency_checker.rb +28 -0
  34. data/lib/packwerk/deprecated_references.rb +92 -0
  35. data/lib/packwerk/file_processor.rb +43 -0
  36. data/lib/packwerk/files_for_processing.rb +67 -0
  37. data/lib/packwerk/formatters/progress_formatter.rb +46 -0
  38. data/lib/packwerk/generators/application_validation.rb +62 -0
  39. data/lib/packwerk/generators/configuration_file.rb +69 -0
  40. data/lib/packwerk/generators/inflections_file.rb +43 -0
  41. data/lib/packwerk/generators/root_package.rb +37 -0
  42. data/lib/packwerk/generators/templates/inflections.yml +6 -0
  43. data/lib/packwerk/generators/templates/package.yml +17 -0
  44. data/lib/packwerk/generators/templates/packwerk +23 -0
  45. data/lib/packwerk/generators/templates/packwerk.yml.erb +23 -0
  46. data/lib/packwerk/generators/templates/packwerk_validator_test.rb +11 -0
  47. data/lib/packwerk/graph.rb +74 -0
  48. data/lib/packwerk/inflections/custom.rb +33 -0
  49. data/lib/packwerk/inflections/default.rb +73 -0
  50. data/lib/packwerk/inflector.rb +41 -0
  51. data/lib/packwerk/node.rb +259 -0
  52. data/lib/packwerk/node_processor.rb +49 -0
  53. data/lib/packwerk/node_visitor.rb +22 -0
  54. data/lib/packwerk/offense.rb +44 -0
  55. data/lib/packwerk/output_styles.rb +41 -0
  56. data/lib/packwerk/package.rb +56 -0
  57. data/lib/packwerk/package_set.rb +59 -0
  58. data/lib/packwerk/parsed_constant_definitions.rb +62 -0
  59. data/lib/packwerk/parsers.rb +23 -0
  60. data/lib/packwerk/parsers/erb.rb +66 -0
  61. data/lib/packwerk/parsers/factory.rb +34 -0
  62. data/lib/packwerk/parsers/ruby.rb +42 -0
  63. data/lib/packwerk/privacy_checker.rb +45 -0
  64. data/lib/packwerk/reference.rb +6 -0
  65. data/lib/packwerk/reference_extractor.rb +81 -0
  66. data/lib/packwerk/reference_lister.rb +23 -0
  67. data/lib/packwerk/run_context.rb +103 -0
  68. data/lib/packwerk/sanity_checker.rb +10 -0
  69. data/lib/packwerk/spring_command.rb +28 -0
  70. data/lib/packwerk/updating_deprecated_references.rb +51 -0
  71. data/lib/packwerk/version.rb +6 -0
  72. data/lib/packwerk/violation_type.rb +13 -0
  73. data/library.yml +6 -0
  74. data/packwerk.gemspec +58 -0
  75. data/service.yml +6 -0
  76. data/shipit.rubygems.yml +1 -0
  77. data/sorbet/config +2 -0
  78. data/sorbet/rbi/gems/actioncable@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi +840 -0
  79. data/sorbet/rbi/gems/actionmailbox@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi +571 -0
  80. data/sorbet/rbi/gems/actionmailer@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi +568 -0
  81. data/sorbet/rbi/gems/actionpack@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi +5216 -0
  82. data/sorbet/rbi/gems/actiontext@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi +663 -0
  83. data/sorbet/rbi/gems/actionview@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi +2504 -0
  84. data/sorbet/rbi/gems/activejob@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi +635 -0
  85. data/sorbet/rbi/gems/activemodel@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi +1201 -0
  86. data/sorbet/rbi/gems/activerecord@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi +8011 -0
  87. data/sorbet/rbi/gems/activestorage@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi +904 -0
  88. data/sorbet/rbi/gems/activesupport@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi +3888 -0
  89. data/sorbet/rbi/gems/ast@2.4.1.rbi +54 -0
  90. data/sorbet/rbi/gems/better_html@1.0.15.rbi +317 -0
  91. data/sorbet/rbi/gems/builder@3.2.4.rbi +8 -0
  92. data/sorbet/rbi/gems/byebug@11.1.3.rbi +8 -0
  93. data/sorbet/rbi/gems/coderay@1.1.3.rbi +8 -0
  94. data/sorbet/rbi/gems/colorize@0.8.1.rbi +40 -0
  95. data/sorbet/rbi/gems/commander@4.5.2.rbi +8 -0
  96. data/sorbet/rbi/gems/concurrent-ruby@1.1.6.rbi +1966 -0
  97. data/sorbet/rbi/gems/constant_resolver@0.1.5.rbi +26 -0
  98. data/sorbet/rbi/gems/crass@1.0.6.rbi +138 -0
  99. data/sorbet/rbi/gems/erubi@1.9.0.rbi +39 -0
  100. data/sorbet/rbi/gems/globalid@0.4.2.rbi +178 -0
  101. data/sorbet/rbi/gems/highline@2.0.3.rbi +8 -0
  102. data/sorbet/rbi/gems/html_tokenizer@0.0.7.rbi +46 -0
  103. data/sorbet/rbi/gems/i18n@1.8.2.rbi +633 -0
  104. data/sorbet/rbi/gems/jaro_winkler@1.5.4.rbi +8 -0
  105. data/sorbet/rbi/gems/loofah@2.5.0.rbi +272 -0
  106. data/sorbet/rbi/gems/m@1.5.1.rbi +108 -0
  107. data/sorbet/rbi/gems/mail@2.7.1.rbi +2490 -0
  108. data/sorbet/rbi/gems/marcel@0.3.3.rbi +30 -0
  109. data/sorbet/rbi/gems/method_source@1.0.0.rbi +76 -0
  110. data/sorbet/rbi/gems/mimemagic@0.3.5.rbi +47 -0
  111. data/sorbet/rbi/gems/mini_mime@1.0.2.rbi +71 -0
  112. data/sorbet/rbi/gems/mini_portile2@2.4.0.rbi +8 -0
  113. data/sorbet/rbi/gems/minitest@5.14.0.rbi +542 -0
  114. data/sorbet/rbi/gems/mocha@1.11.2.rbi +964 -0
  115. data/sorbet/rbi/gems/nio4r@2.5.2.rbi +89 -0
  116. data/sorbet/rbi/gems/nokogiri@1.10.9.rbi +1608 -0
  117. data/sorbet/rbi/gems/parallel@1.19.1.rbi +8 -0
  118. data/sorbet/rbi/gems/parlour@4.0.1.rbi +561 -0
  119. data/sorbet/rbi/gems/parser@2.7.1.4.rbi +1632 -0
  120. data/sorbet/rbi/gems/pry@0.13.1.rbi +8 -0
  121. data/sorbet/rbi/gems/rack-test@1.1.0.rbi +335 -0
  122. data/sorbet/rbi/gems/rack@2.2.2.rbi +1730 -0
  123. data/sorbet/rbi/gems/rails-dom-testing@2.0.3.rbi +123 -0
  124. data/sorbet/rbi/gems/rails-html-sanitizer@1.3.0.rbi +213 -0
  125. data/sorbet/rbi/gems/rails@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi +8 -0
  126. data/sorbet/rbi/gems/railties@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi +869 -0
  127. data/sorbet/rbi/gems/rainbow@3.0.0.rbi +155 -0
  128. data/sorbet/rbi/gems/rake@13.0.1.rbi +841 -0
  129. data/sorbet/rbi/gems/rexml@3.2.4.rbi +8 -0
  130. data/sorbet/rbi/gems/rubocop-performance@1.5.2.rbi +8 -0
  131. data/sorbet/rbi/gems/rubocop-shopify@1.0.2.rbi +8 -0
  132. data/sorbet/rbi/gems/rubocop-sorbet@0.3.7.rbi +8 -0
  133. data/sorbet/rbi/gems/rubocop@0.82.0.rbi +8 -0
  134. data/sorbet/rbi/gems/ruby-progressbar@1.10.1.rbi +8 -0
  135. data/sorbet/rbi/gems/smart_properties@1.15.0.rbi +168 -0
  136. data/sorbet/rbi/gems/spoom@1.0.4.rbi +418 -0
  137. data/sorbet/rbi/gems/spring@2.1.0.rbi +160 -0
  138. data/sorbet/rbi/gems/sprockets-rails@3.2.1.rbi +431 -0
  139. data/sorbet/rbi/gems/sprockets@4.0.0.rbi +1132 -0
  140. data/sorbet/rbi/gems/tapioca@0.4.5.rbi +518 -0
  141. data/sorbet/rbi/gems/thor@1.0.1.rbi +892 -0
  142. data/sorbet/rbi/gems/tzinfo@2.0.2.rbi +547 -0
  143. data/sorbet/rbi/gems/unicode-display_width@1.7.0.rbi +8 -0
  144. data/sorbet/rbi/gems/websocket-driver@0.7.1.rbi +438 -0
  145. data/sorbet/rbi/gems/websocket-extensions@0.1.4.rbi +71 -0
  146. data/sorbet/rbi/gems/zeitwerk@2.3.0.rbi +8 -0
  147. data/sorbet/tapioca/require.rb +25 -0
  148. data/static/packwerk-check-demo.png +0 -0
  149. data/static/packwerk_check.gif +0 -0
  150. data/static/packwerk_check_violation.gif +0 -0
  151. data/static/packwerk_update.gif +0 -0
  152. data/static/packwerk_validate.gif +0 -0
  153. metadata +341 -0
@@ -0,0 +1,30 @@
1
+ # DO NOT EDIT MANUALLY
2
+ # This is an autogenerated file for types exported from the `marcel` gem.
3
+ # Please instead update this file by running `dev typecheck update`.
4
+
5
+ # typed: true
6
+
7
+ module Marcel
8
+ end
9
+
10
+ class Marcel::MimeType
11
+ class << self
12
+ def extend(type, extensions: T.unsafe(nil), parents: T.unsafe(nil), magic: T.unsafe(nil)); end
13
+ def for(pathname_or_io = T.unsafe(nil), name: T.unsafe(nil), extension: T.unsafe(nil), declared_type: T.unsafe(nil)); end
14
+
15
+ private
16
+
17
+ def for_data(pathname_or_io); end
18
+ def for_declared_type(declared_type); end
19
+ def for_extension(extension); end
20
+ def for_name(name); end
21
+ def most_specific_type(from_magic_type, fallback_type); end
22
+ def parse_media_type(content_type); end
23
+ def root_types(type); end
24
+ def with_io(pathname_or_io, &block); end
25
+ end
26
+ end
27
+
28
+ Marcel::MimeType::BINARY = T.let(T.unsafe(nil), String)
29
+
30
+ Marcel::VERSION = T.let(T.unsafe(nil), String)
@@ -0,0 +1,76 @@
1
+ # DO NOT EDIT MANUALLY
2
+ # This is an autogenerated file for types exported from the `method_source` gem.
3
+ # Please instead update this file by running `dev typecheck update`.
4
+
5
+ # typed: true
6
+
7
+ module MethodSource
8
+ extend(::MethodSource::CodeHelpers)
9
+
10
+ class << self
11
+ def comment_helper(source_location, name = T.unsafe(nil)); end
12
+ def extract_code(source_location); end
13
+ def lines_for(file_name, name = T.unsafe(nil)); end
14
+ def source_helper(source_location, name = T.unsafe(nil)); end
15
+ def valid_expression?(str); end
16
+ end
17
+ end
18
+
19
+ module MethodSource::CodeHelpers
20
+ def comment_describing(file, line_number); end
21
+ def complete_expression?(str); end
22
+ def expression_at(file, line_number, options = T.unsafe(nil)); end
23
+
24
+ private
25
+
26
+ def extract_first_expression(lines, consume = T.unsafe(nil), &block); end
27
+ def extract_last_comment(lines); end
28
+ end
29
+
30
+ module MethodSource::CodeHelpers::IncompleteExpression
31
+ class << self
32
+ def ===(ex); end
33
+ def rbx?; end
34
+ end
35
+ end
36
+
37
+ MethodSource::CodeHelpers::IncompleteExpression::GENERIC_REGEXPS = T.let(T.unsafe(nil), Array)
38
+
39
+ MethodSource::CodeHelpers::IncompleteExpression::RBX_ONLY_REGEXPS = T.let(T.unsafe(nil), Array)
40
+
41
+ module MethodSource::MethodExtensions
42
+ def comment; end
43
+ def source; end
44
+
45
+ class << self
46
+ def included(klass); end
47
+ end
48
+ end
49
+
50
+ module MethodSource::ReeSourceLocation
51
+ def source_location; end
52
+ end
53
+
54
+ module MethodSource::SourceLocation
55
+ end
56
+
57
+ module MethodSource::SourceLocation::MethodExtensions
58
+ def source_location; end
59
+
60
+ private
61
+
62
+ def trace_func(event, file, line, id, binding, classname); end
63
+ end
64
+
65
+ module MethodSource::SourceLocation::ProcExtensions
66
+ def source_location; end
67
+ end
68
+
69
+ module MethodSource::SourceLocation::UnboundMethodExtensions
70
+ def source_location; end
71
+ end
72
+
73
+ class MethodSource::SourceNotFoundError < ::StandardError
74
+ end
75
+
76
+ MethodSource::VERSION = T.let(T.unsafe(nil), String)
@@ -0,0 +1,47 @@
1
+ # DO NOT EDIT MANUALLY
2
+ # This is an autogenerated file for types exported from the `mimemagic` gem.
3
+ # Please instead update this file by running `dev typecheck update`.
4
+
5
+ # typed: true
6
+
7
+ class MimeMagic
8
+ def initialize(type); end
9
+
10
+ def ==(other); end
11
+ def audio?; end
12
+ def child_of?(parent); end
13
+ def comment; end
14
+ def eql?(other); end
15
+ def extensions; end
16
+ def hash; end
17
+ def image?; end
18
+ def mediatype; end
19
+ def subtype; end
20
+ def text?; end
21
+ def to_s; end
22
+ def type; end
23
+ def video?; end
24
+
25
+ class << self
26
+ def add(type, options); end
27
+ def all_by_magic(io); end
28
+ def by_extension(ext); end
29
+ def by_magic(io); end
30
+ def by_path(path); end
31
+ def child?(child, parent); end
32
+ def remove(type); end
33
+
34
+ private
35
+
36
+ def magic_match(io, method); end
37
+ def magic_match_io(io, matches, buffer); end
38
+ end
39
+ end
40
+
41
+ MimeMagic::EXTENSIONS = T.let(T.unsafe(nil), Hash)
42
+
43
+ MimeMagic::MAGIC = T.let(T.unsafe(nil), Array)
44
+
45
+ MimeMagic::TYPES = T.let(T.unsafe(nil), Hash)
46
+
47
+ MimeMagic::VERSION = T.let(T.unsafe(nil), String)
@@ -0,0 +1,71 @@
1
+ # DO NOT EDIT MANUALLY
2
+ # This is an autogenerated file for types exported from the `mini_mime` gem.
3
+ # Please instead update this file by running `dev typecheck update`.
4
+
5
+ # typed: true
6
+
7
+ module MiniMime
8
+ class << self
9
+ def lookup_by_content_type(mime); end
10
+ def lookup_by_extension(extension); end
11
+ def lookup_by_filename(filename); end
12
+ end
13
+ end
14
+
15
+ module MiniMime::Configuration
16
+ class << self
17
+ def content_type_db_path; end
18
+ def content_type_db_path=(_); end
19
+ def ext_db_path; end
20
+ def ext_db_path=(_); end
21
+ end
22
+ end
23
+
24
+ class MiniMime::Db
25
+ def initialize; end
26
+
27
+ def lookup_by_content_type(content_type); end
28
+ def lookup_by_extension(extension); end
29
+
30
+ class << self
31
+ def lookup_by_content_type(content_type); end
32
+ def lookup_by_extension(extension); end
33
+ def lookup_by_filename(filename); end
34
+ end
35
+ end
36
+
37
+ class MiniMime::Db::Cache
38
+ def initialize(size); end
39
+
40
+ def []=(key, val); end
41
+ def fetch(key, &blk); end
42
+ end
43
+
44
+ MiniMime::Db::LOCK = T.let(T.unsafe(nil), Thread::Mutex)
45
+
46
+ class MiniMime::Db::RandomAccessDb
47
+ def initialize(path, sort_order); end
48
+
49
+ def lookup(val); end
50
+ def lookup_uncached(val); end
51
+ def resolve(row); end
52
+ end
53
+
54
+ MiniMime::Db::RandomAccessDb::MAX_CACHED = T.let(T.unsafe(nil), Integer)
55
+
56
+ class MiniMime::Info
57
+ def initialize(buffer); end
58
+
59
+ def [](idx); end
60
+ def binary?; end
61
+ def content_type; end
62
+ def content_type=(_); end
63
+ def encoding; end
64
+ def encoding=(_); end
65
+ def extension; end
66
+ def extension=(_); end
67
+ end
68
+
69
+ MiniMime::Info::BINARY_ENCODINGS = T.let(T.unsafe(nil), Array)
70
+
71
+ MiniMime::VERSION = T.let(T.unsafe(nil), String)
@@ -0,0 +1,8 @@
1
+ # DO NOT EDIT MANUALLY
2
+ # This is an autogenerated file for types exported from the `mini_portile2` gem.
3
+ # Please instead update this file by running `dev typecheck update`.
4
+
5
+ # typed: true
6
+
7
+ # THIS IS AN EMPTY RBI FILE.
8
+ # see https://github.com/Shopify/tapioca/blob/master/README.md#manual-gem-requires
@@ -0,0 +1,542 @@
1
+ # DO NOT EDIT MANUALLY
2
+ # This is an autogenerated file for types exported from the `minitest` gem.
3
+ # Please instead update this file by running `dev typecheck update`.
4
+
5
+ # typed: true
6
+
7
+ module Kernel
8
+
9
+ private
10
+
11
+ def describe(desc, *additional_desc, &block); end
12
+ end
13
+
14
+ module Minitest
15
+ class << self
16
+ def __run(reporter, options); end
17
+ def after_run(&block); end
18
+ def autorun; end
19
+ def backtrace_filter; end
20
+ def backtrace_filter=(_); end
21
+ def clock_time; end
22
+ def extensions; end
23
+ def extensions=(_); end
24
+ def filter_backtrace(bt); end
25
+ def info_signal; end
26
+ def info_signal=(_); end
27
+ def init_plugins(options); end
28
+ def load_plugins; end
29
+ def parallel_executor; end
30
+ def parallel_executor=(_); end
31
+ def process_args(args = T.unsafe(nil)); end
32
+ def reporter; end
33
+ def reporter=(_); end
34
+ def run(args = T.unsafe(nil)); end
35
+ def run_one_method(klass, method_name); end
36
+ end
37
+ end
38
+
39
+ class Minitest::AbstractReporter
40
+ include(::Mutex_m)
41
+
42
+ def lock; end
43
+ def locked?; end
44
+ def passed?; end
45
+ def prerecord(klass, name); end
46
+ def record(result); end
47
+ def report; end
48
+ def start; end
49
+ def synchronize(&block); end
50
+ def try_lock; end
51
+ def unlock; end
52
+ end
53
+
54
+ class Minitest::Assertion < ::Exception
55
+ def error; end
56
+ def location; end
57
+ def result_code; end
58
+ def result_label; end
59
+ end
60
+
61
+ module Minitest::Assertions
62
+ def _synchronize; end
63
+ def assert(test, msg = T.unsafe(nil)); end
64
+ def assert_empty(obj, msg = T.unsafe(nil)); end
65
+ def assert_equal(exp, act, msg = T.unsafe(nil)); end
66
+ def assert_in_delta(exp, act, delta = T.unsafe(nil), msg = T.unsafe(nil)); end
67
+ def assert_in_epsilon(exp, act, epsilon = T.unsafe(nil), msg = T.unsafe(nil)); end
68
+ def assert_includes(collection, obj, msg = T.unsafe(nil)); end
69
+ def assert_instance_of(cls, obj, msg = T.unsafe(nil)); end
70
+ def assert_kind_of(cls, obj, msg = T.unsafe(nil)); end
71
+ def assert_match(matcher, obj, msg = T.unsafe(nil)); end
72
+ def assert_mock(mock); end
73
+ def assert_nil(obj, msg = T.unsafe(nil)); end
74
+ def assert_operator(o1, op, o2 = T.unsafe(nil), msg = T.unsafe(nil)); end
75
+ def assert_output(stdout = T.unsafe(nil), stderr = T.unsafe(nil)); end
76
+ def assert_path_exists(path, msg = T.unsafe(nil)); end
77
+ def assert_predicate(o1, op, msg = T.unsafe(nil)); end
78
+ def assert_raises(*exp); end
79
+ def assert_respond_to(obj, meth, msg = T.unsafe(nil)); end
80
+ def assert_same(exp, act, msg = T.unsafe(nil)); end
81
+ def assert_send(send_ary, m = T.unsafe(nil)); end
82
+ def assert_silent; end
83
+ def assert_throws(sym, msg = T.unsafe(nil)); end
84
+ def capture_io; end
85
+ def capture_subprocess_io; end
86
+ def diff(exp, act); end
87
+ def exception_details(e, msg); end
88
+ def fail_after(y, m, d, msg); end
89
+ def flunk(msg = T.unsafe(nil)); end
90
+ def message(msg = T.unsafe(nil), ending = T.unsafe(nil), &default); end
91
+ def mu_pp(obj); end
92
+ def mu_pp_for_diff(obj); end
93
+ def pass(_msg = T.unsafe(nil)); end
94
+ def refute(test, msg = T.unsafe(nil)); end
95
+ def refute_empty(obj, msg = T.unsafe(nil)); end
96
+ def refute_equal(exp, act, msg = T.unsafe(nil)); end
97
+ def refute_in_delta(exp, act, delta = T.unsafe(nil), msg = T.unsafe(nil)); end
98
+ def refute_in_epsilon(a, b, epsilon = T.unsafe(nil), msg = T.unsafe(nil)); end
99
+ def refute_includes(collection, obj, msg = T.unsafe(nil)); end
100
+ def refute_instance_of(cls, obj, msg = T.unsafe(nil)); end
101
+ def refute_kind_of(cls, obj, msg = T.unsafe(nil)); end
102
+ def refute_match(matcher, obj, msg = T.unsafe(nil)); end
103
+ def refute_nil(obj, msg = T.unsafe(nil)); end
104
+ def refute_operator(o1, op, o2 = T.unsafe(nil), msg = T.unsafe(nil)); end
105
+ def refute_path_exists(path, msg = T.unsafe(nil)); end
106
+ def refute_predicate(o1, op, msg = T.unsafe(nil)); end
107
+ def refute_respond_to(obj, meth, msg = T.unsafe(nil)); end
108
+ def refute_same(exp, act, msg = T.unsafe(nil)); end
109
+ def skip(msg = T.unsafe(nil), bt = T.unsafe(nil)); end
110
+ def skip_until(y, m, d, msg); end
111
+ def skipped?; end
112
+ def things_to_diff(exp, act); end
113
+
114
+ class << self
115
+ def diff; end
116
+ def diff=(o); end
117
+ end
118
+ end
119
+
120
+ Minitest::Assertions::E = T.let(T.unsafe(nil), String)
121
+
122
+ Minitest::Assertions::UNDEFINED = T.let(T.unsafe(nil), Object)
123
+
124
+ class Minitest::BacktraceFilter
125
+ def filter(bt); end
126
+ end
127
+
128
+ Minitest::BacktraceFilter::MT_RE = T.let(T.unsafe(nil), Regexp)
129
+
130
+ class Minitest::CompositeReporter < ::Minitest::AbstractReporter
131
+ def initialize(*reporters); end
132
+
133
+ def <<(reporter); end
134
+ def io; end
135
+ def passed?; end
136
+ def prerecord(klass, name); end
137
+ def record(result); end
138
+ def report; end
139
+ def reporters; end
140
+ def reporters=(_); end
141
+ def start; end
142
+ end
143
+
144
+ Minitest::ENCS = T.let(T.unsafe(nil), TrueClass)
145
+
146
+ class Minitest::Expectation < ::Struct
147
+ def ctx; end
148
+ def ctx=(_); end
149
+ def must_be(*args); end
150
+ def must_be_close_to(*args); end
151
+ def must_be_empty(*args); end
152
+ def must_be_instance_of(*args); end
153
+ def must_be_kind_of(*args); end
154
+ def must_be_nil(*args); end
155
+ def must_be_same_as(*args); end
156
+ def must_be_silent(*args); end
157
+ def must_be_within_delta(*args); end
158
+ def must_be_within_epsilon(*args); end
159
+ def must_equal(*args); end
160
+ def must_include(*args); end
161
+ def must_match(*args); end
162
+ def must_output(*args); end
163
+ def must_raise(*args); end
164
+ def must_respond_to(*args); end
165
+ def must_throw(*args); end
166
+ def path_must_exist(*args); end
167
+ def path_wont_exist(*args); end
168
+ def target; end
169
+ def target=(_); end
170
+ def wont_be(*args); end
171
+ def wont_be_close_to(*args); end
172
+ def wont_be_empty(*args); end
173
+ def wont_be_instance_of(*args); end
174
+ def wont_be_kind_of(*args); end
175
+ def wont_be_nil(*args); end
176
+ def wont_be_same_as(*args); end
177
+ def wont_be_within_delta(*args); end
178
+ def wont_be_within_epsilon(*args); end
179
+ def wont_equal(*args); end
180
+ def wont_include(*args); end
181
+ def wont_match(*args); end
182
+ def wont_respond_to(*args); end
183
+
184
+ class << self
185
+ def [](*_); end
186
+ def inspect; end
187
+ def members; end
188
+ def new(*_); end
189
+ end
190
+ end
191
+
192
+ module Minitest::Expectations
193
+ def must_be(*args); end
194
+ def must_be_close_to(*args); end
195
+ def must_be_empty(*args); end
196
+ def must_be_instance_of(*args); end
197
+ def must_be_kind_of(*args); end
198
+ def must_be_nil(*args); end
199
+ def must_be_same_as(*args); end
200
+ def must_be_silent(*args); end
201
+ def must_be_within_delta(*args); end
202
+ def must_be_within_epsilon(*args); end
203
+ def must_equal(*args); end
204
+ def must_include(*args); end
205
+ def must_match(*args); end
206
+ def must_output(*args); end
207
+ def must_raise(*args); end
208
+ def must_respond_to(*args); end
209
+ def must_throw(*args); end
210
+ def path_must_exist(*args); end
211
+ def path_wont_exist(*args); end
212
+ def wont_be(*args); end
213
+ def wont_be_close_to(*args); end
214
+ def wont_be_empty(*args); end
215
+ def wont_be_instance_of(*args); end
216
+ def wont_be_kind_of(*args); end
217
+ def wont_be_nil(*args); end
218
+ def wont_be_same_as(*args); end
219
+ def wont_be_within_delta(*args); end
220
+ def wont_be_within_epsilon(*args); end
221
+ def wont_equal(*args); end
222
+ def wont_include(*args); end
223
+ def wont_match(*args); end
224
+ def wont_respond_to(*args); end
225
+ end
226
+
227
+ module Minitest::Guard
228
+ def jruby?(platform = T.unsafe(nil)); end
229
+ def maglev?(platform = T.unsafe(nil)); end
230
+ def mri?(platform = T.unsafe(nil)); end
231
+ def osx?(platform = T.unsafe(nil)); end
232
+ def rubinius?(platform = T.unsafe(nil)); end
233
+ def windows?(platform = T.unsafe(nil)); end
234
+ end
235
+
236
+ class Minitest::Mock
237
+ def initialize(delegator = T.unsafe(nil)); end
238
+
239
+ def ===(*args, &b); end
240
+ def __call(name, data); end
241
+ def __respond_to?(*_); end
242
+ def class(*args, &b); end
243
+ def expect(name, retval, args = T.unsafe(nil), &blk); end
244
+ def inspect(*args, &b); end
245
+ def instance_eval(*args, &b); end
246
+ def instance_variables(*args, &b); end
247
+ def method_missing(sym, *args, &block); end
248
+ def object_id(*args, &b); end
249
+ def public_send(*args, &b); end
250
+ def respond_to?(sym, include_private = T.unsafe(nil)); end
251
+ def send(*args, &b); end
252
+ def to_s(*args, &b); end
253
+ def verify; end
254
+
255
+ private
256
+
257
+ def respond_to_missing?(*args, &b); end
258
+ end
259
+
260
+ module Minitest::Parallel
261
+ end
262
+
263
+ class Minitest::Parallel::Executor
264
+ def initialize(size); end
265
+
266
+ def <<(work); end
267
+ def shutdown; end
268
+ def size; end
269
+ def start; end
270
+ end
271
+
272
+ module Minitest::Parallel::Test
273
+ def _synchronize; end
274
+ end
275
+
276
+ module Minitest::Parallel::Test::ClassMethods
277
+ def run_one_method(klass, method_name, reporter); end
278
+ def test_order; end
279
+ end
280
+
281
+ class Minitest::ProgressReporter < ::Minitest::Reporter
282
+ def prerecord(klass, name); end
283
+ def record(result); end
284
+ end
285
+
286
+ module Minitest::Reportable
287
+ def class_name; end
288
+ def error?; end
289
+ def location; end
290
+ def passed?; end
291
+ def result_code; end
292
+ def skipped?; end
293
+ end
294
+
295
+ class Minitest::Reporter < ::Minitest::AbstractReporter
296
+ def initialize(io = T.unsafe(nil), options = T.unsafe(nil)); end
297
+
298
+ def io; end
299
+ def io=(_); end
300
+ def options; end
301
+ def options=(_); end
302
+ end
303
+
304
+ class Minitest::Result < ::Minitest::Runnable
305
+ include(::Minitest::Reportable)
306
+
307
+ def class_name; end
308
+ def klass; end
309
+ def klass=(_); end
310
+ def source_location; end
311
+ def source_location=(_); end
312
+ def to_s; end
313
+
314
+ class << self
315
+ def from(runnable); end
316
+ end
317
+ end
318
+
319
+ class Minitest::Runnable
320
+ def initialize(name); end
321
+
322
+ def assertions; end
323
+ def assertions=(_); end
324
+ def failure; end
325
+ def failures; end
326
+ def failures=(_); end
327
+ def marshal_dump; end
328
+ def marshal_load(ary); end
329
+ def name; end
330
+ def name=(o); end
331
+ def passed?; end
332
+ def result_code; end
333
+ def run; end
334
+ def skipped?; end
335
+ def time; end
336
+ def time=(_); end
337
+ def time_it; end
338
+
339
+ class << self
340
+ def inherited(klass); end
341
+ def methods_matching(re); end
342
+ def on_signal(name, action); end
343
+ def reset; end
344
+ def run(reporter, options = T.unsafe(nil)); end
345
+ def run_one_method(klass, method_name, reporter); end
346
+ def runnable_methods; end
347
+ def runnables; end
348
+ def with_info_handler(reporter, &block); end
349
+ end
350
+ end
351
+
352
+ Minitest::Runnable::SIGNALS = T.let(T.unsafe(nil), Hash)
353
+
354
+ class Minitest::Skip < ::Minitest::Assertion
355
+ def result_label; end
356
+ end
357
+
358
+ class Minitest::Spec < ::Minitest::Test
359
+ include(::Minitest::Spec::DSL::InstanceMethods)
360
+ extend(::Minitest::Spec::DSL)
361
+
362
+ def initialize(name); end
363
+
364
+ class << self
365
+ def current; end
366
+ end
367
+ end
368
+
369
+ module Minitest::Spec::DSL
370
+ def after(_type = T.unsafe(nil), &block); end
371
+ def before(_type = T.unsafe(nil), &block); end
372
+ def children; end
373
+ def create(name, desc); end
374
+ def desc; end
375
+ def describe_stack; end
376
+ def it(desc = T.unsafe(nil), &block); end
377
+ def let(name, &block); end
378
+ def name; end
379
+ def nuke_test_methods!; end
380
+ def register_spec_type(*args, &block); end
381
+ def spec_type(desc, *additional); end
382
+ def specify(desc = T.unsafe(nil), &block); end
383
+ def subject(&block); end
384
+ def to_s; end
385
+
386
+ class << self
387
+ def extended(obj); end
388
+ end
389
+ end
390
+
391
+ module Minitest::Spec::DSL::InstanceMethods
392
+ def _(value = T.unsafe(nil), &block); end
393
+ def before_setup; end
394
+ def expect(value = T.unsafe(nil), &block); end
395
+ def value(value = T.unsafe(nil), &block); end
396
+ end
397
+
398
+ Minitest::Spec::DSL::TYPES = T.let(T.unsafe(nil), Array)
399
+
400
+ Minitest::Spec::TYPES = T.let(T.unsafe(nil), Array)
401
+
402
+ class Minitest::StatisticsReporter < ::Minitest::Reporter
403
+ def initialize(io = T.unsafe(nil), options = T.unsafe(nil)); end
404
+
405
+ def assertions; end
406
+ def assertions=(_); end
407
+ def count; end
408
+ def count=(_); end
409
+ def errors; end
410
+ def errors=(_); end
411
+ def failures; end
412
+ def failures=(_); end
413
+ def passed?; end
414
+ def record(result); end
415
+ def report; end
416
+ def results; end
417
+ def results=(_); end
418
+ def skips; end
419
+ def skips=(_); end
420
+ def start; end
421
+ def start_time; end
422
+ def start_time=(_); end
423
+ def total_time; end
424
+ def total_time=(_); end
425
+ end
426
+
427
+ class Minitest::SummaryReporter < ::Minitest::StatisticsReporter
428
+ def aggregated_results(io); end
429
+ def old_sync; end
430
+ def old_sync=(_); end
431
+ def report; end
432
+ def start; end
433
+ def statistics; end
434
+ def summary; end
435
+ def sync; end
436
+ def sync=(_); end
437
+ def to_s; end
438
+
439
+ private
440
+
441
+ def binary_string; end
442
+ end
443
+
444
+ class Minitest::Test < ::Minitest::Runnable
445
+ include(::Minitest::Assertions)
446
+ include(::Minitest::Reportable)
447
+ include(::Minitest::Test::LifecycleHooks)
448
+ include(::Minitest::Guard)
449
+ include(::Mocha::ParameterMatchers)
450
+ include(::Mocha::Hooks)
451
+ include(::Mocha::API)
452
+ include(::Mocha::Integration::MiniTest::Adapter)
453
+ extend(::Minitest::Guard)
454
+
455
+ def capture_exceptions; end
456
+ def class_name; end
457
+ def run; end
458
+ def with_info_handler(&block); end
459
+
460
+ class << self
461
+ def i_suck_and_my_tests_are_order_dependent!; end
462
+ def io_lock; end
463
+ def io_lock=(_); end
464
+ def make_my_diffs_pretty!; end
465
+ def parallelize_me!; end
466
+ def runnable_methods; end
467
+ def test_order; end
468
+ end
469
+ end
470
+
471
+ module Minitest::Test::LifecycleHooks
472
+ def after_setup; end
473
+ def after_teardown; end
474
+ def before_setup; end
475
+ def before_teardown; end
476
+ def setup; end
477
+ def teardown; end
478
+ end
479
+
480
+ Minitest::Test::PASSTHROUGH_EXCEPTIONS = T.let(T.unsafe(nil), Array)
481
+
482
+ Minitest::Test::TEARDOWN_METHODS = T.let(T.unsafe(nil), Array)
483
+
484
+ class Minitest::UnexpectedError < ::Minitest::Assertion
485
+ def initialize(error); end
486
+
487
+ def backtrace; end
488
+ def error; end
489
+ def error=(_); end
490
+ def message; end
491
+ def result_label; end
492
+ end
493
+
494
+ class Minitest::Unit
495
+ class << self
496
+ def after_tests(&b); end
497
+ def autorun; end
498
+ end
499
+ end
500
+
501
+ class Minitest::Unit::TestCase < ::Minitest::Test
502
+ class << self
503
+ def inherited(klass); end
504
+ end
505
+ end
506
+
507
+ Minitest::Unit::VERSION = T.let(T.unsafe(nil), String)
508
+
509
+ Minitest::VERSION = T.let(T.unsafe(nil), String)
510
+
511
+ class MockExpectationError < ::StandardError
512
+ end
513
+
514
+ class Module
515
+ include(::ActiveSupport::Dependencies::ModuleConstMissing)
516
+ include(::Module::Concerning)
517
+
518
+ def infect_an_assertion(meth, new_name, dont_flip = T.unsafe(nil)); end
519
+ end
520
+
521
+ Module::DELEGATION_RESERVED_KEYWORDS = T.let(T.unsafe(nil), Array)
522
+
523
+ Module::DELEGATION_RESERVED_METHOD_NAMES = T.let(T.unsafe(nil), Set)
524
+
525
+ Module::RUBY_RESERVED_KEYWORDS = T.let(T.unsafe(nil), Array)
526
+
527
+ class Object < ::BasicObject
528
+ include(::ActiveSupport::ToJsonWithActiveSupportEncoder)
529
+ include(::ActiveSupport::ForkTracker::CoreExt)
530
+ include(::ActiveSupport::ForkTracker::CoreExtPrivate)
531
+ include(::Kernel)
532
+ include(::JSON::Ext::Generator::GeneratorMethods::Object)
533
+ include(::ActiveSupport::Tryable)
534
+ include(::ActiveSupport::Dependencies::Loadable)
535
+ include(::Minitest::Expectations)
536
+ include(::Mocha::ParameterMatchers::InstanceMethods)
537
+ include(::Mocha::Inspect::ObjectMethods)
538
+ include(::Mocha::ObjectMethods)
539
+ include(::PP::ObjectMixin)
540
+
541
+ def stub(name, val_or_callable, *block_args); end
542
+ end