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,518 @@
1
+ # DO NOT EDIT MANUALLY
2
+ # This is an autogenerated file for types exported from the `tapioca` gem.
3
+ # Please instead update this file by running `dev typecheck update`.
4
+
5
+ # typed: true
6
+
7
+ module Tapioca
8
+ class << self
9
+ def silence_warnings(&blk); end
10
+ end
11
+ end
12
+
13
+ class Tapioca::Cli < ::Thor
14
+ include(::Thor::Actions)
15
+ extend(::Thor::Actions::ClassMethods)
16
+
17
+ def dsl(*constants); end
18
+ def generate(*gems); end
19
+ def generator; end
20
+ def init; end
21
+ def require; end
22
+ def sync; end
23
+ def todo; end
24
+
25
+ class << self
26
+ def exit_on_failure?; end
27
+ end
28
+ end
29
+
30
+ module Tapioca::Compilers
31
+ end
32
+
33
+ module Tapioca::Compilers::Dsl
34
+ end
35
+
36
+ class Tapioca::Compilers::Dsl::Base
37
+ abstract!
38
+
39
+ sig { void }
40
+ def initialize; end
41
+
42
+ sig { abstract.type_parameters(:T).params(root: Parlour::RbiGenerator::Namespace, constant: T.type_parameter(:T)).void }
43
+ def decorate(root, constant); end
44
+ sig { abstract.returns(T::Enumerable[Module]) }
45
+ def gather_constants; end
46
+ sig { params(constant: Module).returns(T::Boolean) }
47
+ def handles?(constant); end
48
+ sig { returns(T::Set[Module]) }
49
+ def processable_constants; end
50
+
51
+ private
52
+
53
+ sig { params(method_def: T.any(Method, UnboundMethod)).returns(T::Array[Parlour::RbiGenerator::Parameter]) }
54
+ def compile_method_parameters_to_parlour(method_def); end
55
+ sig { params(method_def: T.any(Method, UnboundMethod)).returns(String) }
56
+ def compile_method_return_type_to_parlour(method_def); end
57
+ sig { params(namespace: Parlour::RbiGenerator::Namespace, name: String, options: T::Hash[T.untyped, T.untyped]).void }
58
+ def create_method(namespace, name, options = T.unsafe(nil)); end
59
+ sig { params(namespace: Parlour::RbiGenerator::Namespace, method_def: T.any(Method, UnboundMethod), class_method: T::Boolean).void }
60
+ def create_method_from_def(namespace, method_def, class_method: T.unsafe(nil)); end
61
+ sig { params(method_def: T.any(Method, UnboundMethod), signature: T.untyped).returns(T::Array[String]) }
62
+ def parameters_types_from_signature(method_def, signature); end
63
+ sig { params(name: String).returns(T::Boolean) }
64
+ def valid_method_name?(name); end
65
+ end
66
+
67
+ Tapioca::Compilers::Dsl::Base::SPECIAL_METHOD_NAMES = T.let(T.unsafe(nil), Array)
68
+
69
+ class Tapioca::Compilers::DslCompiler
70
+ sig { params(requested_constants: T::Array[Module], requested_generators: T::Array[String], error_handler: T.nilable(T.proc.params(error: String).void)).void }
71
+ def initialize(requested_constants:, requested_generators: T.unsafe(nil), error_handler: T.unsafe(nil)); end
72
+
73
+ sig { returns(T.proc.params(error: String).void) }
74
+ def error_handler; end
75
+ sig { returns(T::Enumerable[Tapioca::Compilers::Dsl::Base]) }
76
+ def generators; end
77
+ sig { returns(T::Array[Module]) }
78
+ def requested_constants; end
79
+ sig { params(blk: T.proc.params(constant: Module, rbi: String).void).void }
80
+ def run(&blk); end
81
+
82
+ private
83
+
84
+ sig { params(requested_constants: T::Array[Module]).returns(T::Set[Module]) }
85
+ def gather_constants(requested_constants); end
86
+ sig { params(requested_generators: T::Array[String]).returns(T::Enumerable[Tapioca::Compilers::Dsl::Base]) }
87
+ def gather_generators(requested_generators); end
88
+ sig { params(requested_generators: T::Array[String]).returns(Proc) }
89
+ def generator_filter(requested_generators); end
90
+ sig { params(constant: Module).returns(T.nilable(String)) }
91
+ def rbi_for_constant(constant); end
92
+ sig { params(error: String).returns(T.noreturn) }
93
+ def report_error(error); end
94
+ sig { params(parlour: Parlour::RbiGenerator).void }
95
+ def resolve_conflicts(parlour); end
96
+ end
97
+
98
+ class Tapioca::Compilers::RequiresCompiler
99
+ sig { params(sorbet_path: String).void }
100
+ def initialize(sorbet_path); end
101
+
102
+ sig { returns(String) }
103
+ def compile; end
104
+
105
+ private
106
+
107
+ sig { params(config: Spoom::Sorbet::Config).returns(T::Array[String]) }
108
+ def collect_files(config); end
109
+ sig { params(file_path: String).returns(T::Enumerable[String]) }
110
+ def collect_requires(file_path); end
111
+ sig { params(config: Spoom::Sorbet::Config, file: String).returns(T::Boolean) }
112
+ def file_ignored_by_sorbet?(config, file); end
113
+ sig { params(files: T::Enumerable[String], name: String).returns(T::Boolean) }
114
+ def name_in_project?(files, name); end
115
+ end
116
+
117
+ module Tapioca::Compilers::Sorbet
118
+ class << self
119
+ sig { params(args: String).returns(String) }
120
+ def run(*args); end
121
+ sig { returns(String) }
122
+ def sorbet_path; end
123
+ end
124
+ end
125
+
126
+ Tapioca::Compilers::Sorbet::SORBET = T.let(T.unsafe(nil), Pathname)
127
+
128
+ module Tapioca::Compilers::SymbolTable
129
+ end
130
+
131
+ class Tapioca::Compilers::SymbolTable::SymbolGenerator
132
+ sig { params(gem: Tapioca::Gemfile::Gem, indent: Integer).void }
133
+ def initialize(gem, indent = T.unsafe(nil)); end
134
+
135
+ def gem; end
136
+ sig { returns(String) }
137
+ def generate; end
138
+ def indent; end
139
+
140
+ private
141
+
142
+ sig { params(name: String).void }
143
+ def add_to_alias_namespace(name); end
144
+ sig { params(name: String).returns(T::Boolean) }
145
+ def alias_namespaced?(name); end
146
+ sig { params(constant: Module, other: BasicObject).returns(T::Boolean) }
147
+ def are_equal?(constant, other); end
148
+ sig { params(constant: BasicObject).returns(Class) }
149
+ def class_of(constant); end
150
+ sig { params(name: T.nilable(String), constant: BasicObject).returns(T.nilable(String)) }
151
+ def compile(name, constant); end
152
+ sig { params(name: String, constant: Module).returns(T.nilable(String)) }
153
+ def compile_alias(name, constant); end
154
+ sig { params(name: String, constant: Module).returns(T.nilable(String)) }
155
+ def compile_body(name, constant); end
156
+ sig { params(name: String, constant: BasicObject).returns(T.nilable(String)) }
157
+ def compile_constant(name, constant); end
158
+ sig { params(module_name: String, mod: Module, for_visibility: T::Array[Symbol]).returns(String) }
159
+ def compile_directly_owned_methods(module_name, mod, for_visibility = T.unsafe(nil)); end
160
+ sig { params(symbol_name: String, constant: Module, method: T.nilable(UnboundMethod)).returns(T.nilable(String)) }
161
+ def compile_method(symbol_name, constant, method); end
162
+ sig { params(name: String, constant: Module).returns(T.nilable(String)) }
163
+ def compile_methods(name, constant); end
164
+ sig { params(constant: Module).returns(String) }
165
+ def compile_mixes_in_class_methods(constant); end
166
+ sig { params(constant: Module).returns(String) }
167
+ def compile_mixins(constant); end
168
+ sig { params(name: String, constant: Module).returns(T.nilable(String)) }
169
+ def compile_module(name, constant); end
170
+ sig { params(constant: Module).returns(String) }
171
+ def compile_module_helpers(constant); end
172
+ sig { params(name: String, value: BasicObject).returns(T.nilable(String)) }
173
+ def compile_object(name, value); end
174
+ sig { params(constant: Module).returns(String) }
175
+ def compile_props(constant); end
176
+ sig { params(signature: T.untyped, parameters: T::Array[[Symbol, String]]).returns(String) }
177
+ def compile_signature(signature, parameters); end
178
+ sig { params(name: String, constant: Module).returns(T.nilable(String)) }
179
+ def compile_subconstants(name, constant); end
180
+ sig { params(constant: Class).returns(String) }
181
+ def compile_superclass(constant); end
182
+ sig { params(constant: Module).returns(T::Array[Symbol]) }
183
+ def constants_of(constant); end
184
+ sig { params(constant: Module, strict: T::Boolean).returns(T::Boolean) }
185
+ def defined_in_gem?(constant, strict: T.unsafe(nil)); end
186
+ sig { params(symbols: T::Set[String]).returns(T::Set[String]) }
187
+ def engine_symbols(symbols); end
188
+ sig { params(symbol: String).returns(T.nilable(String)) }
189
+ def generate_from_symbol(symbol); end
190
+ sig { params(constant: Module).returns(T::Array[String]) }
191
+ def get_file_candidates(constant); end
192
+ sig { params(str: String).returns(String) }
193
+ def indented(str); end
194
+ def initialize_method_for(constant); end
195
+ sig { params(name: String).void }
196
+ def mark_seen(name); end
197
+ sig { params(method: UnboundMethod).returns(T::Boolean) }
198
+ def method_in_gem?(method); end
199
+ sig { params(mod: Module).returns(T::Hash[Symbol, T::Array[Symbol]]) }
200
+ def method_names_by_visibility(mod); end
201
+ sig { params(constant: Module).returns(T.nilable(String)) }
202
+ def name_of(constant); end
203
+ sig { params(constant: Module).returns(T.nilable(String)) }
204
+ def name_of_proxy_target(constant); end
205
+ def parent_declares_constant?(name); end
206
+ sig { params(constant: Module).returns(T::Boolean) }
207
+ def public_module?(constant); end
208
+ sig { params(constant: Module).returns(T.nilable(String)) }
209
+ def qualified_name_of(constant); end
210
+ sig { params(constant: Module).returns(T.nilable(String)) }
211
+ def raw_name_of(constant); end
212
+ sig { params(symbol: String).returns(BasicObject) }
213
+ def resolve_constant(symbol); end
214
+ sig { params(name: String).returns(T::Boolean) }
215
+ def seen?(name); end
216
+ sig { params(method: T.any(Method, UnboundMethod)).returns(T.untyped) }
217
+ def signature_of(method); end
218
+ sig { params(constant: BasicObject).returns(Class) }
219
+ def singleton_class_of(constant); end
220
+ sig { params(constant: Module, method_name: String).returns(T::Boolean) }
221
+ def struct_method?(constant, method_name); end
222
+ sig { params(constant: Class).returns(T.nilable(Class)) }
223
+ def superclass_of(constant); end
224
+ sig { params(symbol_name: String).returns(T::Boolean) }
225
+ def symbol_ignored?(symbol_name); end
226
+ sig { returns(T::Set[String]) }
227
+ def symbols; end
228
+ sig { params(constant: Module).returns(String) }
229
+ def type_of(constant); end
230
+ sig { params(name: String).returns(T::Boolean) }
231
+ def valid_method_name?(name); end
232
+ sig { type_parameters(:U).params(step: Integer, _blk: T.proc.params().returns(T.type_parameter(:U))).returns(T.type_parameter(:U)) }
233
+ def with_indentation(step = T.unsafe(nil), &_blk); end
234
+ end
235
+
236
+ Tapioca::Compilers::SymbolTable::SymbolGenerator::IGNORED_SYMBOLS = T.let(T.unsafe(nil), Array)
237
+
238
+ Tapioca::Compilers::SymbolTable::SymbolGenerator::SPECIAL_METHOD_NAMES = T.let(T.unsafe(nil), Array)
239
+
240
+ Tapioca::Compilers::SymbolTable::SymbolGenerator::TYPE_PARAMETER_MATCHER = T.let(T.unsafe(nil), Regexp)
241
+
242
+ module Tapioca::Compilers::SymbolTable::SymbolLoader
243
+ class << self
244
+ def ignore_symbol?(symbol); end
245
+ sig { params(paths: T::Array[Pathname]).returns(T::Set[String]) }
246
+ def list_from_paths(paths); end
247
+
248
+ private
249
+
250
+ def ignored_symbols; end
251
+ sig { params(paths: T::Array[String]).returns(T::Set[String]) }
252
+ def load_symbols(paths); end
253
+ def symbol_table_json_from(input, table_type: T.unsafe(nil)); end
254
+ end
255
+ end
256
+
257
+ class Tapioca::Compilers::SymbolTable::SymbolLoader::SymbolTableParser
258
+ class << self
259
+ def parse(object, parents = T.unsafe(nil)); end
260
+ end
261
+ end
262
+
263
+ class Tapioca::Compilers::SymbolTableCompiler
264
+ sig { params(gem: Tapioca::Gemfile::Gem, indent: Integer).returns(String) }
265
+ def compile(gem, indent = T.unsafe(nil)); end
266
+ end
267
+
268
+ class Tapioca::Compilers::TodosCompiler
269
+ sig { returns(String) }
270
+ def compile; end
271
+
272
+ private
273
+
274
+ sig { returns(String) }
275
+ def list_todos; end
276
+ end
277
+
278
+ class Tapioca::Config < ::T::Struct
279
+ const :outdir, String
280
+ const :prerequire, T.nilable(String)
281
+ const :postrequire, String
282
+ const :generate_command, String
283
+ const :exclude, T::Array[String]
284
+ const :typed_overrides, T::Hash[String, String]
285
+ const :todos_path, String
286
+ const :generators, T::Array[String]
287
+
288
+ sig { returns(Pathname) }
289
+ def outpath; end
290
+
291
+ class << self
292
+ def inherited(s); end
293
+ end
294
+ end
295
+
296
+ Tapioca::Config::DEFAULT_DSLDIR = T.let(T.unsafe(nil), String)
297
+
298
+ Tapioca::Config::DEFAULT_GEMDIR = T.let(T.unsafe(nil), String)
299
+
300
+ Tapioca::Config::DEFAULT_OVERRIDES = T.let(T.unsafe(nil), Hash)
301
+
302
+ Tapioca::Config::DEFAULT_POSTREQUIRE = T.let(T.unsafe(nil), String)
303
+
304
+ Tapioca::Config::DEFAULT_RBIDIR = T.let(T.unsafe(nil), String)
305
+
306
+ Tapioca::Config::DEFAULT_TODOSPATH = T.let(T.unsafe(nil), String)
307
+
308
+ Tapioca::Config::SORBET_CONFIG = T.let(T.unsafe(nil), String)
309
+
310
+ Tapioca::Config::SORBET_PATH = T.let(T.unsafe(nil), String)
311
+
312
+ Tapioca::Config::TAPIOCA_CONFIG = T.let(T.unsafe(nil), String)
313
+
314
+ Tapioca::Config::TAPIOCA_PATH = T.let(T.unsafe(nil), String)
315
+
316
+ class Tapioca::ConfigBuilder
317
+ class << self
318
+ sig { params(command: Symbol, options: T::Hash[String, T.untyped]).returns(Tapioca::Config) }
319
+ def from_options(command, options); end
320
+
321
+ private
322
+
323
+ sig { returns(T::Hash[String, T.untyped]) }
324
+ def config_options; end
325
+ sig { returns(String) }
326
+ def default_command; end
327
+ sig { params(command: Symbol).returns(T::Hash[String, T.untyped]) }
328
+ def default_options(command); end
329
+ sig { params(options: T::Hash[String, T.untyped]).returns(T::Hash[String, T.untyped]) }
330
+ def merge_options(*options); end
331
+ end
332
+ end
333
+
334
+ Tapioca::ConfigBuilder::DEFAULT_OPTIONS = T.let(T.unsafe(nil), Hash)
335
+
336
+ module Tapioca::ConstantLocator
337
+
338
+ private
339
+
340
+ def files_for(klass); end
341
+
342
+ class << self
343
+ def files_for(klass); end
344
+ end
345
+ end
346
+
347
+ class Tapioca::Error < ::StandardError
348
+ end
349
+
350
+ class Tapioca::Gemfile
351
+ sig { void }
352
+ def initialize; end
353
+
354
+ sig { returns(T::Array[Tapioca::Gemfile::Gem]) }
355
+ def dependencies; end
356
+ sig { params(gem_name: String).returns(T.nilable(Tapioca::Gemfile::Gem)) }
357
+ def gem(gem_name); end
358
+ sig { void }
359
+ def require; end
360
+
361
+ private
362
+
363
+ sig { returns(Bundler::Definition) }
364
+ def definition; end
365
+ sig { returns(String) }
366
+ def dir; end
367
+ sig { returns(File) }
368
+ def gemfile; end
369
+ sig { returns(T::Array[Symbol]) }
370
+ def groups; end
371
+ def lockfile; end
372
+ sig { returns(Bundler::Runtime) }
373
+ def runtime; end
374
+ end
375
+
376
+ class Tapioca::Gemfile::Gem
377
+ sig { params(spec: T.any(Gem::Specification, T.all(Bundler::RemoteSpecification, Bundler::StubSpecification))).void }
378
+ def initialize(spec); end
379
+
380
+ sig { params(path: String).returns(T::Boolean) }
381
+ def contains_path?(path); end
382
+ sig { returns(T::Array[Pathname]) }
383
+ def files; end
384
+ sig { returns(String) }
385
+ def full_gem_path; end
386
+ sig { params(gemfile_dir: String).returns(T::Boolean) }
387
+ def ignore?(gemfile_dir); end
388
+ sig { returns(String) }
389
+ def name; end
390
+ sig { returns(String) }
391
+ def rbi_file_name; end
392
+ def version; end
393
+
394
+ private
395
+
396
+ sig { returns(T::Boolean) }
397
+ def gem_ignored?; end
398
+ sig { params(gemfile_dir: String).returns(T::Boolean) }
399
+ def gem_in_app_dir?(gemfile_dir); end
400
+ sig { returns(T::Boolean) }
401
+ def gem_in_bundle_path?; end
402
+ sig { params(path: String).returns(T::Boolean) }
403
+ def has_parent_gemspec?(path); end
404
+ sig { params(path: T.any(Pathname, String)).returns(String) }
405
+ def to_realpath(path); end
406
+ sig { returns(String) }
407
+ def version_string; end
408
+ end
409
+
410
+ Tapioca::Gemfile::Gem::IGNORED_GEMS = T.let(T.unsafe(nil), Array)
411
+
412
+ class Tapioca::Generator < ::Thor::Shell::Color
413
+ sig { params(config: Tapioca::Config).void }
414
+ def initialize(config); end
415
+
416
+ sig { params(requested_constants: T::Array[String]).void }
417
+ def build_dsl(requested_constants); end
418
+ sig { params(gem_names: T::Array[String]).void }
419
+ def build_gem_rbis(gem_names); end
420
+ sig { void }
421
+ def build_requires; end
422
+ sig { void }
423
+ def build_todos; end
424
+ sig { returns(Tapioca::Config) }
425
+ def config; end
426
+ sig { void }
427
+ def sync_rbis_with_gemfile; end
428
+
429
+ private
430
+
431
+ sig { params(filename: Pathname).void }
432
+ def add(filename); end
433
+ sig { returns(T::Array[String]) }
434
+ def added_rbis; end
435
+ sig { returns(Tapioca::Gemfile) }
436
+ def bundle; end
437
+ sig { params(constant: Module, contents: String).void }
438
+ def compile_dsl_rbi(constant, contents); end
439
+ sig { params(gem: Tapioca::Gemfile::Gem).void }
440
+ def compile_gem_rbi(gem); end
441
+ sig { returns(Tapioca::Compilers::SymbolTableCompiler) }
442
+ def compiler; end
443
+ sig { params(constant_names: T::Array[String]).returns(T::Array[Module]) }
444
+ def constantize(constant_names); end
445
+ sig { params(gem_name: String).returns(Pathname) }
446
+ def existing_rbi(gem_name); end
447
+ sig { returns(T::Hash[String, String]) }
448
+ def existing_rbis; end
449
+ sig { params(gem_name: String).returns(Pathname) }
450
+ def expected_rbi(gem_name); end
451
+ sig { returns(T::Hash[String, String]) }
452
+ def expected_rbis; end
453
+ sig { params(file: String, error: LoadError).void }
454
+ def explain_failed_require(file, error); end
455
+ sig { params(gem_name: String).returns(T::Boolean) }
456
+ def gem_rbi_exists?(gem_name); end
457
+ sig { params(gem_name: String, version: String).returns(Pathname) }
458
+ def gem_rbi_filename(gem_name, version); end
459
+ sig { params(gem_names: T::Array[String]).returns(T::Array[Tapioca::Gemfile::Gem]) }
460
+ def gems_to_generate(gem_names); end
461
+ sig { params(eager_load: T::Boolean).void }
462
+ def load_application(eager_load:); end
463
+ sig { void }
464
+ def load_dsl_generators; end
465
+ sig { returns(Tapioca::Loader) }
466
+ def loader; end
467
+ sig { params(old_filename: Pathname, new_filename: Pathname).void }
468
+ def move(old_filename, new_filename); end
469
+ sig { void }
470
+ def perform_additions; end
471
+ sig { void }
472
+ def perform_removals; end
473
+ sig { params(command: String, reason: T.nilable(String), strictness: T.nilable(String)).returns(String) }
474
+ def rbi_header(command, reason: T.unsafe(nil), strictness: T.unsafe(nil)); end
475
+ sig { params(filename: Pathname).void }
476
+ def remove(filename); end
477
+ sig { returns(T::Array[String]) }
478
+ def removed_rbis; end
479
+ sig { void }
480
+ def require_gem_file; end
481
+ sig { params(message: String, color: T.any(Symbol, T::Array[Symbol])).void }
482
+ def say_error(message = T.unsafe(nil), *color); end
483
+ end
484
+
485
+ Tapioca::Generator::EMPTY_RBI_COMMENT = T.let(T.unsafe(nil), String)
486
+
487
+ class Tapioca::Loader
488
+ sig { params(gemfile: Tapioca::Gemfile).void }
489
+ def initialize(gemfile); end
490
+
491
+ sig { params(initialize_file: T.nilable(String), require_file: T.nilable(String)).void }
492
+ def load_bundle(initialize_file, require_file); end
493
+ sig { params(environment_load: T::Boolean, eager_load: T::Boolean).void }
494
+ def load_rails(environment_load: T.unsafe(nil), eager_load: T.unsafe(nil)); end
495
+
496
+ private
497
+
498
+ sig { void }
499
+ def eager_load_rails_app; end
500
+ sig { returns(Tapioca::Gemfile) }
501
+ def gemfile; end
502
+ sig { void }
503
+ def load_rails_engines; end
504
+ sig { void }
505
+ def load_rake; end
506
+ sig { returns(T::Array[T.untyped]) }
507
+ def rails_engines; end
508
+ sig { void }
509
+ def require_bundle; end
510
+ sig { params(file: T.nilable(String)).void }
511
+ def require_helper(file); end
512
+ sig { params(path: String).void }
513
+ def safe_require(path); end
514
+ sig { void }
515
+ def silence_deprecations; end
516
+ end
517
+
518
+ Tapioca::VERSION = T.let(T.unsafe(nil), String)