packwerk 3.2.3 → 3.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. checksums.yaml +4 -4
  2. data/exe/packwerk +0 -4
  3. data/lib/packwerk/application_validator.rb +11 -10
  4. data/lib/packwerk/association_inspector.rb +21 -32
  5. data/lib/packwerk/cache.rb +43 -36
  6. data/lib/packwerk/checker.rb +24 -26
  7. data/lib/packwerk/cli.rb +13 -20
  8. data/lib/packwerk/commands/base_command.rb +20 -26
  9. data/lib/packwerk/commands/check_command.rb +8 -8
  10. data/lib/packwerk/commands/help_command.rb +3 -4
  11. data/lib/packwerk/commands/init_command.rb +2 -3
  12. data/lib/packwerk/commands/lazy_loaded_entry.rb +5 -7
  13. data/lib/packwerk/commands/update_todo_command.rb +3 -3
  14. data/lib/packwerk/commands/uses_parse_run.rb +20 -26
  15. data/lib/packwerk/commands/validate_command.rb +6 -7
  16. data/lib/packwerk/commands/version_command.rb +2 -3
  17. data/lib/packwerk/commands.rb +5 -8
  18. data/lib/packwerk/configuration.rb +29 -43
  19. data/lib/packwerk/const_node_inspector.rb +11 -15
  20. data/lib/packwerk/constant_context.rb +0 -2
  21. data/lib/packwerk/constant_discovery.rb +3 -16
  22. data/lib/packwerk/constant_name_inspector.rb +4 -11
  23. data/lib/packwerk/extension_loader.rb +1 -2
  24. data/lib/packwerk/file_processor.rb +20 -25
  25. data/lib/packwerk/files_for_processing.rb +13 -29
  26. data/lib/packwerk/formatters/default_offenses_formatter.rb +14 -12
  27. data/lib/packwerk/formatters/progress_formatter.rb +10 -12
  28. data/lib/packwerk/generators/configuration_file.rb +5 -9
  29. data/lib/packwerk/generators/root_package.rb +3 -7
  30. data/lib/packwerk/graph.rb +1 -7
  31. data/lib/packwerk/node_helpers.rb +32 -38
  32. data/lib/packwerk/node_processor.rb +2 -14
  33. data/lib/packwerk/node_processor_factory.rb +13 -7
  34. data/lib/packwerk/node_visitor.rb +2 -10
  35. data/lib/packwerk/offense.rb +6 -12
  36. data/lib/packwerk/offense_collection.rb +22 -35
  37. data/lib/packwerk/offenses_formatter.rb +27 -34
  38. data/lib/packwerk/output_style.rb +10 -11
  39. data/lib/packwerk/output_styles/coloured.rb +6 -4
  40. data/lib/packwerk/output_styles/plain.rb +6 -4
  41. data/lib/packwerk/package.rb +15 -16
  42. data/lib/packwerk/package_set.rb +15 -25
  43. data/lib/packwerk/package_todo.rb +21 -30
  44. data/lib/packwerk/parse_run.rb +10 -37
  45. data/lib/packwerk/parsed_constant_definitions.rb +10 -24
  46. data/lib/packwerk/parsers/erb.rb +11 -22
  47. data/lib/packwerk/parsers/factory.rb +9 -9
  48. data/lib/packwerk/parsers/parser_interface.rb +5 -10
  49. data/lib/packwerk/parsers/ruby.rb +9 -14
  50. data/lib/packwerk/parsers.rb +2 -4
  51. data/lib/packwerk/rails_load_paths.rb +6 -11
  52. data/lib/packwerk/reference_checking/checkers/dependency_checker.rb +10 -15
  53. data/lib/packwerk/reference_checking/reference_checker.rb +2 -8
  54. data/lib/packwerk/reference_extractor.rb +22 -55
  55. data/lib/packwerk/reference_offense.rb +5 -15
  56. data/lib/packwerk/run_context.rb +28 -39
  57. data/lib/packwerk/spring_command.rb +4 -7
  58. data/lib/packwerk/validator/result.rb +12 -5
  59. data/lib/packwerk/validator.rb +23 -33
  60. data/lib/packwerk/validators/dependency_validator.rb +9 -10
  61. data/lib/packwerk/version.rb +1 -1
  62. data/lib/packwerk.rb +0 -1
  63. metadata +15 -76
  64. data/lib/packwerk/disable_sorbet.rb +0 -41
  65. data/sorbet/config +0 -4
  66. data/sorbet/rbi/gems/actionpack@7.0.8.7.rbi +0 -19338
  67. data/sorbet/rbi/gems/actionview@7.0.8.7.rbi +0 -15492
  68. data/sorbet/rbi/gems/activesupport@7.0.8.7.rbi +0 -18283
  69. data/sorbet/rbi/gems/ast@2.4.2.rbi +0 -584
  70. data/sorbet/rbi/gems/better_html@2.1.1.rbi +0 -529
  71. data/sorbet/rbi/gems/builder@3.3.0.rbi +0 -8
  72. data/sorbet/rbi/gems/byebug@11.1.3.rbi +0 -36
  73. data/sorbet/rbi/gems/concurrent-ruby@1.3.5.rbi +0 -11656
  74. data/sorbet/rbi/gems/constant_resolver@0.3.0.rbi +0 -99
  75. data/sorbet/rbi/gems/crass@1.0.6.rbi +0 -622
  76. data/sorbet/rbi/gems/erubi@1.13.1.rbi +0 -154
  77. data/sorbet/rbi/gems/i18n@1.14.7.rbi +0 -2358
  78. data/sorbet/rbi/gems/json@2.7.2.rbi +0 -1561
  79. data/sorbet/rbi/gems/language_server-protocol@3.17.0.3.rbi +0 -14237
  80. data/sorbet/rbi/gems/loofah@2.24.0.rbi +0 -1104
  81. data/sorbet/rbi/gems/m@1.6.0.rbi +0 -257
  82. data/sorbet/rbi/gems/method_source@1.1.0.rbi +0 -303
  83. data/sorbet/rbi/gems/minitest-focus@1.3.1.rbi +0 -98
  84. data/sorbet/rbi/gems/minitest@5.25.4.rbi +0 -2229
  85. data/sorbet/rbi/gems/mocha@2.5.0.rbi +0 -3961
  86. data/sorbet/rbi/gems/netrc@0.11.0.rbi +0 -158
  87. data/sorbet/rbi/gems/nokogiri@1.18.4.rbi +0 -8204
  88. data/sorbet/rbi/gems/parallel@1.25.1.rbi +0 -286
  89. data/sorbet/rbi/gems/parser@3.3.3.0.rbi +0 -7320
  90. data/sorbet/rbi/gems/prism@0.27.0.rbi +0 -36983
  91. data/sorbet/rbi/gems/racc@1.8.1.rbi +0 -161
  92. data/sorbet/rbi/gems/rack-test@2.2.0.rbi +0 -736
  93. data/sorbet/rbi/gems/rack@2.2.13.rbi +0 -5633
  94. data/sorbet/rbi/gems/rails-dom-testing@2.2.0.rbi +0 -754
  95. data/sorbet/rbi/gems/rails-html-sanitizer@1.6.2.rbi +0 -764
  96. data/sorbet/rbi/gems/railties@7.0.8.7.rbi +0 -3517
  97. data/sorbet/rbi/gems/rainbow@3.1.1.rbi +0 -402
  98. data/sorbet/rbi/gems/rake@13.0.6.rbi +0 -3039
  99. data/sorbet/rbi/gems/rbi@0.1.12.rbi +0 -3071
  100. data/sorbet/rbi/gems/regexp_parser@2.9.2.rbi +0 -3771
  101. data/sorbet/rbi/gems/rexml@3.3.9.rbi +0 -4857
  102. data/sorbet/rbi/gems/rubocop-ast@1.31.3.rbi +0 -7089
  103. data/sorbet/rbi/gems/rubocop-performance@1.14.3.rbi +0 -2967
  104. data/sorbet/rbi/gems/rubocop-shopify@2.9.0.rbi +0 -8
  105. data/sorbet/rbi/gems/rubocop-sorbet@0.6.11.rbi +0 -975
  106. data/sorbet/rbi/gems/rubocop@1.64.1.rbi +0 -58089
  107. data/sorbet/rbi/gems/ruby-progressbar@1.13.0.rbi +0 -1317
  108. data/sorbet/rbi/gems/ruby2_keywords@0.0.5.rbi +0 -8
  109. data/sorbet/rbi/gems/smart_properties@1.17.0.rbi +0 -474
  110. data/sorbet/rbi/gems/spoom@1.3.2.rbi +0 -4420
  111. data/sorbet/rbi/gems/spring@4.0.0.rbi +0 -411
  112. data/sorbet/rbi/gems/tapioca@0.13.3.rbi +0 -3524
  113. data/sorbet/rbi/gems/thor@1.3.1.rbi +0 -4351
  114. data/sorbet/rbi/gems/tzinfo@2.0.6.rbi +0 -5917
  115. data/sorbet/rbi/gems/unicode-display_width@2.5.0.rbi +0 -65
  116. data/sorbet/rbi/gems/yard-sorbet@0.8.1.rbi +0 -428
  117. data/sorbet/rbi/gems/yard@0.9.36.rbi +0 -18333
  118. data/sorbet/rbi/gems/zeitwerk@2.6.4.rbi +0 -934
  119. data/sorbet/rbi/shims/minitest/test.rb +0 -8
  120. data/sorbet/rbi/shims/packwerk/reference.rbi +0 -33
  121. data/sorbet/rbi/shims/packwerk/unresolved_reference.rbi +0 -33
  122. data/sorbet/rbi/shims/parser.rbi +0 -13
  123. data/sorbet/rbi/shims/psych.rbi +0 -5
  124. data/sorbet/tapioca/require.rb +0 -25
