roast-ai 0.4.4 → 0.4.5

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 (231) hide show
  1. checksums.yaml +4 -4
  2. data/.github/CODEOWNERS +2 -0
  3. data/.github/workflows/ci.yaml +1 -0
  4. data/.gitignore +0 -26
  5. data/.rubocop.yml +13 -0
  6. data/.rubocop_todo.yml +21 -0
  7. data/CHANGELOG.md +29 -0
  8. data/Gemfile +4 -0
  9. data/Gemfile.lock +43 -1
  10. data/bin/rubocop +27 -0
  11. data/bin/spoom +27 -0
  12. data/bin/srb +27 -0
  13. data/bin/srb-rbi +27 -0
  14. data/bin/tapioca +27 -0
  15. data/docs/INSTRUMENTATION.md +3 -3
  16. data/dsl/simple.rb +10 -0
  17. data/lib/roast/dsl/executor.rb +26 -0
  18. data/lib/roast/dsl.rb +7 -0
  19. data/lib/roast/errors.rb +1 -0
  20. data/lib/roast/factories/api_provider_factory.rb +1 -0
  21. data/lib/roast/helpers/function_caching_interceptor.rb +3 -0
  22. data/lib/roast/helpers/logger.rb +6 -9
  23. data/lib/roast/helpers/metadata_access.rb +1 -0
  24. data/lib/roast/helpers/minitest_coverage_runner.rb +1 -0
  25. data/lib/roast/helpers/path_resolver.rb +8 -18
  26. data/lib/roast/helpers/prompt_loader.rb +3 -2
  27. data/lib/roast/helpers/timeout_handler.rb +3 -5
  28. data/lib/roast/initializers.rb +1 -0
  29. data/lib/roast/resources/api_resource.rb +4 -3
  30. data/lib/roast/resources/base_resource.rb +1 -0
  31. data/lib/roast/resources/directory_resource.rb +1 -0
  32. data/lib/roast/resources/file_resource.rb +1 -0
  33. data/lib/roast/resources/none_resource.rb +1 -0
  34. data/lib/roast/resources/url_resource.rb +2 -1
  35. data/lib/roast/resources.rb +1 -2
  36. data/lib/roast/services/context_threshold_checker.rb +1 -0
  37. data/lib/roast/services/token_counting_service.rb +1 -0
  38. data/lib/roast/tools/apply_diff.rb +1 -0
  39. data/lib/roast/tools/ask_user.rb +1 -0
  40. data/lib/roast/tools/bash.rb +1 -0
  41. data/lib/roast/tools/cmd.rb +1 -0
  42. data/lib/roast/tools/coding_agent.rb +1 -0
  43. data/lib/roast/tools/context_summarizer.rb +1 -0
  44. data/lib/roast/tools/grep.rb +1 -0
  45. data/lib/roast/tools/helpers/coding_agent_message_formatter.rb +1 -0
  46. data/lib/roast/tools/read_file.rb +1 -0
  47. data/lib/roast/tools/search_file.rb +1 -0
  48. data/lib/roast/tools/swarm.rb +1 -0
  49. data/lib/roast/tools/update_files.rb +1 -0
  50. data/lib/roast/tools/write_file.rb +1 -0
  51. data/lib/roast/tools.rb +2 -0
  52. data/lib/roast/value_objects/api_token.rb +1 -0
  53. data/lib/roast/value_objects/step_name.rb +1 -0
  54. data/lib/roast/value_objects/uri_base.rb +1 -0
  55. data/lib/roast/value_objects/workflow_path.rb +1 -0
  56. data/lib/roast/value_objects.rb +1 -0
  57. data/lib/roast/version.rb +2 -1
  58. data/lib/roast/workflow/agent_step.rb +1 -0
  59. data/lib/roast/workflow/api_configuration.rb +1 -0
  60. data/lib/roast/workflow/base_iteration_step.rb +1 -0
  61. data/lib/roast/workflow/base_step.rb +1 -0
  62. data/lib/roast/workflow/base_workflow.rb +1 -0
  63. data/lib/roast/workflow/case_executor.rb +1 -0
  64. data/lib/roast/workflow/case_step.rb +1 -0
  65. data/lib/roast/workflow/command_executor.rb +1 -0
  66. data/lib/roast/workflow/conditional_executor.rb +1 -0
  67. data/lib/roast/workflow/conditional_step.rb +1 -0
  68. data/lib/roast/workflow/configuration.rb +9 -0
  69. data/lib/roast/workflow/configuration_loader.rb +4 -1
  70. data/lib/roast/workflow/context_manager.rb +1 -0
  71. data/lib/roast/workflow/context_path_resolver.rb +1 -0
  72. data/lib/roast/workflow/dot_access_hash.rb +1 -0
  73. data/lib/roast/workflow/each_step.rb +1 -0
  74. data/lib/roast/workflow/error_handler.rb +7 -1
  75. data/lib/roast/workflow/expression_evaluator.rb +1 -0
  76. data/lib/roast/workflow/expression_utils.rb +1 -0
  77. data/lib/roast/workflow/file_state_repository.rb +2 -1
  78. data/lib/roast/workflow/input_executor.rb +1 -0
  79. data/lib/roast/workflow/input_step.rb +1 -0
  80. data/lib/roast/workflow/interpolator.rb +2 -1
  81. data/lib/roast/workflow/iteration_executor.rb +1 -0
  82. data/lib/roast/workflow/llm_boolean_coercer.rb +1 -0
  83. data/lib/roast/workflow/metadata_manager.rb +1 -0
  84. data/lib/roast/workflow/output_handler.rb +1 -0
  85. data/lib/roast/workflow/output_manager.rb +1 -0
  86. data/lib/roast/workflow/parallel_executor.rb +1 -0
  87. data/lib/roast/workflow/prompt_step.rb +1 -0
  88. data/lib/roast/workflow/repeat_step.rb +1 -0
  89. data/lib/roast/workflow/replay_handler.rb +1 -0
  90. data/lib/roast/workflow/resource_resolver.rb +2 -6
  91. data/lib/roast/workflow/session_manager.rb +1 -0
  92. data/lib/roast/workflow/shell_script_step.rb +1 -0
  93. data/lib/roast/workflow/sqlite_state_repository.rb +1 -0
  94. data/lib/roast/workflow/state_manager.rb +1 -0
  95. data/lib/roast/workflow/state_repository.rb +1 -0
  96. data/lib/roast/workflow/state_repository_factory.rb +4 -2
  97. data/lib/roast/workflow/step_completion_reporter.rb +1 -0
  98. data/lib/roast/workflow/step_executor_coordinator.rb +9 -5
  99. data/lib/roast/workflow/step_executor_factory.rb +1 -0
  100. data/lib/roast/workflow/step_executor_registry.rb +2 -3
  101. data/lib/roast/workflow/step_executor_with_reporting.rb +1 -0
  102. data/lib/roast/workflow/step_executors/base_step_executor.rb +1 -0
  103. data/lib/roast/workflow/step_executors/hash_step_executor.rb +1 -0
  104. data/lib/roast/workflow/step_executors/parallel_step_executor.rb +1 -0
  105. data/lib/roast/workflow/step_executors/string_step_executor.rb +1 -0
  106. data/lib/roast/workflow/step_factory.rb +1 -0
  107. data/lib/roast/workflow/step_finder.rb +1 -0
  108. data/lib/roast/workflow/step_loader.rb +1 -0
  109. data/lib/roast/workflow/step_name_extractor.rb +1 -0
  110. data/lib/roast/workflow/step_runner.rb +1 -0
  111. data/lib/roast/workflow/step_type_resolver.rb +1 -0
  112. data/lib/roast/workflow/validation_command.rb +1 -0
  113. data/lib/roast/workflow/validator.rb +1 -0
  114. data/lib/roast/workflow/validators/base_validator.rb +1 -0
  115. data/lib/roast/workflow/validators/dependency_validator.rb +1 -0
  116. data/lib/roast/workflow/validators/linting_validator.rb +1 -0
  117. data/lib/roast/workflow/validators/schema_validator.rb +1 -0
  118. data/lib/roast/workflow/validators/step_collector.rb +1 -0
  119. data/lib/roast/workflow/validators/validation_orchestrator.rb +1 -0
  120. data/lib/roast/workflow/workflow_context.rb +1 -0
  121. data/lib/roast/workflow/workflow_execution_context.rb +1 -0
  122. data/lib/roast/workflow/workflow_executor.rb +2 -1
  123. data/lib/roast/workflow/workflow_initializer.rb +1 -0
  124. data/lib/roast/workflow/workflow_runner.rb +66 -55
  125. data/lib/roast/workflow.rb +1 -0
  126. data/lib/roast/workflow_diagram_generator.rb +3 -2
  127. data/lib/roast.rb +23 -8
  128. data/sorbet/config +8 -0
  129. data/sorbet/rbi/dsl/.gitattributes +1 -0
  130. data/sorbet/rbi/dsl/active_support/callbacks.rbi +21 -0
  131. data/sorbet/rbi/gems/.gitattributes +1 -0
  132. data/sorbet/rbi/gems/activesupport@8.0.2.rbi +19107 -0
  133. data/sorbet/rbi/gems/addressable@2.8.7.rbi +1994 -0
  134. data/sorbet/rbi/gems/ast@2.4.3.rbi +585 -0
  135. data/sorbet/rbi/gems/base64@0.3.0.rbi +545 -0
  136. data/sorbet/rbi/gems/benchmark@0.4.1.rbi +619 -0
  137. data/sorbet/rbi/gems/bigdecimal@3.2.2.rbi +62 -0
  138. data/sorbet/rbi/gems/cgi@0.5.0.rbi +2961 -0
  139. data/sorbet/rbi/gems/claude_swarm@0.1.19.rbi +568 -0
  140. data/sorbet/rbi/gems/cli-kit@5.0.1.rbi +1991 -0
  141. data/sorbet/rbi/gems/cli-ui@2.3.0.rbi +3181 -0
  142. data/sorbet/rbi/gems/coderay@1.1.3.rbi +9 -0
  143. data/sorbet/rbi/gems/concurrent-ruby@1.3.5.rbi +11657 -0
  144. data/sorbet/rbi/gems/connection_pool@2.5.3.rbi +9 -0
  145. data/sorbet/rbi/gems/crack@1.0.0.rbi +145 -0
  146. data/sorbet/rbi/gems/diff-lcs@1.6.2.rbi +972 -0
  147. data/sorbet/rbi/gems/dotenv@3.1.8.rbi +295 -0
  148. data/sorbet/rbi/gems/drb@2.2.3.rbi +1661 -0
  149. data/sorbet/rbi/gems/dry-configurable@1.3.0.rbi +672 -0
  150. data/sorbet/rbi/gems/dry-core@1.1.0.rbi +1894 -0
  151. data/sorbet/rbi/gems/dry-inflector@1.2.0.rbi +659 -0
  152. data/sorbet/rbi/gems/dry-initializer@3.2.0.rbi +781 -0
  153. data/sorbet/rbi/gems/dry-logic@1.6.0.rbi +1127 -0
  154. data/sorbet/rbi/gems/dry-schema@1.14.1.rbi +3727 -0
  155. data/sorbet/rbi/gems/dry-types@1.8.3.rbi +3969 -0
  156. data/sorbet/rbi/gems/erubi@1.13.1.rbi +155 -0
  157. data/sorbet/rbi/gems/event_stream_parser@1.0.0.rbi +49 -0
  158. data/sorbet/rbi/gems/faraday-multipart@1.1.1.rbi +283 -0
  159. data/sorbet/rbi/gems/faraday-net_http@3.4.1.rbi +147 -0
  160. data/sorbet/rbi/gems/faraday-retry@2.3.2.rbi +9 -0
  161. data/sorbet/rbi/gems/faraday@2.13.1.rbi +2977 -0
  162. data/sorbet/rbi/gems/fast-mcp-annotations@1.5.3.rbi +1588 -0
  163. data/sorbet/rbi/gems/ffi@1.17.2.rbi +9 -0
  164. data/sorbet/rbi/gems/formatador@1.1.0.rbi +9 -0
  165. data/sorbet/rbi/gems/guard-compat@1.2.1.rbi +102 -0
  166. data/sorbet/rbi/gems/guard-minitest@2.4.6.rbi +402 -0
  167. data/sorbet/rbi/gems/guard@2.19.1.rbi +2283 -0
  168. data/sorbet/rbi/gems/hashdiff@1.2.0.rbi +355 -0
  169. data/sorbet/rbi/gems/i18n@1.14.7.rbi +2359 -0
  170. data/sorbet/rbi/gems/json-schema@5.1.1.rbi +1466 -0
  171. data/sorbet/rbi/gems/json@2.12.2.rbi +2051 -0
  172. data/sorbet/rbi/gems/language_server-protocol@3.17.0.5.rbi +9 -0
  173. data/sorbet/rbi/gems/lint_roller@1.1.0.rbi +9 -0
  174. data/sorbet/rbi/gems/listen@3.9.0.rbi +1206 -0
  175. data/sorbet/rbi/gems/logger@1.7.0.rbi +963 -0
  176. data/sorbet/rbi/gems/lumberjack@1.2.10.rbi +1830 -0
  177. data/sorbet/rbi/gems/method_source@1.1.0.rbi +9 -0
  178. data/sorbet/rbi/gems/mime-types-data@3.2025.0617.rbi +136 -0
  179. data/sorbet/rbi/gems/mime-types@3.7.0.rbi +1342 -0
  180. data/sorbet/rbi/gems/minitest-rg@5.3.0.rbi +160 -0
  181. data/sorbet/rbi/gems/minitest@5.25.5.rbi +1640 -0
  182. data/sorbet/rbi/gems/mocha@2.7.1.rbi +12 -0
  183. data/sorbet/rbi/gems/multipart-post@2.4.1.rbi +244 -0
  184. data/sorbet/rbi/gems/nenv@0.3.0.rbi +147 -0
  185. data/sorbet/rbi/gems/net-http@0.6.0.rbi +4247 -0
  186. data/sorbet/rbi/gems/netrc@0.11.0.rbi +159 -0
  187. data/sorbet/rbi/gems/notiffany@0.1.3.rbi +1079 -0
  188. data/sorbet/rbi/gems/open_router@0.3.3.rbi +230 -0
  189. data/sorbet/rbi/gems/ostruct@0.6.2.rbi +354 -0
  190. data/sorbet/rbi/gems/parallel@1.27.0.rbi +291 -0
  191. data/sorbet/rbi/gems/parser@3.3.8.0.rbi +5535 -0
  192. data/sorbet/rbi/gems/prism@1.4.0.rbi +41732 -0
  193. data/sorbet/rbi/gems/pry@0.15.2.rbi +9 -0
  194. data/sorbet/rbi/gems/public_suffix@6.0.2.rbi +936 -0
  195. data/sorbet/rbi/gems/racc@1.8.1.rbi +158 -0
  196. data/sorbet/rbi/gems/rack@2.2.17.rbi +5659 -0
  197. data/sorbet/rbi/gems/rainbow@3.1.1.rbi +9 -0
  198. data/sorbet/rbi/gems/raix@1.0.2.rbi +1104 -0
  199. data/sorbet/rbi/gems/rake@13.3.0.rbi +3036 -0
  200. data/sorbet/rbi/gems/rb-fsevent@0.11.2.rbi +9 -0
  201. data/sorbet/rbi/gems/rb-inotify@0.11.1.rbi +9 -0
  202. data/sorbet/rbi/gems/rbi@0.3.6.rbi +6893 -0
  203. data/sorbet/rbi/gems/rbs@3.9.4.rbi +6978 -0
  204. data/sorbet/rbi/gems/regexp_parser@2.10.0.rbi +9 -0
  205. data/sorbet/rbi/gems/rexml@3.4.1.rbi +5346 -0
  206. data/sorbet/rbi/gems/rubocop-ast@1.45.1.rbi +9 -0
  207. data/sorbet/rbi/gems/rubocop-shopify@2.17.1.rbi +9 -0
  208. data/sorbet/rbi/gems/rubocop@1.77.0.rbi +9 -0
  209. data/sorbet/rbi/gems/ruby-graphviz@1.2.5.rbi +1333 -0
  210. data/sorbet/rbi/gems/ruby-openai@8.1.0.rbi +758 -0
  211. data/sorbet/rbi/gems/ruby-progressbar@1.13.0.rbi +9 -0
  212. data/sorbet/rbi/gems/ruby2_keywords@0.0.5.rbi +9 -0
  213. data/sorbet/rbi/gems/securerandom@0.4.1.rbi +75 -0
  214. data/sorbet/rbi/gems/shellany@0.0.1.rbi +102 -0
  215. data/sorbet/rbi/gems/spoom@1.6.3.rbi +6985 -0
  216. data/sorbet/rbi/gems/sqlite3@2.7.0.rbi +1900 -0
  217. data/sorbet/rbi/gems/tapioca@0.16.11.rbi +3628 -0
  218. data/sorbet/rbi/gems/thor@1.4.0.rbi +4399 -0
  219. data/sorbet/rbi/gems/tzinfo@2.0.6.rbi +5918 -0
  220. data/sorbet/rbi/gems/unicode-display_width@3.1.4.rbi +9 -0
  221. data/sorbet/rbi/gems/unicode-emoji@4.0.4.rbi +9 -0
  222. data/sorbet/rbi/gems/uri@1.0.3.rbi +2349 -0
  223. data/sorbet/rbi/gems/vcr@6.3.1.rbi +3040 -0
  224. data/sorbet/rbi/gems/webmock@3.25.1.rbi +1792 -0
  225. data/sorbet/rbi/gems/yard-sorbet@0.9.0.rbi +435 -0
  226. data/sorbet/rbi/gems/yard@0.9.37.rbi +18492 -0
  227. data/sorbet/rbi/gems/zeitwerk@2.7.3.rbi +1429 -0
  228. data/sorbet/tapioca/config.yml +13 -0
  229. data/sorbet/tapioca/require.rb +36 -0
  230. metadata +113 -2
  231. data/lib/roast/workflow/configuration_parser.rb +0 -54