@@ -1,934 +0,0 @@
1
- # typed: true
2
-
3
- # DO NOT EDIT MANUALLY
4
- # This is an autogenerated file for types exported from the `zeitwerk` gem.
5
- # Please instead update this file by running `bin/tapioca gem zeitwerk`.
6
-
7
- # source://zeitwerk//lib/zeitwerk/kernel.rb#3
8
- module Kernel
9
- private
10
-
11
- # source://zeitwerk//lib/zeitwerk/kernel.rb#27
12
- def require(path); end
13
-
14
- class << self
15
- # source://zeitwerk//lib/zeitwerk/kernel.rb#27
16
- def require(path); end
17
- end
18
- end
19
-
20
- # source://zeitwerk//lib/zeitwerk.rb#3
21
- module Zeitwerk
22
- class << self
23
- # This is a dangerous method.
24
- #
25
- # source://zeitwerk//lib/zeitwerk.rb#20
26
- def with_loader; end
27
- end
28
- end
29
-
30
- # source://zeitwerk//lib/zeitwerk/error.rb#4
31
- class Zeitwerk::Error < ::StandardError; end
32
-
33
- # Centralizes the logic for the trace point used to detect the creation of
34
- # explicit namespaces, needed to descend into matching subdirectories right
35
- # after the constant has been defined.
36
- #
37
- # The implementation assumes an explicit namespace is managed by one loader.
38
- # Loaders that reopen namespaces owned by other projects are responsible for
39
- # loading their constant before setup. This is documented.
40
- #
41
- # source://zeitwerk//lib/zeitwerk/explicit_namespace.rb#11
42
- module Zeitwerk::ExplicitNamespace
43
- extend ::Zeitwerk::RealModName
44
-
45
- class << self
46
- # Maps constant paths that correspond to explicit namespaces according to
47
- # the file system, to the loader responsible for them.
48
- #
49
- # @private
50
- #
51
- # source://zeitwerk//lib/zeitwerk/explicit_namespace.rb#20
52
- def cpaths; end
53
-
54
- # @private
55
- #
56
- # source://zeitwerk//lib/zeitwerk/explicit_namespace.rb#24
57
- def mutex; end
58
-
59
- # Asserts `cpath` corresponds to an explicit namespace for which `loader`
60
- # is responsible.
61
- #
62
- # @private
63
- #
64
- # source://zeitwerk//lib/zeitwerk/explicit_namespace.rb#35
65
- def register(cpath, loader); end
66
-
67
- # @private
68
- #
69
- # source://zeitwerk//lib/zeitwerk/explicit_namespace.rb#28
70
- def tracer; end
71
-
72
- # @private
73
- #
74
- # source://zeitwerk//lib/zeitwerk/explicit_namespace.rb#46
75
- def unregister_loader(loader); end
76
-
77
- private
78
-
79
- # source://zeitwerk//lib/zeitwerk/explicit_namespace.rb#54
80
- def disable_tracer_if_unneeded; end
81
-
82
- # source://zeitwerk//lib/zeitwerk/explicit_namespace.rb#61
83
- def tracepoint_class_callback(event); end
84
- end
85
- end
86
-
87
- # source://zeitwerk//lib/zeitwerk/gem_inflector.rb#4
88
- class Zeitwerk::GemInflector < ::Zeitwerk::Inflector
89
- # @return [GemInflector] a new instance of GemInflector
90
- #
91
- # source://zeitwerk//lib/zeitwerk/gem_inflector.rb#6
92
- def initialize(root_file); end
93
-
94
- # source://zeitwerk//lib/zeitwerk/gem_inflector.rb#13
95
- def camelize(basename, abspath); end
96
- end
97
-
98
- # @private
99
- #
100
- # source://zeitwerk//lib/zeitwerk/gem_loader.rb#5
101
- class Zeitwerk::GemLoader < ::Zeitwerk::Loader
102
- # @return [GemLoader] a new instance of GemLoader
103
- #
104
- # source://zeitwerk//lib/zeitwerk/gem_loader.rb#17
105
- def initialize(root_file, warn_on_extra_files:); end
106
-
107
- # source://zeitwerk//lib/zeitwerk/gem_loader.rb#30
108
- def setup; end
109
-
110
- private
111
-
112
- # source://zeitwerk//lib/zeitwerk/gem_loader.rb#38
113
- def warn_on_extra_files; end
114
-
115
- class << self
116
- # @private
117
- #
118
- # source://zeitwerk//lib/zeitwerk/gem_loader.rb#12
119
- def _new(root_file, warn_on_extra_files:); end
120
-
121
- private
122
-
123
- def new(*_arg0); end
124
- end
125
- end
126
-
127
- # source://zeitwerk//lib/zeitwerk/inflector.rb#4
128
- class Zeitwerk::Inflector
129
- # Very basic snake case -> camel case conversion.
130
- #
131
- # inflector = Zeitwerk::Inflector.new
132
- # inflector.camelize("post", ...) # => "Post"
133
- # inflector.camelize("users_controller", ...) # => "UsersController"
134
- # inflector.camelize("api", ...) # => "Api"
135
- #
136
- # Takes into account hard-coded mappings configured with `inflect`.
137
- #
138
- # source://zeitwerk//lib/zeitwerk/inflector.rb#15
139
- def camelize(basename, _abspath); end
140
-
141
- # Configures hard-coded inflections:
142
- #
143
- # inflector = Zeitwerk::Inflector.new
144
- # inflector.inflect(
145
- # "html_parser" => "HTMLParser",
146
- # "mysql_adapter" => "MySQLAdapter"
147
- # )
148
- #
149
- # inflector.camelize("html_parser", abspath) # => "HTMLParser"
150
- # inflector.camelize("mysql_adapter", abspath) # => "MySQLAdapter"
151
- # inflector.camelize("users_controller", abspath) # => "UsersController"
152
- #
153
- # source://zeitwerk//lib/zeitwerk/inflector.rb#32
154
- def inflect(inflections); end
155
-
156
- private
157
-
158
- # Hard-coded basename to constant name user maps that override the default
159
- # inflection logic.
160
- #
161
- # source://zeitwerk//lib/zeitwerk/inflector.rb#42
162
- def overrides; end
163
- end
164
-
165
- # This is a private module.
166
- #
167
- # source://zeitwerk//lib/zeitwerk/internal.rb#4
168
- module Zeitwerk::Internal
169
- # source://zeitwerk//lib/zeitwerk/internal.rb#5
170
- def internal(method_name); end
171
- end
172
-
173
- # source://zeitwerk//lib/zeitwerk/loader.rb#6
174
- class Zeitwerk::Loader
175
- include ::Zeitwerk::RealModName
176
- include ::Zeitwerk::Loader::Callbacks
177
- include ::Zeitwerk::Loader::Helpers
178
- include ::Zeitwerk::Loader::Config
179
- include ::Zeitwerk::Loader::EagerLoad
180
-
181
- # @return [Loader] a new instance of Loader
182
- #
183
- # source://zeitwerk//lib/zeitwerk/loader.rb#96
184
- def initialize; end
185
-
186
- # We keep track of autoloaded directories to remove them from the registry
187
- # at the end of eager loading.
188
- #
189
- # Files are removed as they are autoloaded, but directories need to wait due
190
- # to concurrency (see why in Zeitwerk::Loader::Callbacks#on_dir_autoloaded).
191
- #
192
- # @private
193
- #
194
- # source://zeitwerk//lib/zeitwerk/loader.rb#41
195
- def autoloaded_dirs; end
196
-
197
- # Maps absolute paths for which an autoload has been set ---and not
198
- # executed--- to their corresponding parent class or module and constant
199
- # name.
200
- #
201
- # "/Users/fxn/blog/app/models/user.rb" => [Object, :User],
202
- # "/Users/fxn/blog/app/models/hotel/pricing.rb" => [Hotel, :Pricing]
203
- # ...
204
- #
205
- # @private
206
- #
207
- # source://zeitwerk//lib/zeitwerk/loader.rb#31
208
- def autoloads; end
209
-
210
- # @private
211
- #
212
- # source://zeitwerk//lib/zeitwerk/loader.rb#90
213
- def mutex; end
214
-
215
- # @private
216
- #
217
- # source://zeitwerk//lib/zeitwerk/loader.rb#94
218
- def mutex2; end
219
-
220
- # Maps namespace constant paths to their respective directories.
221
- #
222
- # For example, given this mapping:
223
- #
224
- # "Admin" => [
225
- # "/Users/fxn/blog/app/controllers/admin",
226
- # "/Users/fxn/blog/app/models/admin",
227
- # ...
228
- # ]
229
- #
230
- # when `Admin` gets defined we know that it plays the role of a namespace
231
- # and that its children are spread over those directories. We'll visit them
232
- # to set up the corresponding autoloads.
233
- #
234
- # @private
235
- #
236
- # source://zeitwerk//lib/zeitwerk/loader.rb#75
237
- def namespace_dirs; end
238
-
239
- # Unloads all loaded code, and calls setup again so that the loader is able
240
- # to pick any changes in the file system.
241
- #
242
- # This method is not thread-safe, please see how this can be achieved by
243
- # client code in the README of the project.
244
- #
245
- # @raise [Zeitwerk::Error]
246
- #
247
- # source://zeitwerk//lib/zeitwerk/loader.rb#217
248
- def reload; end
249
-
250
- # Sets autoloads in the root namespace.
251
- #
252
- # source://zeitwerk//lib/zeitwerk/loader.rb#115
253
- def setup; end
254
-
255
- # The return value of this predicate is only meaningful if the loader has
256
- # scanned the file. This is the case in the spots where we use it.
257
- #
258
- # @private
259
- # @return [Boolean]
260
- #
261
- # source://zeitwerk//lib/zeitwerk/loader.rb#256
262
- def shadowed_file?(file); end
263
-
264
- # A shadowed file is a file managed by this loader that is ignored when
265
- # setting autoloads because its matching constant is already taken.
266
- #
267
- # This private set is populated as we descend. For example, if the loader
268
- # has only scanned the top-level, `shadowed_files` does not have shadowed
269
- # files that may exist deep in the project tree yet.
270
- #
271
- # @private
272
- #
273
- # source://zeitwerk//lib/zeitwerk/loader.rb#86
274
- def shadowed_files; end
275
-
276
- # Stores metadata needed for unloading. Its entries look like this:
277
- #
278
- # "Admin::Role" => [".../admin/role.rb", [Admin, :Role]]
279
- #
280
- # The cpath as key helps implementing unloadable_cpath? The file name is
281
- # stored in order to be able to delete it from $LOADED_FEATURES, and the
282
- # pair [Module, Symbol] is used to remove_const the constant from the class
283
- # or module object.
284
- #
285
- # If reloading is enabled, this hash is filled as constants are autoloaded
286
- # or eager loaded. Otherwise, the collection remains empty.
287
- #
288
- # @private
289
- #
290
- # source://zeitwerk//lib/zeitwerk/loader.rb#57
291
- def to_unload; end
292
-
293
- # Removes loaded constants and configured autoloads.
294
- #
295
- # The objects the constants stored are no longer reachable through them. In
296
- # addition, since said objects are normally not referenced from anywhere
297
- # else, they are eligible for garbage collection, which would effectively
298
- # unload them.
299
- #
300
- # This method is public but undocumented. Main interface is `reload`, which
301
- # means `unload` + `setup`. This one is avaiable to be used together with
302
- # `unregister`, which is undocumented too.
303
- #
304
- # source://zeitwerk//lib/zeitwerk/loader.rb#141
305
- def unload; end
306
-
307
- # Says if the given constant path would be unloaded on reload. This
308
- # predicate returns `false` if reloading is disabled.
309
- #
310
- # @return [Boolean]
311
- #
312
- # source://zeitwerk//lib/zeitwerk/loader.rb#230
313
- def unloadable_cpath?(cpath); end
314
-
315
- # Returns an array with the constant paths that would be unloaded on reload.
316
- # This predicate returns an empty array if reloading is disabled.
317
- #
318
- # source://zeitwerk//lib/zeitwerk/loader.rb#238
319
- def unloadable_cpaths; end
320
-
321
- # This is a dangerous method.
322
- #
323
- # source://zeitwerk//lib/zeitwerk/loader.rb#246
324
- def unregister; end
325
-
326
- private
327
-
328
- # source://zeitwerk//lib/zeitwerk/loader.rb#370
329
- def autoload_file(parent, cname, file); end
330
-
331
- # @return [Boolean]
332
- #
333
- # source://zeitwerk//lib/zeitwerk/loader.rb#428
334
- def autoload_path_set_by_me_for?(parent, cname); end
335
-
336
- # source://zeitwerk//lib/zeitwerk/loader.rb#349
337
- def autoload_subdir(parent, cname, subdir); end
338
-
339
- # `dir` is the directory that would have autovivified a namespace. `file` is
340
- # the file where we've found the namespace is explicitly defined.
341
- #
342
- # source://zeitwerk//lib/zeitwerk/loader.rb#396
343
- def promote_namespace_from_implicit_to_explicit(dir:, file:, parent:, cname:); end
344
-
345
- # source://zeitwerk//lib/zeitwerk/loader.rb#442
346
- def raise_if_conflicting_directory(dir); end
347
-
348
- # source://zeitwerk//lib/zeitwerk/loader.rb#437
349
- def register_explicit_namespace(cpath); end
350
-
351
- # source://zeitwerk//lib/zeitwerk/loader.rb#467
352
- def run_on_unload_callbacks(cpath, value, abspath); end
353
-
354
- # source://zeitwerk//lib/zeitwerk/loader.rb#407
355
- def set_autoload(parent, cname, abspath); end
356
-
357
- # source://zeitwerk//lib/zeitwerk/loader.rb#314
358
- def set_autoloads_in_dir(dir, parent); end
359
-
360
- # source://zeitwerk//lib/zeitwerk/loader.rb#474
361
- def unload_autoload(parent, cname); end
362
-
363
- # source://zeitwerk//lib/zeitwerk/loader.rb#480
364
- def unload_cref(parent, cname); end
365
-
366
- class << self
367
- # Returns an array with the absolute paths of the root directories of all
368
- # registered loaders. This is a read-only collection.
369
- #
370
- # source://zeitwerk//lib/zeitwerk/loader.rb#306
371
- def all_dirs; end
372
-
373
- # Returns the value of attribute default_logger.
374
- #
375
- # source://zeitwerk//lib/zeitwerk/loader.rb#264
376
- def default_logger; end
377
-
378
- # Sets the attribute default_logger
379
- #
380
- # @param value the value to set the attribute default_logger to.
381
- #
382
- # source://zeitwerk//lib/zeitwerk/loader.rb#264
383
- def default_logger=(_arg0); end
384
-
385
- # Broadcasts `eager_load` to all loaders.
386
- #
387
- # source://zeitwerk//lib/zeitwerk/loader.rb#289
388
- def eager_load_all; end
389
-
390
- # Broadcasts `eager_load_namespace` to all loaders.
391
- #
392
- # source://zeitwerk//lib/zeitwerk/loader.rb#296
393
- def eager_load_namespace(mod); end
394
-
395
- # This is a shortcut for
396
- #
397
- # require "zeitwerk"
398
- # loader = Zeitwerk::Loader.new
399
- # loader.tag = File.basename(__FILE__, ".rb")
400
- # loader.inflector = Zeitwerk::GemInflector.new(__FILE__)
401
- # loader.push_dir(__dir__)
402
- #
403
- # except that this method returns the same object in subsequent calls from
404
- # the same file, in the unlikely case the gem wants to be able to reload.
405
- #
406
- # This method returns a subclass of Zeitwerk::Loader, but the exact type
407
- # is private, client code can only rely on the interface.
408
- #
409
- # source://zeitwerk//lib/zeitwerk/loader.rb#281
410
- def for_gem(warn_on_extra_files: T.unsafe(nil)); end
411
- end
412
- end
413
-
414
- # source://zeitwerk//lib/zeitwerk/loader/callbacks.rb#3
415
- module Zeitwerk::Loader::Callbacks
416
- include ::Zeitwerk::RealModName
417
-
418
- # Invoked from our decorated Kernel#require when a managed directory is
419
- # autoloaded.
420
- #
421
- # @private
422
- #
423
- # source://zeitwerk//lib/zeitwerk/loader/callbacks.rb#34
424
- def on_dir_autoloaded(dir); end
425
-
426
- # Invoked from our decorated Kernel#require when a managed file is autoloaded.
427
- #
428
- # @private
429
- #
430
- # source://zeitwerk//lib/zeitwerk/loader/callbacks.rb#10
431
- def on_file_autoloaded(file); end
432
-
433
- # Invoked when a class or module is created or reopened, either from the
434
- # tracer or from module autovivification. If the namespace has matching
435
- # subdirectories, we descend into them now.
436
- #
437
- # @private
438
- #
439
- # source://zeitwerk//lib/zeitwerk/loader/callbacks.rb#73
440
- def on_namespace_loaded(namespace); end
441
-
442
- private
443
-
444
- # source://zeitwerk//lib/zeitwerk/loader/callbacks.rb#84
445
- def run_on_load_callbacks(cpath, value, abspath); end
446
- end
447
-
448
- # source://zeitwerk//lib/zeitwerk/loader/config.rb#6
449
- module Zeitwerk::Loader::Config
450
- extend ::Zeitwerk::Internal
451
-
452
- # source://zeitwerk//lib/zeitwerk/loader/config.rb#84
453
- def initialize; end
454
-
455
- # source://zeitwerk//lib/zeitwerk/loader/config.rb#281
456
- def __ignores?(abspath); end
457
-
458
- def __roots; end
459
-
460
- # Configure directories or glob patterns to be collapsed.
461
- #
462
- # source://zeitwerk//lib/zeitwerk/loader/config.rb#201
463
- def collapse(*glob_patterns); end
464
-
465
- # If `namespaces` is falsey (default), returns an array with the absolute
466
- # paths of the root directories as strings. If truthy, returns a hash table
467
- # instead. Keys are the absolute paths of the root directories as strings,
468
- # values are their corresponding namespaces, class or module objects.
469
- #
470
- # These are read-only collections, please add to them with `push_dir`.
471
- #
472
- # source://zeitwerk//lib/zeitwerk/loader/config.rb#149
473
- def dirs(namespaces: T.unsafe(nil)); end
474
-
475
- # Let eager load ignore the given files or directories. The constants defined
476
- # in those files are still autoloadable.
477
- #
478
- # source://zeitwerk//lib/zeitwerk/loader/config.rb#183
479
- def do_not_eager_load(*paths); end
480
-
481
- # You need to call this method before setup in order to be able to reload.
482
- # There is no way to undo this, either you want to reload or you don't.
483
- #
484
- # @raise [Zeitwerk::Error]
485
- #
486
- # source://zeitwerk//lib/zeitwerk/loader/config.rb#162
487
- def enable_reloading; end
488
-
489
- # Configure files, directories, or glob patterns to be totally ignored.
490
- #
491
- # source://zeitwerk//lib/zeitwerk/loader/config.rb#190
492
- def ignore(*glob_patterns); end
493
-
494
- # Returns the value of attribute inflector.
495
- #
496
- # source://zeitwerk//lib/zeitwerk/loader/config.rb#10
497
- def inflector; end
498
-
499
- # Sets the attribute inflector
500
- #
501
- # @param value the value to set the attribute inflector to.
502
- #
503
- # source://zeitwerk//lib/zeitwerk/loader/config.rb#10
504
- def inflector=(_arg0); end
505
-
506
- # Logs to `$stdout`, handy shortcut for debugging.
507
- #
508
- # source://zeitwerk//lib/zeitwerk/loader/config.rb#273
509
- def log!; end
510
-
511
- # Returns the value of attribute logger.
512
- #
513
- # source://zeitwerk//lib/zeitwerk/loader/config.rb#13
514
- def logger; end
515
-
516
- # Sets the attribute logger
517
- #
518
- # @param value the value to set the attribute logger to.
519
- #
520
- # source://zeitwerk//lib/zeitwerk/loader/config.rb#13
521
- def logger=(_arg0); end
522
-
523
- # Configure a block to be invoked once a certain constant path is loaded.
524
- # Supports multiple callbacks, and if there are many, they are executed in
525
- # the order in which they were defined.
526
- #
527
- # loader.on_load("SomeApiClient") do |klass, _abspath|
528
- # klass.endpoint = "https://api.dev"
529
- # end
530
- #
531
- # Can also be configured for any constant loaded:
532
- #
533
- # loader.on_load do |cpath, value, abspath|
534
- # # ...
535
- # end
536
- #
537
- # @raise [TypeError]
538
- #
539
- # source://zeitwerk//lib/zeitwerk/loader/config.rb#237
540
- def on_load(cpath = T.unsafe(nil), &block); end
541
-
542
- # Configure a block to be called after setup and on each reload.
543
- # If setup was already done, the block runs immediately.
544
- #
545
- # source://zeitwerk//lib/zeitwerk/loader/config.rb#213
546
- def on_setup(&block); end
547
-
548
- # Configure a block to be invoked right before a certain constant is removed.
549
- # Supports multiple callbacks, and if there are many, they are executed in the
550
- # order in which they were defined.
551
- #
552
- # loader.on_unload("Country") do |klass, _abspath|
553
- # klass.clear_cache
554
- # end
555
- #
556
- # Can also be configured for any removed constant:
557
- #
558
- # loader.on_unload do |cpath, value, abspath|
559
- # # ...
560
- # end
561
- #
562
- # @raise [TypeError]
563
- #
564
- # source://zeitwerk//lib/zeitwerk/loader/config.rb#262
565
- def on_unload(cpath = T.unsafe(nil), &block); end
566
-
567
- # Pushes `path` to the list of root directories.
568
- #
569
- # Raises `Zeitwerk::Error` if `path` does not exist, or if another loader in
570
- # the same process already manages that directory or one of its ascendants or
571
- # descendants.
572
- #
573
- # @raise [Zeitwerk::Error]
574
- #
575
- # source://zeitwerk//lib/zeitwerk/loader/config.rb#109
576
- def push_dir(path, namespace: T.unsafe(nil)); end
577
-
578
- # @return [Boolean]
579
- #
580
- # source://zeitwerk//lib/zeitwerk/loader/config.rb#175
581
- def reloading_enabled?; end
582
-
583
- # Returns the loader's tag.
584
- #
585
- # Implemented as a method instead of via attr_reader for symmetry with the
586
- # writer below.
587
- #
588
- # source://zeitwerk//lib/zeitwerk/loader/config.rb#130
589
- def tag; end
590
-
591
- # Sets a tag for the loader, useful for logging.
592
- #
593
- # source://zeitwerk//lib/zeitwerk/loader/config.rb#137
594
- def tag=(tag); end
595
-
596
- private
597
-
598
- # source://zeitwerk//lib/zeitwerk/loader/config.rb#294
599
- def actual_roots; end
600
-
601
- # @return [Boolean]
602
- #
603
- # source://zeitwerk//lib/zeitwerk/loader/config.rb#319
604
- def collapse?(dir); end
605
-
606
- # The actual collection of absolute directory names at the time the collapse
607
- # glob patterns were expanded. Computed on setup, and recomputed on reload.
608
- #
609
- # source://zeitwerk//lib/zeitwerk/loader/config.rb#55
610
- def collapse_dirs; end
611
-
612
- # Absolute paths of directories or glob patterns to be collapsed.
613
- #
614
- # source://zeitwerk//lib/zeitwerk/loader/config.rb#48
615
- def collapse_glob_patterns; end
616
-
617
- # Absolute paths of files or directories not to be eager loaded.
618
- #
619
- # source://zeitwerk//lib/zeitwerk/loader/config.rb#61
620
- def eager_load_exclusions; end
621
-
622
- # @return [Boolean]
623
- #
624
- # source://zeitwerk//lib/zeitwerk/loader/config.rb#306
625
- def excluded_from_eager_load?(abspath); end
626
-
627
- # source://zeitwerk//lib/zeitwerk/loader/config.rb#329
628
- def expand_glob_patterns(glob_patterns); end
629
-
630
- # source://zeitwerk//lib/zeitwerk/loader/config.rb#324
631
- def expand_paths(paths); end
632
-
633
- # Absolute paths of files, directories, or glob patterns to be totally
634
- # ignored.
635
- #
636
- # source://zeitwerk//lib/zeitwerk/loader/config.rb#34
637
- def ignored_glob_patterns; end
638
-
639
- # The actual collection of absolute file and directory names at the time the
640
- # ignored glob patterns were expanded. Computed on setup, and recomputed on
641
- # reload.
642
- #
643
- # source://zeitwerk//lib/zeitwerk/loader/config.rb#42
644
- def ignored_paths; end
645
-
646
- # source://zeitwerk//lib/zeitwerk/loader/config.rb#281
647
- def ignores?(abspath); end
648
-
649
- # User-oriented callbacks to be fired when a constant is loaded.
650
- #
651
- # source://zeitwerk//lib/zeitwerk/loader/config.rb#74
652
- def on_load_callbacks; end
653
-
654
- # User-oriented callbacks to be fired on setup and on reload.
655
- #
656
- # source://zeitwerk//lib/zeitwerk/loader/config.rb#67
657
- def on_setup_callbacks; end
658
-
659
- # User-oriented callbacks to be fired before constants are removed.
660
- #
661
- # source://zeitwerk//lib/zeitwerk/loader/config.rb#81
662
- def on_unload_callbacks; end
663
-
664
- # source://zeitwerk//lib/zeitwerk/loader/config.rb#341
665
- def recompute_collapse_dirs; end
666
-
667
- # source://zeitwerk//lib/zeitwerk/loader/config.rb#336
668
- def recompute_ignored_paths; end
669
-
670
- # @return [Boolean]
671
- #
672
- # source://zeitwerk//lib/zeitwerk/loader/config.rb#301
673
- def root_dir?(dir); end
674
-
675
- # Absolute paths of the root directories. Stored in a hash to preserve order,
676
- # easily handle duplicates, have a fast lookup needed for detecting nested
677
- # paths, and store namespaces as values.
678
- #
679
- # "/Users/fxn/blog/app/channels" => Object,
680
- # "/Users/fxn/blog/app/adapters" => ActiveJob::QueueAdapters,
681
- # ...
682
- #
683
- # This is a private collection maintained by the loader. The public
684
- # interface for it is `push_dir` and `dirs`.
685
- #
686
- # source://zeitwerk//lib/zeitwerk/loader/config.rb#27
687
- def roots; end
688
- end
689
-
690
- # source://zeitwerk//lib/zeitwerk/loader/eager_load.rb#1
691
- module Zeitwerk::Loader::EagerLoad
692
- # Eager loads all files in the root directories, recursively. Files do not
693
- # need to be in `$LOAD_PATH`, absolute file names are used. Ignored and
694
- # shadowed files are not eager loaded. You can opt-out specifically in
695
- # specific files and directories with `do_not_eager_load`, and that can be
696
- # overridden passing `force: true`.
697
- #
698
- # source://zeitwerk//lib/zeitwerk/loader/eager_load.rb#9
699
- def eager_load(force: T.unsafe(nil)); end
700
-
701
- # @raise [Zeitwerk::Error]
702
- #
703
- # source://zeitwerk//lib/zeitwerk/loader/eager_load.rb#31
704
- def eager_load_dir(path); end
705
-
706
- # source://zeitwerk//lib/zeitwerk/loader/eager_load.rb#69
707
- def eager_load_namespace(mod); end
708
-
709
- # Loads the given Ruby file.
710
- #
711
- # Raises if the argument is ignored, shadowed, or not managed by the receiver.
712
- #
713
- # The method is implemented as `constantize` for files, in a sense, to be able
714
- # to descend orderly and make sure the file is loadable.
715
- #
716
- # @raise [Zeitwerk::Error]
717
- #
718
- # source://zeitwerk//lib/zeitwerk/loader/eager_load.rb#109
719
- def load_file(path); end
720
-
721
- private
722
-
723
- # The caller is responsible for making sure `namespace` is the namespace that
724
- # corresponds to `dir`.
725
- #
726
- # source://zeitwerk//lib/zeitwerk/loader/eager_load.rb#149
727
- def actual_eager_load_dir(dir, namespace, force: T.unsafe(nil)); end
728
-
729
- # In order to invoke this method, the caller has to ensure `child` is a
730
- # strict namespace descendendant of `root_namespace`.
731
- #
732
- # source://zeitwerk//lib/zeitwerk/loader/eager_load.rb#184
733
- def eager_load_child_namespace(child, child_name, root_dir, root_namespace); end
734
- end
735
-
736
- # source://zeitwerk//lib/zeitwerk/loader/helpers.rb#3
737
- module Zeitwerk::Loader::Helpers
738
- private
739
-
740
- # @return [Boolean]
741
- #
742
- # source://zeitwerk//lib/zeitwerk/loader/helpers.rb#130
743
- def cdef?(parent, cname); end
744
-
745
- # @raise [NameError]
746
- #
747
- # source://zeitwerk//lib/zeitwerk/loader/helpers.rb#136
748
- def cget(parent, cname); end
749
-
750
- # Symbol#name was introduced in Ruby 3.0. It returns always the same
751
- # frozen object, so we may save a few string allocations.
752
- #
753
- # source://zeitwerk//lib/zeitwerk/loader/helpers.rb#120
754
- def cpath(parent, cname); end
755
-
756
- # @return [Boolean]
757
- #
758
- # source://zeitwerk//lib/zeitwerk/loader/helpers.rb#69
759
- def dir?(path); end
760
-
761
- # @return [Boolean]
762
- #
763
- # source://zeitwerk//lib/zeitwerk/loader/helpers.rb#47
764
- def has_at_least_one_ruby_file?(dir); end
765
-
766
- # @return [Boolean]
767
- #
768
- # source://zeitwerk//lib/zeitwerk/loader/helpers.rb#74
769
- def hidden?(basename); end
770
-
771
- # source://zeitwerk//lib/zeitwerk/loader/helpers.rb#9
772
- def log(message); end
773
-
774
- # source://zeitwerk//lib/zeitwerk/loader/helpers.rb#17
775
- def ls(dir); end
776
-
777
- # @return [Boolean]
778
- #
779
- # source://zeitwerk//lib/zeitwerk/loader/helpers.rb#64
780
- def ruby?(path); end
781
-
782
- # source://zeitwerk//lib/zeitwerk/loader/helpers.rb#111
783
- def strict_autoload_path(parent, cname); end
784
-
785
- # source://zeitwerk//lib/zeitwerk/loader/helpers.rb#79
786
- def walk_up(abspath); end
787
- end
788
-
789
- # source://zeitwerk//lib/zeitwerk/loader.rb#18
790
- Zeitwerk::Loader::MUTEX = T.let(T.unsafe(nil), Thread::Mutex)
791
-
792
- # source://zeitwerk//lib/zeitwerk/error.rb#13
793
- class Zeitwerk::NameError < ::NameError; end
794
-
795
- # source://zeitwerk//lib/zeitwerk/real_mod_name.rb#3
796
- module Zeitwerk::RealModName
797
- # source://zeitwerk//lib/zeitwerk/real_mod_name.rb#14
798
- def real_mod_name(mod); end
799
- end
800
-
801
- # source://zeitwerk//lib/zeitwerk/real_mod_name.rb#4
802
- Zeitwerk::RealModName::UNBOUND_METHOD_MODULE_NAME = T.let(T.unsafe(nil), UnboundMethod)
803
-
804
- # source://zeitwerk//lib/zeitwerk/registry.rb#4
805
- module Zeitwerk::Registry
806
- class << self
807
- # Maps absolute paths to the loaders responsible for them.
808
- #
809
- # This information is used by our decorated `Kernel#require` to be able to
810
- # invoke callbacks and autovivify modules.
811
- #
812
- # @private
813
- #
814
- # source://zeitwerk//lib/zeitwerk/registry.rb#26
815
- def autoloads; end
816
-
817
- # Registers gem loaders to let `for_gem` be idempotent in case of reload.
818
- #
819
- # @private
820
- #
821
- # source://zeitwerk//lib/zeitwerk/registry.rb#17
822
- def gem_loaders_by_root_file; end
823
-
824
- # @private
825
- # @return [Boolean]
826
- #
827
- # source://zeitwerk//lib/zeitwerk/registry.rb#113
828
- def inception?(cpath); end
829
-
830
- # This hash table addresses an edge case in which an autoload is ignored.
831
- #
832
- # For example, let's suppose we want to autoload in a gem like this:
833
- #
834
- # # lib/my_gem.rb
835
- # loader = Zeitwerk::Loader.new
836
- # loader.push_dir(__dir__)
837
- # loader.setup
838
- #
839
- # module MyGem
840
- # end
841
- #
842
- # if you require "my_gem", as Bundler would do, this happens while setting
843
- # up autoloads:
844
- #
845
- # 1. Object.autoload?(:MyGem) returns `nil` because the autoload for
846
- # the constant is issued by Zeitwerk while the same file is being
847
- # required.
848
- # 2. The constant `MyGem` is undefined while setup runs.
849
- #
850
- # Therefore, a directory `lib/my_gem` would autovivify a module according to
851
- # the existing information. But that would be wrong.
852
- #
853
- # To overcome this fundamental limitation, we keep track of the constant
854
- # paths that are in this situation ---in the example above, "MyGem"--- and
855
- # take this collection into account for the autovivification logic.
856
- #
857
- # Note that you cannot generally address this by moving the setup code
858
- # below the constant definition, because we want libraries to be able to
859
- # use managed constants in the module body:
860
- #
861
- # module MyGem
862
- # include MyConcern
863
- # end
864
- #
865
- # @private
866
- #
867
- # source://zeitwerk//lib/zeitwerk/registry.rb#65
868
- def inceptions; end
869
-
870
- # @private
871
- #
872
- # source://zeitwerk//lib/zeitwerk/registry.rb#121
873
- def loader_for(path); end
874
-
875
- # This method returns always a loader, the same instance for the same root
876
- # file. That is how Zeitwerk::Loader.for_gem is idempotent.
877
- #
878
- # @private
879
- #
880
- # source://zeitwerk//lib/zeitwerk/registry.rb#89
881
- def loader_for_gem(root_file, warn_on_extra_files:); end
882
-
883
- # Keeps track of all loaders. Useful to broadcast messages and to prevent
884
- # them from being garbage collected.
885
- #
886
- # @private
887
- #
888
- # source://zeitwerk//lib/zeitwerk/registry.rb#11
889
- def loaders; end
890
-
891
- # @private
892
- #
893
- # source://zeitwerk//lib/zeitwerk/registry.rb#127
894
- def on_unload(loader); end
895
-
896
- # @private
897
- #
898
- # source://zeitwerk//lib/zeitwerk/registry.rb#95
899
- def register_autoload(loader, abspath); end
900
-
901
- # @private
902
- #
903
- # source://zeitwerk//lib/zeitwerk/registry.rb#107
904
- def register_inception(cpath, abspath, loader); end
905
-
906
- # Registers a loader.
907
- #
908
- # @private
909
- #
910
- # source://zeitwerk//lib/zeitwerk/registry.rb#71
911
- def register_loader(loader); end
912
-
913
- # @private
914
- #
915
- # source://zeitwerk//lib/zeitwerk/registry.rb#101
916
- def unregister_autoload(abspath); end
917
-
918
- # @private
919
- #
920
- # source://zeitwerk//lib/zeitwerk/registry.rb#77
921
- def unregister_loader(loader); end
922
- end
923
- end
924
-
925
- # source://zeitwerk//lib/zeitwerk/error.rb#7
926
- class Zeitwerk::ReloadingDisabledError < ::Zeitwerk::Error
927
- # @return [ReloadingDisabledError] a new instance of ReloadingDisabledError
928
- #
929
- # source://zeitwerk//lib/zeitwerk/error.rb#8
930
- def initialize; end
931
- end
932
-
933
- # source://zeitwerk//lib/zeitwerk/version.rb#4
934
- Zeitwerk::VERSION = T.let(T.unsafe(nil), String)