@@ -0,0 +1,1429 @@
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
+
8
+ # source://zeitwerk//lib/zeitwerk/core_ext/kernel.rb#3
9
+ module Kernel
10
+ private
11
+
12
+ # : (String) -> bool
13
+ #
14
+ # source://zeitwerk//lib/zeitwerk/core_ext/kernel.rb#23
15
+ def require(path); end
16
+
17
+ class << self
18
+ # : (String) -> bool
19
+ #
20
+ # source://zeitwerk//lib/zeitwerk/core_ext/kernel.rb#23
21
+ def require(path); end
22
+ end
23
+ end
24
+
25
+ class Module
26
+ include ::Zeitwerk::ConstAdded
27
+ end
28
+
29
+ # source://zeitwerk//lib/zeitwerk.rb#3
30
+ module Zeitwerk
31
+ class << self
32
+ # This is a dangerous method.
33
+ #
34
+ # : () -> void
35
+ #
36
+ # source://zeitwerk//lib/zeitwerk.rb#23
37
+ def with_loader; end
38
+ end
39
+ end
40
+
41
+ # source://zeitwerk//lib/zeitwerk/core_ext/module.rb#3
42
+ module Zeitwerk::ConstAdded
43
+ # : (Symbol) -> void
44
+ #
45
+ # source://zeitwerk//lib/zeitwerk/core_ext/module.rb#5
46
+ def const_added(cname); end
47
+ end
48
+
49
+ # This private class encapsulates pairs (mod, cname).
50
+ #
51
+ # Objects represent the constant `cname` in the class or module object `mod`,
52
+ # and have API to manage them. Examples:
53
+ #
54
+ # cref.path
55
+ # cref.set(value)
56
+ # cref.get
57
+ #
58
+ # The constant may or may not exist in `mod`.
59
+ #
60
+ # source://zeitwerk//lib/zeitwerk/cref.rb#13
61
+ class Zeitwerk::Cref
62
+ include ::Zeitwerk::RealModName
63
+
64
+ # The type of the first argument is Module because Class < Module, class
65
+ # objects are also valid.
66
+ #
67
+ # : (Module, Symbol) -> void
68
+ #
69
+ # @return [Cref] a new instance of Cref
70
+ #
71
+ # source://zeitwerk//lib/zeitwerk/cref.rb#28
72
+ def initialize(mod, cname); end
73
+
74
+ # : (String) -> nil
75
+ #
76
+ # source://zeitwerk//lib/zeitwerk/cref.rb#46
77
+ def autoload(abspath); end
78
+
79
+ # : () -> String?
80
+ #
81
+ # @return [Boolean]
82
+ #
83
+ # source://zeitwerk//lib/zeitwerk/cref.rb#41
84
+ def autoload?; end
85
+
86
+ # : Symbol
87
+ #
88
+ # source://zeitwerk//lib/zeitwerk/cref.rb#22
89
+ def cname; end
90
+
91
+ # : () -> bool
92
+ #
93
+ # @return [Boolean]
94
+ #
95
+ # source://zeitwerk//lib/zeitwerk/cref.rb#51
96
+ def defined?; end
97
+
98
+ # : () -> top ! NameError
99
+ #
100
+ # source://zeitwerk//lib/zeitwerk/cref.rb#61
101
+ def get; end
102
+
103
+ # : Module
104
+ #
105
+ # source://zeitwerk//lib/zeitwerk/cref.rb#19
106
+ def mod; end
107
+
108
+ # : () -> String
109
+ #
110
+ # source://zeitwerk//lib/zeitwerk/cref.rb#35
111
+ def path; end
112
+
113
+ # : () -> void ! NameError
114
+ #
115
+ # source://zeitwerk//lib/zeitwerk/cref.rb#66
116
+ def remove; end
117
+
118
+ # : (top) -> top
119
+ #
120
+ # source://zeitwerk//lib/zeitwerk/cref.rb#56
121
+ def set(value); end
122
+
123
+ # : () -> String
124
+ #
125
+ # source://zeitwerk//lib/zeitwerk/cref.rb#35
126
+ def to_s; end
127
+ end
128
+
129
+ # : [Value]
130
+ #
131
+ # source://zeitwerk//lib/zeitwerk/cref/map.rb#73
132
+ class Zeitwerk::Cref::Map
133
+ # : () -> void
134
+ #
135
+ # @return [Map] a new instance of Map
136
+ #
137
+ # source://zeitwerk//lib/zeitwerk/cref/map.rb#75
138
+ def initialize; end
139
+
140
+ # : (Zeitwerk::Cref) -> Value?
141
+ #
142
+ # source://zeitwerk//lib/zeitwerk/cref/map.rb#90
143
+ def [](cref); end
144
+
145
+ # : (Zeitwerk::Cref, Value) -> Value
146
+ #
147
+ # source://zeitwerk//lib/zeitwerk/cref/map.rb#82
148
+ def []=(cref, value); end
149
+
150
+ # : () -> void
151
+ #
152
+ # source://zeitwerk//lib/zeitwerk/cref/map.rb#147
153
+ def clear; end
154
+
155
+ # : (Zeitwerk::Cref) -> Value?
156
+ #
157
+ # source://zeitwerk//lib/zeitwerk/cref/map.rb#105
158
+ def delete(cref); end
159
+
160
+ # : (Value) -> void
161
+ #
162
+ # source://zeitwerk//lib/zeitwerk/cref/map.rb#124
163
+ def delete_by_value(value); end
164
+
165
+ # Ad-hoc for loader_for, called from const_added. That is a hot path, I prefer
166
+ # to not create a cref in every call, since that is global.
167
+ #
168
+ # : (Module, Symbol) -> Value?
169
+ #
170
+ # source://zeitwerk//lib/zeitwerk/cref/map.rb#113
171
+ def delete_mod_cname(mod, cname); end
172
+
173
+ # Order of yielded crefs is undefined.
174
+ #
175
+ # : () { (Zeitwerk::Cref) -> void } -> void
176
+ #
177
+ # source://zeitwerk//lib/zeitwerk/cref/map.rb#136
178
+ def each_key; end
179
+
180
+ # : () -> bool
181
+ #
182
+ # @return [Boolean]
183
+ #
184
+ # source://zeitwerk//lib/zeitwerk/cref/map.rb#154
185
+ def empty?; end
186
+
187
+ # : (Zeitwerk::Cref, { () -> Value }) -> Value
188
+ #
189
+ # source://zeitwerk//lib/zeitwerk/cref/map.rb#97
190
+ def get_or_set(cref, &block); end
191
+ end
192
+
193
+ # source://zeitwerk//lib/zeitwerk/error.rb#4
194
+ class Zeitwerk::Error < ::StandardError; end
195
+
196
+ # source://zeitwerk//lib/zeitwerk/gem_inflector.rb#4
197
+ class Zeitwerk::GemInflector < ::Zeitwerk::Inflector
198
+ # : (String) -> void
199
+ #
200
+ # @return [GemInflector] a new instance of GemInflector
201
+ #
202
+ # source://zeitwerk//lib/zeitwerk/gem_inflector.rb#6
203
+ def initialize(root_file); end
204
+
205
+ # : (String, String) -> String
206
+ #
207
+ # source://zeitwerk//lib/zeitwerk/gem_inflector.rb#13
208
+ def camelize(basename, abspath); end
209
+ end
210
+
211
+ # @private
212
+ #
213
+ # source://zeitwerk//lib/zeitwerk/gem_loader.rb#5
214
+ class Zeitwerk::GemLoader < ::Zeitwerk::Loader
215
+ # : (String, namespace: Module, warn_on_extra_files: boolish) -> void
216
+ #
217
+ # @return [GemLoader] a new instance of GemLoader
218
+ #
219
+ # source://zeitwerk//lib/zeitwerk/gem_loader.rb#19
220
+ def initialize(root_file, namespace:, warn_on_extra_files:); end
221
+
222
+ # : () -> void
223
+ #
224
+ # source://zeitwerk//lib/zeitwerk/gem_loader.rb#34
225
+ def setup; end
226
+
227
+ private
228
+
229
+ # : () -> void
230
+ #
231
+ # source://zeitwerk//lib/zeitwerk/gem_loader.rb#42
232
+ def warn_on_extra_files; end
233
+
234
+ class << self
235
+ # : (String, namespace: Module, warn_on_extra_files: boolish) -> Zeitwerk::GemLoader
236
+ #
237
+ # @private
238
+ #
239
+ # source://zeitwerk//lib/zeitwerk/gem_loader.rb#14
240
+ def __new(root_file, namespace:, warn_on_extra_files:); end
241
+
242
+ private
243
+
244
+ def new(*_arg0); end
245
+ end
246
+ end
247
+
248
+ # source://zeitwerk//lib/zeitwerk/inflector.rb#4
249
+ class Zeitwerk::Inflector
250
+ # Very basic snake case -> camel case conversion.
251
+ #
252
+ # inflector = Zeitwerk::Inflector.new
253
+ # inflector.camelize("post", ...) # => "Post"
254
+ # inflector.camelize("users_controller", ...) # => "UsersController"
255
+ # inflector.camelize("api", ...) # => "Api"
256
+ #
257
+ # Takes into account hard-coded mappings configured with `inflect`.
258
+ #
259
+ # : (String, String) -> String
260
+ #
261
+ # source://zeitwerk//lib/zeitwerk/inflector.rb#15
262
+ def camelize(basename, _abspath); end
263
+
264
+ # Configures hard-coded inflections:
265
+ #
266
+ # inflector = Zeitwerk::Inflector.new
267
+ # inflector.inflect(
268
+ # "html_parser" => "HTMLParser",
269
+ # "mysql_adapter" => "MySQLAdapter"
270
+ # )
271
+ #
272
+ # inflector.camelize("html_parser", abspath) # => "HTMLParser"
273
+ # inflector.camelize("mysql_adapter", abspath) # => "MySQLAdapter"
274
+ # inflector.camelize("users_controller", abspath) # => "UsersController"
275
+ #
276
+ # : (Hash[String, String]) -> void
277
+ #
278
+ # source://zeitwerk//lib/zeitwerk/inflector.rb#32
279
+ def inflect(inflections); end
280
+
281
+ private
282
+
283
+ # Hard-coded basename to constant name user maps that override the default
284
+ # inflection logic.
285
+ #
286
+ # : () -> Hash[String, String]
287
+ #
288
+ # source://zeitwerk//lib/zeitwerk/inflector.rb#42
289
+ def overrides; end
290
+ end
291
+
292
+ # This is a private module.
293
+ #
294
+ # source://zeitwerk//lib/zeitwerk/internal.rb#4
295
+ module Zeitwerk::Internal
296
+ # : (Symbol) -> void
297
+ #
298
+ # source://zeitwerk//lib/zeitwerk/internal.rb#6
299
+ def internal(method_name); end
300
+ end
301
+
302
+ # source://zeitwerk//lib/zeitwerk/loader.rb#7
303
+ class Zeitwerk::Loader
304
+ include ::Zeitwerk::RealModName
305
+ include ::Zeitwerk::Loader::Callbacks
306
+ include ::Zeitwerk::Loader::Helpers
307
+ include ::Zeitwerk::Loader::Config
308
+ include ::Zeitwerk::Loader::EagerLoad
309
+ extend ::Zeitwerk::Internal
310
+ extend ::Zeitwerk::RealModName
311
+
312
+ # @return [Loader] a new instance of Loader
313
+ #
314
+ # source://zeitwerk//lib/zeitwerk/loader.rb#107
315
+ def initialize; end
316
+
317
+ # source://zeitwerk//lib/zeitwerk/loader.rb#66
318
+ def __autoloaded_dirs; end
319
+
320
+ # source://zeitwerk//lib/zeitwerk/loader.rb#32
321
+ def __autoloads; end
322
+
323
+ # source://zeitwerk//lib/zeitwerk/loader.rb#56
324
+ def __inceptions; end
325
+
326
+ # source://zeitwerk//lib/zeitwerk/loader.rb#85
327
+ def __namespace_dirs; end
328
+
329
+ # source://zeitwerk//lib/zeitwerk/loader.rb#362
330
+ def __shadowed_file?(file); end
331
+
332
+ # source://zeitwerk//lib/zeitwerk/loader.rb#96
333
+ def __shadowed_files; end
334
+
335
+ # source://zeitwerk//lib/zeitwerk/loader.rb#76
336
+ def __to_unload; end
337
+
338
+ # Returns a hash that maps the absolute paths of the managed files and
339
+ # directories to their respective expected constant paths.
340
+ #
341
+ # : () -> Hash[String, String]
342
+ #
343
+ # source://zeitwerk//lib/zeitwerk/loader.rb#247
344
+ def all_expected_cpaths; end
345
+
346
+ # : (String | Pathname) -> String?
347
+ #
348
+ # @raise [Zeitwerk::Error]
349
+ #
350
+ # source://zeitwerk//lib/zeitwerk/loader.rb#277
351
+ def cpath_expected_at(path); end
352
+
353
+ # Unloads all loaded code, and calls setup again so that the loader is able
354
+ # to pick any changes in the file system.
355
+ #
356
+ # This method is not thread-safe, please see how this can be achieved by
357
+ # client code in the README of the project.
358
+ #
359
+ # : () -> void ! Zeitwerk::Error
360
+ #
361
+ # @raise [ReloadingDisabledError]
362
+ #
363
+ # source://zeitwerk//lib/zeitwerk/loader.rb#233
364
+ def reload; end
365
+
366
+ # Sets autoloads in the root namespaces.
367
+ #
368
+ # : () -> void
369
+ #
370
+ # source://zeitwerk//lib/zeitwerk/loader.rb#128
371
+ def setup; end
372
+
373
+ # Removes loaded constants and configured autoloads.
374
+ #
375
+ # The objects the constants stored are no longer reachable through them. In
376
+ # addition, since said objects are normally not referenced from anywhere
377
+ # else, they are eligible for garbage collection, which would effectively
378
+ # unload them.
379
+ #
380
+ # This method is public but undocumented. Main interface is `reload`, which
381
+ # means `unload` + `setup`. This one is available to be used together with
382
+ # `unregister`, which is undocumented too.
383
+ #
384
+ # : () -> void
385
+ #
386
+ # source://zeitwerk//lib/zeitwerk/loader.rb#154
387
+ def unload; end
388
+
389
+ # Says if the given constant path would be unloaded on reload. This
390
+ # predicate returns `false` if reloading is disabled.
391
+ #
392
+ # This is an undocumented method that I wrote to help transition from the
393
+ # classic autoloader in Rails. Its usage was removed from Rails in 7.0.
394
+ #
395
+ # : (String) -> bool
396
+ #
397
+ # @return [Boolean]
398
+ #
399
+ # source://zeitwerk//lib/zeitwerk/loader.rb#331
400
+ def unloadable_cpath?(cpath); end
401
+
402
+ # Returns an array with the constant paths that would be unloaded on reload.
403
+ # This predicate returns an empty array if reloading is disabled.
404
+ #
405
+ # This is an undocumented method that I wrote to help transition from the
406
+ # classic autoloader in Rails. Its usage was removed from Rails in 7.0.
407
+ #
408
+ # : () -> Array[String]
409
+ #
410
+ # source://zeitwerk//lib/zeitwerk/loader.rb#342
411
+ def unloadable_cpaths; end
412
+
413
+ # This is a dangerous method.
414
+ #
415
+ # : () -> void
416
+ #
417
+ # source://zeitwerk//lib/zeitwerk/loader.rb#350
418
+ def unregister; end
419
+
420
+ private
421
+
422
+ # : (Zeitwerk::Cref, String) -> void
423
+ #
424
+ # source://zeitwerk//lib/zeitwerk/loader.rb#513
425
+ def autoload_file(cref, file); end
426
+
427
+ # : (Zeitwerk::Cref) -> String?
428
+ #
429
+ # @return [Boolean]
430
+ #
431
+ # source://zeitwerk//lib/zeitwerk/loader.rb#565
432
+ def autoload_path_set_by_me_for?(cref); end
433
+
434
+ # : (Zeitwerk::Cref, String) -> void
435
+ #
436
+ # source://zeitwerk//lib/zeitwerk/loader.rb#484
437
+ def autoload_subdir(cref, subdir); end
438
+
439
+ # We keep track of autoloaded directories to remove them from the registry
440
+ # at the end of eager loading.
441
+ #
442
+ # Files are removed as they are autoloaded, but directories need to wait due
443
+ # to concurrency (see why in Zeitwerk::Loader::Callbacks#on_dir_autoloaded).
444
+ #
445
+ # : Array[String]
446
+ #
447
+ # source://zeitwerk//lib/zeitwerk/loader.rb#66
448
+ def autoloaded_dirs; end
449
+
450
+ # Maps absolute paths for which an autoload has been set ---and not
451
+ # executed--- to their corresponding Zeitwerk::Cref object.
452
+ #
453
+ # "/Users/fxn/blog/app/models/user.rb" => #<Zeitwerk::Cref:... @mod=Object, @cname=:User, ...>,
454
+ # "/Users/fxn/blog/app/models/hotel/pricing.rb" => #<Zeitwerk::Cref:... @mod=Hotel, @cname=:Pricing, ...>,
455
+ # ...
456
+ #
457
+ # : Hash[String, Zeitwerk::Cref]
458
+ #
459
+ # source://zeitwerk//lib/zeitwerk/loader.rb#32
460
+ def autoloads; end
461
+
462
+ # : (Zeitwerk::Cref, String) -> void
463
+ #
464
+ # source://zeitwerk//lib/zeitwerk/loader.rb#547
465
+ def define_autoload(cref, abspath); end
466
+
467
+ # : (String, Module) -> void
468
+ #
469
+ # source://zeitwerk//lib/zeitwerk/loader.rb#466
470
+ def define_autoloads_for_dir(dir, parent); end
471
+
472
+ # : Monitor
473
+ #
474
+ # source://zeitwerk//lib/zeitwerk/loader.rb#104
475
+ def dirs_autoload_monitor; end
476
+
477
+ # When the path passed to Module#autoload is in the stack of features being
478
+ # loaded at the moment, Ruby passes. For example, Module#autoload? returns
479
+ # `nil` even if the autoload has not been attempted. See
480
+ #
481
+ # https://bugs.ruby-lang.org/issues/21035
482
+ #
483
+ # We call these "inceptions".
484
+ #
485
+ # A common case is the entry point of gems managed by Zeitwerk. Their main
486
+ # file is normally required and, while doing so, the loader sets an autoload
487
+ # on the gem namespace. That autoload hits this edge case.
488
+ #
489
+ # There is some logic that neeeds to know if an autoload for a given
490
+ # constant already exists. We check Module#autoload? first, and fallback to
491
+ # the inceptions just in case.
492
+ #
493
+ # This map keeps track of pairs (cref, autoload_path) found by the loader.
494
+ # The object Zeitwerk::Registry.inceptions, on the other hand, acts as a
495
+ # global registry for them.
496
+ #
497
+ # : Zeitwerk::Cref::Map[String]
498
+ #
499
+ # source://zeitwerk//lib/zeitwerk/loader.rb#56
500
+ def inceptions; end
501
+
502
+ # : Mutex
503
+ #
504
+ # source://zeitwerk//lib/zeitwerk/loader.rb#100
505
+ def mutex; end
506
+
507
+ # Maps namespace crefs to the directories that conform the namespace.
508
+ #
509
+ # When these crefs get defined we know their children are spread over those
510
+ # directories. We'll visit them to set up the corresponding autoloads.
511
+ #
512
+ # : Zeitwerk::Cref::Map[String]
513
+ #
514
+ # source://zeitwerk//lib/zeitwerk/loader.rb#85
515
+ def namespace_dirs; end
516
+
517
+ # `dir` is the directory that would have autovivified a namespace. `file` is
518
+ # the file where we've found the namespace is explicitly defined.
519
+ #
520
+ # : (dir: String, file: String, cref: Zeitwerk::Cref) -> void
521
+ #
522
+ # source://zeitwerk//lib/zeitwerk/loader.rb#534
523
+ def promote_namespace_from_implicit_to_explicit(dir:, file:, cref:); end
524
+
525
+ # : (String) -> void
526
+ #
527
+ # source://zeitwerk//lib/zeitwerk/loader.rb#598
528
+ def raise_if_conflicting_directory(dir); end
529
+
530
+ # : (Zeitwerk::Cref) -> void
531
+ #
532
+ # source://zeitwerk//lib/zeitwerk/loader.rb#574
533
+ def register_explicit_namespace(cref); end
534
+
535
+ # : (Zeitwerk::Cref, String) -> void
536
+ #
537
+ # source://zeitwerk//lib/zeitwerk/loader.rb#584
538
+ def register_inception(cref, abspath); end
539
+
540
+ # : (String, top, String) -> void
541
+ #
542
+ # source://zeitwerk//lib/zeitwerk/loader.rb#622
543
+ def run_on_unload_callbacks(cref, value, abspath); end
544
+
545
+ # source://zeitwerk//lib/zeitwerk/loader.rb#362
546
+ def shadowed_file?(file); end
547
+
548
+ # A shadowed file is a file managed by this loader that is ignored when
549
+ # setting autoloads because its matching constant is already taken.
550
+ #
551
+ # This private set is populated lazily, as we descend. For example, if the
552
+ # loader has only scanned the top-level, `shadowed_files` does not have the
553
+ # shadowed files that may exist deep in the project tree.
554
+ #
555
+ # : Set[String]
556
+ #
557
+ # source://zeitwerk//lib/zeitwerk/loader.rb#96
558
+ def shadowed_files; end
559
+
560
+ # If reloading is enabled, this collection maps autoload paths to their
561
+ # autoloaded crefs.
562
+ #
563
+ # On unload, the autoload paths are passed to callbacks, files deleted from
564
+ # $LOADED_FEATURES, and the crefs are deleted.
565
+ #
566
+ # : Hash[String, Zeitwerk::Cref]
567
+ #
568
+ # source://zeitwerk//lib/zeitwerk/loader.rb#76
569
+ def to_unload; end
570
+
571
+ # : (Zeitwerk::Cref) -> void
572
+ #
573
+ # source://zeitwerk//lib/zeitwerk/loader.rb#629
574
+ def unload_autoload(cref); end
575
+
576
+ # : (Zeitwerk::Cref) -> void
577
+ #
578
+ # source://zeitwerk//lib/zeitwerk/loader.rb#635
579
+ def unload_cref(cref); end
580
+
581
+ # : () -> void
582
+ #
583
+ # source://zeitwerk//lib/zeitwerk/loader.rb#579
584
+ def unregister_explicit_namespaces; end
585
+
586
+ # : () -> void
587
+ #
588
+ # source://zeitwerk//lib/zeitwerk/loader.rb#590
589
+ def unregister_inceptions; end
590
+
591
+ class << self
592
+ # Returns an array with the absolute paths of the root directories of all
593
+ # registered loaders. This is a read-only collection.
594
+ #
595
+ # : () -> Array[String]
596
+ #
597
+ # source://zeitwerk//lib/zeitwerk/loader.rb#456
598
+ def all_dirs; end
599
+
600
+ # : call(String) -> void | debug(String) -> void | nil
601
+ #
602
+ # source://zeitwerk//lib/zeitwerk/loader.rb#372
603
+ def default_logger; end
604
+
605
+ # : call(String) -> void | debug(String) -> void | nil
606
+ #
607
+ # source://zeitwerk//lib/zeitwerk/loader.rb#372
608
+ def default_logger=(_arg0); end
609
+
610
+ # Broadcasts `eager_load` to all loaders. Those that have not been setup
611
+ # are skipped.
612
+ #
613
+ # : () -> void
614
+ #
615
+ # source://zeitwerk//lib/zeitwerk/loader.rb#428
616
+ def eager_load_all; end
617
+
618
+ # Broadcasts `eager_load_namespace` to all loaders. Those that have not
619
+ # been setup are skipped.
620
+ #
621
+ # : (Module) -> void
622
+ #
623
+ # source://zeitwerk//lib/zeitwerk/loader.rb#442
624
+ def eager_load_namespace(mod); end
625
+
626
+ # This is a shortcut for
627
+ #
628
+ # require "zeitwerk"
629
+ #
630
+ # loader = Zeitwerk::Loader.new
631
+ # loader.tag = File.basename(__FILE__, ".rb")
632
+ # loader.inflector = Zeitwerk::GemInflector.new(__FILE__)
633
+ # loader.push_dir(__dir__)
634
+ #
635
+ # except that this method returns the same object in subsequent calls from
636
+ # the same file, in the unlikely case the gem wants to be able to reload.
637
+ #
638
+ # This method returns a subclass of Zeitwerk::Loader, but the exact type
639
+ # is private, client code can only rely on the interface.
640
+ #
641
+ # : (?warn_on_extra_files: boolish) -> Zeitwerk::GemLoader
642
+ #
643
+ # source://zeitwerk//lib/zeitwerk/loader.rb#390
644
+ def for_gem(warn_on_extra_files: T.unsafe(nil)); end
645
+
646
+ # This is a shortcut for
647
+ #
648
+ # require "zeitwerk"
649
+ #
650
+ # loader = Zeitwerk::Loader.new
651
+ # loader.tag = namespace.name + "-" + File.basename(__FILE__, ".rb")
652
+ # loader.inflector = Zeitwerk::GemInflector.new(__FILE__)
653
+ # loader.push_dir(__dir__, namespace: namespace)
654
+ #
655
+ # except that this method returns the same object in subsequent calls from
656
+ # the same file, in the unlikely case the gem wants to be able to reload.
657
+ #
658
+ # This method returns a subclass of Zeitwerk::Loader, but the exact type
659
+ # is private, client code can only rely on the interface.
660
+ #
661
+ # : (Module) -> Zeitwerk::GemLoader
662
+ #
663
+ # source://zeitwerk//lib/zeitwerk/loader.rb#411
664
+ def for_gem_extension(namespace); end
665
+ end
666
+ end
667
+
668
+ # source://zeitwerk//lib/zeitwerk/loader/callbacks.rb#3
669
+ module Zeitwerk::Loader::Callbacks
670
+ extend ::Zeitwerk::Internal
671
+
672
+ # source://zeitwerk//lib/zeitwerk/loader/callbacks.rb#39
673
+ def __on_dir_autoloaded(dir); end
674
+
675
+ # source://zeitwerk//lib/zeitwerk/loader/callbacks.rb#9
676
+ def __on_file_autoloaded(file); end
677
+
678
+ # source://zeitwerk//lib/zeitwerk/loader/callbacks.rb#77
679
+ def __on_namespace_loaded(cref, namespace); end
680
+
681
+ private
682
+
683
+ # source://zeitwerk//lib/zeitwerk/loader/callbacks.rb#39
684
+ def on_dir_autoloaded(dir); end
685
+
686
+ # source://zeitwerk//lib/zeitwerk/loader/callbacks.rb#9
687
+ def on_file_autoloaded(file); end
688
+
689
+ # source://zeitwerk//lib/zeitwerk/loader/callbacks.rb#77
690
+ def on_namespace_loaded(cref, namespace); end
691
+
692
+ # : (String, top, String) -> void
693
+ #
694
+ # source://zeitwerk//lib/zeitwerk/loader/callbacks.rb#88
695
+ def run_on_load_callbacks(cpath, value, abspath); end
696
+ end
697
+
698
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#6
699
+ module Zeitwerk::Loader::Config
700
+ include ::Zeitwerk::RealModName
701
+ extend ::Zeitwerk::Internal
702
+
703
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#85
704
+ def initialize; end
705
+
706
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#289
707
+ def __ignores?(abspath); end
708
+
709
+ def __roots; end
710
+
711
+ # Configure directories or glob patterns to be collapsed.
712
+ #
713
+ # : (*(String | Pathname | Array[String | Pathname])) -> void
714
+ #
715
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#213
716
+ def collapse(*glob_patterns); end
717
+
718
+ # If `namespaces` is falsey (default), returns an array with the absolute
719
+ # paths of the root directories as strings. If truthy, returns a hash table
720
+ # instead. Keys are the absolute paths of the root directories as strings,
721
+ # values are their corresponding namespaces, class or module objects.
722
+ #
723
+ # If `ignored` is falsey (default), ignored root directories are filtered out.
724
+ #
725
+ # These are read-only collections, please add to them with `push_dir`.
726
+ #
727
+ # : (?namespaces: boolish, ?ignored: boolish) -> Array[String] | Hash[String, Module]
728
+ #
729
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#154
730
+ def dirs(namespaces: T.unsafe(nil), ignored: T.unsafe(nil)); end
731
+
732
+ # Let eager load ignore the given files or directories. The constants defined
733
+ # in those files are still autoloadable.
734
+ #
735
+ # : (*(String | Pathname | Array[String | Pathname])) -> void
736
+ #
737
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#195
738
+ def do_not_eager_load(*paths); end
739
+
740
+ # You need to call this method before setup in order to be able to reload.
741
+ # There is no way to undo this, either you want to reload or you don't.
742
+ #
743
+ # : () -> void ! Zeitwerk::Error
744
+ #
745
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#174
746
+ def enable_reloading; end
747
+
748
+ # Configure files, directories, or glob patterns to be totally ignored.
749
+ #
750
+ # : (*(String | Pathname | Array[String | Pathname])) -> void
751
+ #
752
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#202
753
+ def ignore(*glob_patterns); end
754
+
755
+ # : camelize(String, String) -> String
756
+ #
757
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#11
758
+ def inflector; end
759
+
760
+ # : camelize(String, String) -> String
761
+ #
762
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#11
763
+ def inflector=(_arg0); end
764
+
765
+ # Logs to `$stdout`, handy shortcut for debugging.
766
+ #
767
+ # : () -> void
768
+ #
769
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#281
770
+ def log!; end
771
+
772
+ # : call(String) -> void | debug(String) -> void | nil
773
+ #
774
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#14
775
+ def logger; end
776
+
777
+ # : call(String) -> void | debug(String) -> void | nil
778
+ #
779
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#14
780
+ def logger=(_arg0); end
781
+
782
+ # Configure a block to be invoked once a certain constant path is loaded.
783
+ # Supports multiple callbacks, and if there are many, they are executed in
784
+ # the order in which they were defined.
785
+ #
786
+ # loader.on_load("SomeApiClient") do |klass, _abspath|
787
+ # klass.endpoint = "https://api.dev"
788
+ # end
789
+ #
790
+ # Can also be configured for any constant loaded:
791
+ #
792
+ # loader.on_load do |cpath, value, abspath|
793
+ # # ...
794
+ # end
795
+ #
796
+ # : (String?) { (top, String) -> void } -> void ! TypeError
797
+ #
798
+ # @raise [TypeError]
799
+ #
800
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#247
801
+ def on_load(cpath = T.unsafe(nil), &block); end
802
+
803
+ # Configure a block to be called after setup and on each reload.
804
+ # If setup was already done, the block runs immediately.
805
+ #
806
+ # : () { () -> void } -> void
807
+ #
808
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#225
809
+ def on_setup(&block); end
810
+
811
+ # Configure a block to be invoked right before a certain constant is removed.
812
+ # Supports multiple callbacks, and if there are many, they are executed in the
813
+ # order in which they were defined.
814
+ #
815
+ # loader.on_unload("Country") do |klass, _abspath|
816
+ # klass.clear_cache
817
+ # end
818
+ #
819
+ # Can also be configured for any removed constant:
820
+ #
821
+ # loader.on_unload do |cpath, value, abspath|
822
+ # # ...
823
+ # end
824
+ #
825
+ # : (String?) { (top, String) -> void } -> void ! TypeError
826
+ #
827
+ # @raise [TypeError]
828
+ #
829
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#270
830
+ def on_unload(cpath = T.unsafe(nil), &block); end
831
+
832
+ # Pushes `path` to the list of root directories.
833
+ #
834
+ # Raises `Zeitwerk::Error` if `path` does not exist, or if another loader in
835
+ # the same process already manages that directory or one of its ascendants or
836
+ # descendants.
837
+ #
838
+ # : (String | Pathname, namespace: Module) -> void ! Zeitwerk::Error
839
+ #
840
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#109
841
+ def push_dir(path, namespace: T.unsafe(nil)); end
842
+
843
+ # : () -> bool
844
+ #
845
+ # @return [Boolean]
846
+ #
847
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#187
848
+ def reloading_enabled?; end
849
+
850
+ # Returns the loader's tag.
851
+ #
852
+ # Implemented as a method instead of via attr_reader for symmetry with the
853
+ # writer below.
854
+ #
855
+ # : () -> String
856
+ #
857
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#133
858
+ def tag; end
859
+
860
+ # Sets a tag for the loader, useful for logging.
861
+ #
862
+ # : (to_s() -> String) -> void
863
+ #
864
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#140
865
+ def tag=(tag); end
866
+
867
+ private
868
+
869
+ # : () -> Array[String]
870
+ #
871
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#307
872
+ def actual_roots; end
873
+
874
+ # : (String) -> bool
875
+ #
876
+ # @return [Boolean]
877
+ #
878
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#332
879
+ def collapse?(dir); end
880
+
881
+ # The actual collection of absolute directory names at the time the collapse
882
+ # glob patterns were expanded. Computed on setup, and recomputed on reload.
883
+ #
884
+ # : Set[String]
885
+ #
886
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#56
887
+ def collapse_dirs; end
888
+
889
+ # Absolute paths of directories or glob patterns to be collapsed.
890
+ #
891
+ # : Set[String]
892
+ #
893
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#49
894
+ def collapse_glob_patterns; end
895
+
896
+ # Absolute paths of files or directories not to be eager loaded.
897
+ #
898
+ # : Set[String]
899
+ #
900
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#62
901
+ def eager_load_exclusions; end
902
+
903
+ # : (String) -> bool
904
+ #
905
+ # @return [Boolean]
906
+ #
907
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#319
908
+ def excluded_from_eager_load?(abspath); end
909
+
910
+ # : (Array[String]) -> Array[String]
911
+ #
912
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#342
913
+ def expand_glob_patterns(glob_patterns); end
914
+
915
+ # : (String | Pathname | Array[String | Pathname]) -> Array[String]
916
+ #
917
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#337
918
+ def expand_paths(paths); end
919
+
920
+ # Absolute paths of files, directories, or glob patterns to be ignored.
921
+ #
922
+ # : Set[String]
923
+ #
924
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#35
925
+ def ignored_glob_patterns; end
926
+
927
+ # : (String) -> bool
928
+ #
929
+ # @return [Boolean]
930
+ #
931
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#302
932
+ def ignored_path?(abspath); end
933
+
934
+ # The actual collection of absolute file and directory names at the time the
935
+ # ignored glob patterns were expanded. Computed on setup, and recomputed on
936
+ # reload.
937
+ #
938
+ # : Set[String]
939
+ #
940
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#43
941
+ def ignored_paths; end
942
+
943
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#289
944
+ def ignores?(abspath); end
945
+
946
+ # User-oriented callbacks to be fired when a constant is loaded.
947
+ #
948
+ # : Hash[String, Array[{ (top, String) -> void }]]
949
+ # | Hash[Symbol, Array[{ (String, top, String) -> void }]]
950
+ #
951
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#75
952
+ def on_load_callbacks; end
953
+
954
+ # User-oriented callbacks to be fired on setup and on reload.
955
+ #
956
+ # : Array[{ () -> void }]
957
+ #
958
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#68
959
+ def on_setup_callbacks; end
960
+
961
+ # User-oriented callbacks to be fired before constants are removed.
962
+ #
963
+ # : Hash[String, Array[{ (top, String) -> void }]]
964
+ # | Hash[Symbol, Array[{ (String, top, String) -> void }]]
965
+ #
966
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#82
967
+ def on_unload_callbacks; end
968
+
969
+ # : () -> void
970
+ #
971
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#354
972
+ def recompute_collapse_dirs; end
973
+
974
+ # : () -> void
975
+ #
976
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#349
977
+ def recompute_ignored_paths; end
978
+
979
+ # : (String) -> bool
980
+ #
981
+ # @return [Boolean]
982
+ #
983
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#314
984
+ def root_dir?(dir); end
985
+
986
+ # Absolute paths of the root directories, mapped to their respective root namespaces:
987
+ #
988
+ # "/Users/fxn/blog/app/channels" => Object,
989
+ # "/Users/fxn/blog/app/adapters" => ActiveJob::QueueAdapters,
990
+ # ...
991
+ #
992
+ # Stored in a hash to preserve order, easily handle duplicates, and have a
993
+ # fast lookup by directory.
994
+ #
995
+ # This is a private collection maintained by the loader. The public
996
+ # interface for it is `push_dir` and `dirs`.
997
+ #
998
+ # : Hash[String, Module]
999
+ #
1000
+ # source://zeitwerk//lib/zeitwerk/loader/config.rb#29
1001
+ def roots; end
1002
+ end
1003
+
1004
+ # source://zeitwerk//lib/zeitwerk/loader/eager_load.rb#1
1005
+ module Zeitwerk::Loader::EagerLoad
1006
+ # Eager loads all files in the root directories, recursively. Files do not
1007
+ # need to be in `$LOAD_PATH`, absolute file names are used. Ignored and
1008
+ # shadowed files are not eager loaded. You can opt-out specifically in
1009
+ # specific files and directories with `do_not_eager_load`, and that can be
1010
+ # overridden passing `force: true`.
1011
+ #
1012
+ # : (?force: boolish) -> void
1013
+ #
1014
+ # source://zeitwerk//lib/zeitwerk/loader/eager_load.rb#9
1015
+ def eager_load(force: T.unsafe(nil)); end
1016
+
1017
+ # : (String | Pathname) -> void
1018
+ #
1019
+ # @raise [Zeitwerk::SetupRequired]
1020
+ #
1021
+ # source://zeitwerk//lib/zeitwerk/loader/eager_load.rb#32
1022
+ def eager_load_dir(path); end
1023
+
1024
+ # : (Module) -> void
1025
+ #
1026
+ # @raise [Zeitwerk::SetupRequired]
1027
+ #
1028
+ # source://zeitwerk//lib/zeitwerk/loader/eager_load.rb#74
1029
+ def eager_load_namespace(mod); end
1030
+
1031
+ # Loads the given Ruby file.
1032
+ #
1033
+ # Raises if the argument is ignored, shadowed, or not managed by the receiver.
1034
+ #
1035
+ # The method is implemented as `constantize` for files, in a sense, to be able
1036
+ # to descend orderly and make sure the file is loadable.
1037
+ #
1038
+ # : (String | Pathname) -> void
1039
+ #
1040
+ # @raise [Zeitwerk::Error]
1041
+ #
1042
+ # source://zeitwerk//lib/zeitwerk/loader/eager_load.rb#116
1043
+ def load_file(path); end
1044
+
1045
+ private
1046
+
1047
+ # The caller is responsible for making sure `namespace` is the namespace that
1048
+ # corresponds to `dir`.
1049
+ #
1050
+ # : (String, Module, ?force: boolish) -> void
1051
+ #
1052
+ # source://zeitwerk//lib/zeitwerk/loader/eager_load.rb#160
1053
+ def actual_eager_load_dir(dir, namespace, force: T.unsafe(nil)); end
1054
+
1055
+ # In order to invoke this method, the caller has to ensure `child` is a
1056
+ # strict namespace descendant of `root_namespace`.
1057
+ #
1058
+ # : (Module, String, String, Module) -> void
1059
+ #
1060
+ # source://zeitwerk//lib/zeitwerk/loader/eager_load.rb#193
1061
+ def eager_load_child_namespace(child, child_name, root_dir, root_namespace); end
1062
+ end
1063
+
1064
+ # source://zeitwerk//lib/zeitwerk/loader/helpers.rb#3
1065
+ module Zeitwerk::Loader::Helpers
1066
+ private
1067
+
1068
+ # : (String, String) -> Symbol ! Zeitwerk::NameError
1069
+ #
1070
+ # source://zeitwerk//lib/zeitwerk/loader/helpers.rb#107
1071
+ def cname_for(basename, abspath); end
1072
+
1073
+ # : (String) -> bool
1074
+ #
1075
+ # @return [Boolean]
1076
+ #
1077
+ # source://zeitwerk//lib/zeitwerk/loader/helpers.rb#83
1078
+ def dir?(path); end
1079
+
1080
+ # Looks for a Ruby file using breadth-first search. This type of search is
1081
+ # important to list as less directories as possible and return fast in the
1082
+ # common case in which there are Ruby files.
1083
+ #
1084
+ # : (String) -> bool
1085
+ #
1086
+ # @return [Boolean]
1087
+ #
1088
+ # source://zeitwerk//lib/zeitwerk/loader/helpers.rb#56
1089
+ def has_at_least_one_ruby_file?(dir); end
1090
+
1091
+ # : (String) -> bool
1092
+ #
1093
+ # @return [Boolean]
1094
+ #
1095
+ # source://zeitwerk//lib/zeitwerk/loader/helpers.rb#88
1096
+ def hidden?(basename); end
1097
+
1098
+ # : (to_s() -> String) -> void
1099
+ #
1100
+ # source://zeitwerk//lib/zeitwerk/loader/helpers.rb#7
1101
+ def log(message); end
1102
+
1103
+ # : (String) { (String, String, Symbol) -> void } -> void
1104
+ #
1105
+ # source://zeitwerk//lib/zeitwerk/loader/helpers.rb#15
1106
+ def ls(dir); end
1107
+
1108
+ # : (String) -> bool
1109
+ #
1110
+ # @return [Boolean]
1111
+ #
1112
+ # source://zeitwerk//lib/zeitwerk/loader/helpers.rb#78
1113
+ def ruby?(path); end
1114
+
1115
+ # : (String) { (String) -> void } -> void
1116
+ #
1117
+ # source://zeitwerk//lib/zeitwerk/loader/helpers.rb#93
1118
+ def walk_up(abspath); end
1119
+ end
1120
+
1121
+ # --- Inflection --------------------------------------------------------------------------------
1122
+ #
1123
+ # source://zeitwerk//lib/zeitwerk/loader/helpers.rb#103
1124
+ module Zeitwerk::Loader::Helpers::CNAME_VALIDATOR; end
1125
+
1126
+ # : Mutex
1127
+ #
1128
+ # source://zeitwerk//lib/zeitwerk/loader.rb#21
1129
+ Zeitwerk::Loader::MUTEX = T.let(T.unsafe(nil), Thread::Mutex)
1130
+
1131
+ # source://zeitwerk//lib/zeitwerk/error.rb#14
1132
+ class Zeitwerk::NameError < ::NameError; end
1133
+
1134
+ # source://zeitwerk//lib/zeitwerk/null_inflector.rb#1
1135
+ class Zeitwerk::NullInflector
1136
+ # : (String, String) -> String
1137
+ #
1138
+ # source://zeitwerk//lib/zeitwerk/null_inflector.rb#3
1139
+ def camelize(basename, _abspath); end
1140
+ end
1141
+
1142
+ # source://zeitwerk//lib/zeitwerk/real_mod_name.rb#3
1143
+ module Zeitwerk::RealModName
1144
+ # Returns the real name of the class or module.
1145
+ #
1146
+ # We need this indirection becasue the `name` method can be overridden, and
1147
+ # because in practice what we really need is the constant paths of modules
1148
+ # with a permanent name, not so much what the user considers to be the name of
1149
+ # a certain class or module of theirs.
1150
+ #
1151
+ # : (Module) -> String?
1152
+ #
1153
+ # source://zeitwerk//lib/zeitwerk/real_mod_name.rb#16
1154
+ def real_mod_name(mod); end
1155
+ end
1156
+
1157
+ # : UnboundMethod
1158
+ #
1159
+ # source://zeitwerk//lib/zeitwerk/real_mod_name.rb#5
1160
+ Zeitwerk::RealModName::UNBOUND_METHOD_MODULE_NAME = T.let(T.unsafe(nil), UnboundMethod)
1161
+
1162
+ # source://zeitwerk//lib/zeitwerk/registry.rb#4
1163
+ module Zeitwerk::Registry
1164
+ class << self
1165
+ # Maps absolute paths to the loaders responsible for them.
1166
+ #
1167
+ # This information is used by our decorated `Kernel#require` to be able to
1168
+ # invoke callbacks and autovivify modules.
1169
+ #
1170
+ # : Zeitwerk::Registry::Autoloads
1171
+ #
1172
+ # @private
1173
+ #
1174
+ # source://zeitwerk//lib/zeitwerk/registry.rb#31
1175
+ def autoloads; end
1176
+
1177
+ # : Zeitwerk::Registry::ExplicitNamespaces
1178
+ #
1179
+ # @private
1180
+ #
1181
+ # source://zeitwerk//lib/zeitwerk/registry.rb#35
1182
+ def explicit_namespaces; end
1183
+
1184
+ # Registers gem loaders to let `for_gem` be idempotent in case of reload.
1185
+ #
1186
+ # : Hash[String, Zeitwerk::Loader]
1187
+ #
1188
+ # @private
1189
+ #
1190
+ # source://zeitwerk//lib/zeitwerk/registry.rb#22
1191
+ def gem_loaders_by_root_file; end
1192
+
1193
+ # : Zeitwerk::Registry::Inceptions
1194
+ #
1195
+ # @private
1196
+ #
1197
+ # source://zeitwerk//lib/zeitwerk/registry.rb#39
1198
+ def inceptions; end
1199
+
1200
+ # This method returns always a loader, the same instance for the same root
1201
+ # file. That is how Zeitwerk::Loader.for_gem is idempotent.
1202
+ #
1203
+ # : (String, namespace: Module, warn_on_extra_files: boolish) -> Zeitwerk::Loader
1204
+ #
1205
+ # @private
1206
+ #
1207
+ # source://zeitwerk//lib/zeitwerk/registry.rb#52
1208
+ def loader_for_gem(root_file, namespace:, warn_on_extra_files:); end
1209
+
1210
+ # Keeps track of all loaders. Useful to broadcast messages and to prevent
1211
+ # them from being garbage collected.
1212
+ #
1213
+ # : Zeitwerk::Registry::Loaders
1214
+ #
1215
+ # @private
1216
+ #
1217
+ # source://zeitwerk//lib/zeitwerk/registry.rb#16
1218
+ def loaders; end
1219
+
1220
+ # : (Zeitwerk::Loader) -> void
1221
+ #
1222
+ # @private
1223
+ #
1224
+ # source://zeitwerk//lib/zeitwerk/registry.rb#43
1225
+ def unregister_loader(loader); end
1226
+ end
1227
+ end
1228
+
1229
+ # source://zeitwerk//lib/zeitwerk/registry/autoloads.rb#2
1230
+ class Zeitwerk::Registry::Autoloads
1231
+ # : () -> void
1232
+ #
1233
+ # @return [Autoloads] a new instance of Autoloads
1234
+ #
1235
+ # source://zeitwerk//lib/zeitwerk/registry/autoloads.rb#4
1236
+ def initialize; end
1237
+
1238
+ # : () -> void
1239
+ #
1240
+ # source://zeitwerk//lib/zeitwerk/registry/autoloads.rb#34
1241
+ def clear; end
1242
+
1243
+ # : () -> bool
1244
+ #
1245
+ # @return [Boolean]
1246
+ #
1247
+ # source://zeitwerk//lib/zeitwerk/registry/autoloads.rb#29
1248
+ def empty?; end
1249
+
1250
+ # : (String, Zeitwerk::Loader) -> Zeitwerk::Loader
1251
+ #
1252
+ # source://zeitwerk//lib/zeitwerk/registry/autoloads.rb#9
1253
+ def register(abspath, loader); end
1254
+
1255
+ # : (String) -> Zeitwerk::Loader?
1256
+ #
1257
+ # @return [Boolean]
1258
+ #
1259
+ # source://zeitwerk//lib/zeitwerk/registry/autoloads.rb#14
1260
+ def registered?(path); end
1261
+
1262
+ # : (String) -> Zeitwerk::Loader?
1263
+ #
1264
+ # source://zeitwerk//lib/zeitwerk/registry/autoloads.rb#19
1265
+ def unregister(abspath); end
1266
+
1267
+ # : (Zeitwerk::Loader) -> void
1268
+ #
1269
+ # source://zeitwerk//lib/zeitwerk/registry/autoloads.rb#24
1270
+ def unregister_loader(loader); end
1271
+ end
1272
+
1273
+ # A registry for explicit namespaces.
1274
+ #
1275
+ # When a loader determines that a certain file should define an explicit
1276
+ # namespace, it registers it here, associating its cref with itself.
1277
+ #
1278
+ # If the namespace is autoloaded, our const_added callback retrieves its
1279
+ # loader by calling loader_for. That way, the loader is able to scan the
1280
+ # subdirectories that conform the namespace and set autoloads for their
1281
+ # expected constants just in time.
1282
+ #
1283
+ # Once autoloaded, the namespace is unregistered.
1284
+ #
1285
+ # The implementation assumes an explicit namespace is managed by one loader.
1286
+ # Loaders that reopen namespaces owned by other projects are responsible for
1287
+ # loading their constant before setup. This is documented.
1288
+ #
1289
+ # **This is a private module.**
1290
+ #
1291
+ # source://zeitwerk//lib/zeitwerk/registry/explicit_namespaces.rb#21
1292
+ class Zeitwerk::Registry::ExplicitNamespaces
1293
+ # : () -> void
1294
+ #
1295
+ # @return [ExplicitNamespaces] a new instance of ExplicitNamespaces
1296
+ #
1297
+ # source://zeitwerk//lib/zeitwerk/registry/explicit_namespaces.rb#23
1298
+ def initialize; end
1299
+
1300
+ # : () -> void
1301
+ #
1302
+ # source://zeitwerk//lib/zeitwerk/registry/explicit_namespaces.rb#57
1303
+ def clear; end
1304
+
1305
+ # : (Module, Symbol) -> Zeitwerk::Loader?
1306
+ #
1307
+ # source://zeitwerk//lib/zeitwerk/registry/explicit_namespaces.rb#40
1308
+ def loader_for(mod, cname); end
1309
+
1310
+ # Registers `cref` as being the constant path of an explicit namespace
1311
+ # managed by `loader`.
1312
+ #
1313
+ # : (Zeitwerk::Cref, Zeitwerk::Loader) -> void
1314
+ #
1315
+ # source://zeitwerk//lib/zeitwerk/registry/explicit_namespaces.rb#35
1316
+ def register(cref, loader); end
1317
+
1318
+ # This is an internal method only used by the test suite.
1319
+ #
1320
+ # : (Zeitwerk::Cref) -> Zeitwerk::Loader?
1321
+ #
1322
+ # @return [Boolean]
1323
+ #
1324
+ # source://zeitwerk//lib/zeitwerk/registry/explicit_namespaces.rb#52
1325
+ def registered?(cref); end
1326
+
1327
+ # : (Zeitwerk::Loader) -> void
1328
+ #
1329
+ # source://zeitwerk//lib/zeitwerk/registry/explicit_namespaces.rb#45
1330
+ def unregister_loader(loader); end
1331
+ end
1332
+
1333
+ # Loaders know their own inceptions, but there is a use case in which we need
1334
+ # to know if a given cpath is an inception globally. This is what this
1335
+ # registry is for.
1336
+ #
1337
+ # source://zeitwerk//lib/zeitwerk/registry/inceptions.rb#5
1338
+ class Zeitwerk::Registry::Inceptions
1339
+ # : () -> void
1340
+ #
1341
+ # @return [Inceptions] a new instance of Inceptions
1342
+ #
1343
+ # source://zeitwerk//lib/zeitwerk/registry/inceptions.rb#7
1344
+ def initialize; end
1345
+
1346
+ # : () -> void
1347
+ #
1348
+ # source://zeitwerk//lib/zeitwerk/registry/inceptions.rb#27
1349
+ def clear; end
1350
+
1351
+ # : (Zeitwerk::Cref, String) -> void
1352
+ #
1353
+ # source://zeitwerk//lib/zeitwerk/registry/inceptions.rb#12
1354
+ def register(cref, abspath); end
1355
+
1356
+ # : (Zeitwerk::Cref) -> String?
1357
+ #
1358
+ # @return [Boolean]
1359
+ #
1360
+ # source://zeitwerk//lib/zeitwerk/registry/inceptions.rb#17
1361
+ def registered?(cref); end
1362
+
1363
+ # : (Zeitwerk::Cref) -> void
1364
+ #
1365
+ # source://zeitwerk//lib/zeitwerk/registry/inceptions.rb#22
1366
+ def unregister(cref); end
1367
+ end
1368
+
1369
+ # source://zeitwerk//lib/zeitwerk/registry/loaders.rb#2
1370
+ class Zeitwerk::Registry::Loaders
1371
+ # : () -> void
1372
+ #
1373
+ # @return [Loaders] a new instance of Loaders
1374
+ #
1375
+ # source://zeitwerk//lib/zeitwerk/registry/loaders.rb#4
1376
+ def initialize; end
1377
+
1378
+ # : () -> void
1379
+ #
1380
+ # source://zeitwerk//lib/zeitwerk/registry/loaders.rb#29
1381
+ def clear; end
1382
+
1383
+ # : ({ (Zeitwerk::Loader) -> void }) -> void
1384
+ #
1385
+ # source://zeitwerk//lib/zeitwerk/registry/loaders.rb#9
1386
+ def each(&block); end
1387
+
1388
+ # : (Zeitwerk::Loader) -> void
1389
+ #
1390
+ # source://zeitwerk//lib/zeitwerk/registry/loaders.rb#14
1391
+ def register(loader); end
1392
+
1393
+ # : (Zeitwerk::Loader) -> bool
1394
+ #
1395
+ # @return [Boolean]
1396
+ #
1397
+ # source://zeitwerk//lib/zeitwerk/registry/loaders.rb#24
1398
+ def registered?(loader); end
1399
+
1400
+ # : (Zeitwerk::Loader) -> Zeitwerk::Loader?
1401
+ #
1402
+ # source://zeitwerk//lib/zeitwerk/registry/loaders.rb#19
1403
+ def unregister(loader); end
1404
+ end
1405
+
1406
+ # source://zeitwerk//lib/zeitwerk/error.rb#7
1407
+ class Zeitwerk::ReloadingDisabledError < ::Zeitwerk::Error
1408
+ # : () -> void
1409
+ #
1410
+ # @return [ReloadingDisabledError] a new instance of ReloadingDisabledError
1411
+ #
1412
+ # source://zeitwerk//lib/zeitwerk/error.rb#9
1413
+ def initialize; end
1414
+ end
1415
+
1416
+ # source://zeitwerk//lib/zeitwerk/error.rb#17
1417
+ class Zeitwerk::SetupRequired < ::Zeitwerk::Error
1418
+ # : () -> void
1419
+ #
1420
+ # @return [SetupRequired] a new instance of SetupRequired
1421
+ #
1422
+ # source://zeitwerk//lib/zeitwerk/error.rb#19
1423
+ def initialize; end
1424
+ end
1425
+
1426
+ # : String
1427
+ #
1428
+ # source://zeitwerk//lib/zeitwerk/version.rb#5
1429
+ Zeitwerk::VERSION = T.let(T.unsafe(nil), String)