spoom 1.5.4 → 1.6.0

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 (74) hide show
  1. checksums.yaml +4 -4
  2. data/lib/spoom/backtrace_filter/minitest.rb +2 -3
  3. data/lib/spoom/cli/deadcode.rb +1 -2
  4. data/lib/spoom/cli/helper.rb +36 -28
  5. data/lib/spoom/cli/srb/assertions.rb +48 -0
  6. data/lib/spoom/cli/srb/bump.rb +1 -2
  7. data/lib/spoom/cli/srb/sigs.rb +133 -18
  8. data/lib/spoom/cli/srb.rb +8 -4
  9. data/lib/spoom/cli.rb +1 -2
  10. data/lib/spoom/colors.rb +2 -6
  11. data/lib/spoom/context/bundle.rb +8 -9
  12. data/lib/spoom/context/exec.rb +2 -5
  13. data/lib/spoom/context/file_system.rb +12 -19
  14. data/lib/spoom/context/git.rb +14 -19
  15. data/lib/spoom/context/sorbet.rb +13 -26
  16. data/lib/spoom/context.rb +3 -7
  17. data/lib/spoom/coverage/d3/base.rb +6 -8
  18. data/lib/spoom/coverage/d3/circle_map.rb +6 -16
  19. data/lib/spoom/coverage/d3/pie.rb +14 -19
  20. data/lib/spoom/coverage/d3/timeline.rb +46 -47
  21. data/lib/spoom/coverage/d3.rb +2 -4
  22. data/lib/spoom/coverage/report.rb +38 -76
  23. data/lib/spoom/coverage/snapshot.rb +7 -13
  24. data/lib/spoom/coverage.rb +3 -5
  25. data/lib/spoom/deadcode/definition.rb +12 -14
  26. data/lib/spoom/deadcode/erb.rb +10 -8
  27. data/lib/spoom/deadcode/index.rb +19 -23
  28. data/lib/spoom/deadcode/indexer.rb +5 -6
  29. data/lib/spoom/deadcode/plugins/action_mailer.rb +2 -3
  30. data/lib/spoom/deadcode/plugins/action_mailer_preview.rb +2 -3
  31. data/lib/spoom/deadcode/plugins/actionpack.rb +4 -4
  32. data/lib/spoom/deadcode/plugins/active_model.rb +2 -3
  33. data/lib/spoom/deadcode/plugins/active_record.rb +2 -3
  34. data/lib/spoom/deadcode/plugins/active_support.rb +2 -1
  35. data/lib/spoom/deadcode/plugins/base.rb +29 -32
  36. data/lib/spoom/deadcode/plugins/graphql.rb +2 -3
  37. data/lib/spoom/deadcode/plugins/minitest.rb +4 -4
  38. data/lib/spoom/deadcode/plugins/namespaces.rb +5 -5
  39. data/lib/spoom/deadcode/plugins/rails.rb +5 -5
  40. data/lib/spoom/deadcode/plugins/rubocop.rb +4 -4
  41. data/lib/spoom/deadcode/plugins/ruby.rb +3 -4
  42. data/lib/spoom/deadcode/plugins/sorbet.rb +12 -6
  43. data/lib/spoom/deadcode/plugins/thor.rb +2 -3
  44. data/lib/spoom/deadcode/plugins.rb +2 -4
  45. data/lib/spoom/deadcode/remover.rb +37 -59
  46. data/lib/spoom/deadcode/send.rb +2 -8
  47. data/lib/spoom/file_collector.rb +10 -18
  48. data/lib/spoom/file_tree.rb +31 -46
  49. data/lib/spoom/location.rb +9 -20
  50. data/lib/spoom/model/builder.rb +60 -15
  51. data/lib/spoom/model/model.rb +65 -68
  52. data/lib/spoom/model/namespace_visitor.rb +3 -2
  53. data/lib/spoom/model/reference.rb +4 -8
  54. data/lib/spoom/model/references_visitor.rb +49 -29
  55. data/lib/spoom/parse.rb +17 -3
  56. data/lib/spoom/poset.rb +17 -19
  57. data/lib/spoom/printer.rb +10 -13
  58. data/lib/spoom/sorbet/assertions.rb +278 -0
  59. data/lib/spoom/sorbet/config.rb +8 -12
  60. data/lib/spoom/sorbet/errors.rb +16 -31
  61. data/lib/spoom/sorbet/lsp/base.rb +9 -15
  62. data/lib/spoom/sorbet/lsp/errors.rb +8 -16
  63. data/lib/spoom/sorbet/lsp/structures.rb +36 -59
  64. data/lib/spoom/sorbet/lsp.rb +15 -17
  65. data/lib/spoom/sorbet/metrics.rb +3 -5
  66. data/lib/spoom/sorbet/sigils.rb +7 -11
  67. data/lib/spoom/sorbet/sigs.rb +118 -25
  68. data/lib/spoom/sorbet.rb +3 -9
  69. data/lib/spoom/timeline.rb +4 -6
  70. data/lib/spoom/version.rb +1 -1
  71. data/lib/spoom/visitor.rb +298 -151
  72. data/lib/spoom.rb +0 -2
  73. data/rbi/spoom.rbi +3963 -0
  74. metadata +6 -3
data/rbi/spoom.rbi ADDED
@@ -0,0 +1,3963 @@
1
+ # typed: true
2
+
3
+ # DO NOT EDIT MANUALLY
4
+ # This is an autogenerated file for types exported from the `spoom` gem.
5
+ # Please instead update this file by running `spoom srb sigs export`.
6
+
7
+ module Spoom
8
+ class << self
9
+ sig { params(ruby: ::String, file: ::String).returns(::Prism::Node) }
10
+ def parse_ruby(ruby, file:); end
11
+
12
+ sig { params(ruby: ::String, file: ::String).returns([::Prism::Node, T::Array[::Prism::Comment]]) }
13
+ def parse_ruby_with_comments(ruby, file:); end
14
+ end
15
+ end
16
+
17
+ module Spoom::Cli; end
18
+
19
+ class Spoom::Cli::Deadcode < ::Thor
20
+ include ::Spoom::Colorize
21
+ include ::Spoom::Cli::Helper
22
+
23
+ sig { params(paths: ::String).void }
24
+ def deadcode(*paths); end
25
+
26
+ def help(command = T.unsafe(nil), subcommand = T.unsafe(nil)); end
27
+ def remove(location_string); end
28
+ end
29
+
30
+ module Spoom::Cli::Helper
31
+ include ::Spoom::Colorize
32
+
33
+ requires_ancestor { Thor }
34
+
35
+ sig { params(string: ::String).returns(::String) }
36
+ def blue(string); end
37
+
38
+ # Collect files from `paths`, defaulting to `exec_path`
39
+ sig { params(paths: T::Array[::String]).returns(T::Array[::String]) }
40
+ def collect_files(paths); end
41
+
42
+ # Is the `--color` option true?
43
+ sig { returns(T::Boolean) }
44
+ def color?; end
45
+
46
+ # Colorize a string if `color?`
47
+ sig { params(string: ::String, color: ::Spoom::Color).returns(::String) }
48
+ def colorize(string, *color); end
49
+
50
+ # Returns the context at `--path` (by default the current working directory)
51
+ sig { returns(::Spoom::Context) }
52
+ def context; end
53
+
54
+ # Raise if `spoom` is not ran inside a context with a `sorbet/config` file
55
+ sig { returns(::Spoom::Context) }
56
+ def context_requiring_sorbet!; end
57
+
58
+ sig { params(string: ::String).returns(::String) }
59
+ def cyan(string); end
60
+
61
+ # Return the path specified through `--path`
62
+ sig { returns(::String) }
63
+ def exec_path; end
64
+
65
+ sig { params(string: ::String).returns(::String) }
66
+ def gray(string); end
67
+
68
+ sig { params(string: ::String).returns(::String) }
69
+ def green(string); end
70
+
71
+ sig { params(string: ::String).returns(::String) }
72
+ def highlight(string); end
73
+
74
+ sig { params(string: ::String).returns(::String) }
75
+ def red(string); end
76
+
77
+ # Print `message` on `$stdout`
78
+ sig { params(message: ::String).void }
79
+ def say(message); end
80
+
81
+ # Print `message` on `$stderr`
82
+ #
83
+ # The message is prefixed by a status (default: `Error`).
84
+ sig { params(message: ::String, status: T.nilable(::String), nl: T::Boolean).void }
85
+ def say_error(message, status: T.unsafe(nil), nl: T.unsafe(nil)); end
86
+
87
+ # Print `message` on `$stderr`
88
+ #
89
+ # The message is prefixed by a status (default: `Warning`).
90
+ sig { params(message: ::String, status: T.nilable(::String), nl: T::Boolean).void }
91
+ def say_warning(message, status: T.unsafe(nil), nl: T.unsafe(nil)); end
92
+
93
+ sig { params(string: ::String).returns(::String) }
94
+ def yellow(string); end
95
+ end
96
+
97
+ class Spoom::Cli::Main < ::Thor
98
+ include ::Spoom::Colorize
99
+ include ::Spoom::Cli::Helper
100
+
101
+ def __print_version; end
102
+
103
+ sig { params(directory: ::String).void }
104
+ def bump(directory = T.unsafe(nil)); end
105
+
106
+ def coverage(*args); end
107
+ def deadcode(*args); end
108
+ def lsp(*args); end
109
+ def srb(*args); end
110
+ def tc(*paths_to_select); end
111
+
112
+ class << self
113
+ # @return [Boolean]
114
+ def exit_on_failure?; end
115
+ end
116
+ end
117
+
118
+ Spoom::Cli::Main::SORT_CODE = T.let(T.unsafe(nil), String)
119
+ Spoom::Cli::Main::SORT_ENUM = T.let(T.unsafe(nil), Array)
120
+ Spoom::Cli::Main::SORT_LOC = T.let(T.unsafe(nil), String)
121
+ module Spoom::Cli::Srb; end
122
+
123
+ class Spoom::Cli::Srb::Assertions < ::Thor
124
+ include ::Spoom::Colorize
125
+ include ::Spoom::Cli::Helper
126
+
127
+ def help(command = T.unsafe(nil), subcommand = T.unsafe(nil)); end
128
+ def transform_files(files, &block); end
129
+ def translate(*paths); end
130
+ end
131
+
132
+ class Spoom::Cli::Srb::Bump < ::Thor
133
+ include ::Spoom::Colorize
134
+ include ::Spoom::Cli::Helper
135
+
136
+ sig { params(directory: ::String).void }
137
+ def bump(directory = T.unsafe(nil)); end
138
+
139
+ def help(command = T.unsafe(nil), subcommand = T.unsafe(nil)); end
140
+ def print_changes(files, command:, from: T.unsafe(nil), to: T.unsafe(nil), dry: T.unsafe(nil), path: T.unsafe(nil)); end
141
+ def undo_changes(files, from_strictness); end
142
+ end
143
+
144
+ class Spoom::Cli::Srb::Coverage < ::Thor
145
+ include ::Spoom::Colorize
146
+ include ::Spoom::Cli::Helper
147
+
148
+ def bundle_install(path, sha); end
149
+ def help(command = T.unsafe(nil), subcommand = T.unsafe(nil)); end
150
+ def message_no_data(file); end
151
+ def open(file = T.unsafe(nil)); end
152
+ def parse_time(string, option); end
153
+ def report; end
154
+ def snapshot; end
155
+ def timeline; end
156
+ end
157
+
158
+ Spoom::Cli::Srb::Coverage::DATA_DIR = T.let(T.unsafe(nil), String)
159
+
160
+ class Spoom::Cli::Srb::LSP < ::Thor
161
+ include ::Spoom::Colorize
162
+ include ::Spoom::Cli::Helper
163
+
164
+ # TODO: options, filter, limit, kind etc.. filter rbi
165
+ def defs(file, line, col); end
166
+
167
+ # TODO: options, filter, limit, kind etc.. filter rbi
168
+ def find(query); end
169
+
170
+ def help(command = T.unsafe(nil), subcommand = T.unsafe(nil)); end
171
+
172
+ # TODO: options, filter, limit, kind etc.. filter rbi
173
+ def hover(file, line, col); end
174
+
175
+ # TODO: options, filter, limit, kind etc.. filter rbi
176
+ def list; end
177
+
178
+ def lsp_client; end
179
+
180
+ # TODO: options, filter, limit, kind etc.. filter rbi
181
+ def refs(file, line, col); end
182
+
183
+ def run(&block); end
184
+
185
+ # TODO: options, filter, limit, kind etc.. filter rbi
186
+ def sigs(file, line, col); end
187
+
188
+ def symbol_printer; end
189
+
190
+ # TODO: options, filter, limit, kind etc.. filter rbi
191
+ def symbols(file); end
192
+
193
+ def to_uri(path); end
194
+
195
+ # TODO: options, filter, limit, kind etc.. filter rbi
196
+ def types(file, line, col); end
197
+ end
198
+
199
+ class Spoom::Cli::Srb::Main < ::Thor
200
+ def assertions(*args); end
201
+ def bump(*args); end
202
+ def coverage(*args); end
203
+ def help(command = T.unsafe(nil), subcommand = T.unsafe(nil)); end
204
+ def lsp(*args); end
205
+ def sigs(*args); end
206
+ def tc(*args); end
207
+ end
208
+
209
+ class Spoom::Cli::Srb::Sigs < ::Thor
210
+ include ::Spoom::Colorize
211
+ include ::Spoom::Cli::Helper
212
+
213
+ def exec(context, command); end
214
+ def export(output_path = T.unsafe(nil)); end
215
+ def help(command = T.unsafe(nil), subcommand = T.unsafe(nil)); end
216
+ def strip(*paths); end
217
+ def transform_files(files, &block); end
218
+ def translate(*paths); end
219
+ end
220
+
221
+ class Spoom::Cli::Srb::Tc < ::Thor
222
+ include ::Spoom::Colorize
223
+ include ::Spoom::Cli::Helper
224
+
225
+ def colorize_message(message); end
226
+ def format_error(error, format); end
227
+ def help(command = T.unsafe(nil), subcommand = T.unsafe(nil)); end
228
+ def tc(*paths_to_select); end
229
+ end
230
+
231
+ Spoom::Cli::Srb::Tc::DEFAULT_FORMAT = T.let(T.unsafe(nil), String)
232
+ Spoom::Cli::Srb::Tc::SORT_CODE = T.let(T.unsafe(nil), String)
233
+ Spoom::Cli::Srb::Tc::SORT_ENUM = T.let(T.unsafe(nil), Array)
234
+ Spoom::Cli::Srb::Tc::SORT_LOC = T.let(T.unsafe(nil), String)
235
+
236
+ class Spoom::Color < ::T::Enum
237
+ enums do
238
+ BLACK = new
239
+ BLUE = new
240
+ BOLD = new
241
+ CLEAR = new
242
+ CYAN = new
243
+ GREEN = new
244
+ LIGHT_BLACK = new
245
+ LIGHT_BLUE = new
246
+ LIGHT_CYAN = new
247
+ LIGHT_GREEN = new
248
+ LIGHT_MAGENTA = new
249
+ LIGHT_RED = new
250
+ LIGHT_WHITE = new
251
+ LIGHT_YELLOW = new
252
+ MAGENTA = new
253
+ RED = new
254
+ WHITE = new
255
+ YELLOW = new
256
+ end
257
+
258
+ sig { returns(::String) }
259
+ def ansi_code; end
260
+ end
261
+
262
+ module Spoom::Colorize
263
+ sig { params(string: ::String, color: ::Spoom::Color).returns(::String) }
264
+ def set_color(string, *color); end
265
+ end
266
+
267
+ # An abstraction to a Ruby project context
268
+ #
269
+ # A context maps to a directory in the file system.
270
+ # It is used to manipulate files and run commands in the context of this directory.
271
+ class Spoom::Context
272
+ include ::Spoom::Context::Bundle
273
+ include ::Spoom::Context::Exec
274
+ include ::Spoom::Context::FileSystem
275
+ include ::Spoom::Context::Git
276
+ include ::Spoom::Context::Sorbet
277
+
278
+ # Create a new context about `absolute_path`
279
+ #
280
+ # The directory will not be created if it doesn't exist.
281
+ # Call `#make!` to create it.
282
+ sig { params(absolute_path: ::String).void }
283
+ def initialize(absolute_path); end
284
+
285
+ # The absolute path to the directory this context is about
286
+ sig { returns(::String) }
287
+ def absolute_path; end
288
+
289
+ class << self
290
+ # Create a new context in the system's temporary directory
291
+ #
292
+ # `name` is used as prefix to the temporary directory name.
293
+ # The directory will be created if it doesn't exist.
294
+ sig { params(name: T.nilable(::String)).returns(T.attached_class) }
295
+ def mktmp!(name = T.unsafe(nil)); end
296
+ end
297
+ end
298
+
299
+ # Bundle features for a context
300
+ module Spoom::Context::Bundle
301
+ requires_ancestor { Spoom::Context }
302
+
303
+ # Run a command with `bundle` in this context directory
304
+ sig { params(command: ::String, version: T.nilable(::String), capture_err: T::Boolean).returns(::Spoom::ExecResult) }
305
+ def bundle(command, version: T.unsafe(nil), capture_err: T.unsafe(nil)); end
306
+
307
+ # Run a command `bundle exec` in this context directory
308
+ sig { params(command: ::String, version: T.nilable(::String), capture_err: T::Boolean).returns(::Spoom::ExecResult) }
309
+ def bundle_exec(command, version: T.unsafe(nil), capture_err: T.unsafe(nil)); end
310
+
311
+ # Run `bundle install` in this context directory
312
+ sig { params(version: T.nilable(::String), capture_err: T::Boolean).returns(::Spoom::ExecResult) }
313
+ def bundle_install!(version: T.unsafe(nil), capture_err: T.unsafe(nil)); end
314
+
315
+ # Get `gem` version from the `Gemfile.lock` content
316
+ #
317
+ # Returns `nil` if `gem` cannot be found in the Gemfile.
318
+ sig { params(gem: ::String).returns(T.nilable(::Gem::Version)) }
319
+ def gem_version_from_gemfile_lock(gem); end
320
+
321
+ sig { returns(T::Hash[::String, ::Bundler::LazySpecification]) }
322
+ def gemfile_lock_specs; end
323
+
324
+ # Read the contents of the Gemfile in this context directory
325
+ sig { returns(T.nilable(::String)) }
326
+ def read_gemfile; end
327
+
328
+ # Read the contents of the Gemfile.lock in this context directory
329
+ sig { returns(T.nilable(::String)) }
330
+ def read_gemfile_lock; end
331
+
332
+ # Set the `contents` of the Gemfile in this context directory
333
+ sig { params(contents: ::String, append: T::Boolean).void }
334
+ def write_gemfile!(contents, append: T.unsafe(nil)); end
335
+ end
336
+
337
+ # Execution features for a context
338
+ module Spoom::Context::Exec
339
+ requires_ancestor { Spoom::Context }
340
+
341
+ # Run a command in this context directory
342
+ sig { params(command: ::String, capture_err: T::Boolean).returns(::Spoom::ExecResult) }
343
+ def exec(command, capture_err: T.unsafe(nil)); end
344
+ end
345
+
346
+ # File System features for a context
347
+ module Spoom::Context::FileSystem
348
+ requires_ancestor { Spoom::Context }
349
+
350
+ # Returns the absolute path to `relative_path` in the context's directory
351
+ sig { params(relative_path: ::String).returns(::String) }
352
+ def absolute_path_to(relative_path); end
353
+
354
+ sig do
355
+ params(
356
+ allow_extensions: T::Array[::String],
357
+ allow_mime_types: T::Array[::String],
358
+ exclude_patterns: T::Array[::String]
359
+ ).returns(T::Array[::String])
360
+ end
361
+ def collect_files(allow_extensions: T.unsafe(nil), allow_mime_types: T.unsafe(nil), exclude_patterns: T.unsafe(nil)); end
362
+
363
+ # Delete this context and its content
364
+ #
365
+ # Warning: it will `rm -rf` the context directory on the file system.
366
+ sig { void }
367
+ def destroy!; end
368
+
369
+ # Does the context directory at `absolute_path` exist and is a directory?
370
+ sig { returns(T::Boolean) }
371
+ def exist?; end
372
+
373
+ # Does `relative_path` point to an existing file in this context directory?
374
+ sig { params(relative_path: ::String).returns(T::Boolean) }
375
+ def file?(relative_path); end
376
+
377
+ # List all files in this context matching `pattern`
378
+ sig { params(pattern: ::String).returns(T::Array[::String]) }
379
+ def glob(pattern = T.unsafe(nil)); end
380
+
381
+ # List all files at the top level of this context directory
382
+ sig { returns(T::Array[::String]) }
383
+ def list; end
384
+
385
+ # Create the context directory at `absolute_path`
386
+ sig { void }
387
+ def mkdir!; end
388
+
389
+ # Move the file or directory from `from_relative_path` to `to_relative_path`
390
+ sig { params(from_relative_path: ::String, to_relative_path: ::String).void }
391
+ def move!(from_relative_path, to_relative_path); end
392
+
393
+ # Return the contents of the file at `relative_path` in this context directory
394
+ #
395
+ # Will raise if the file doesn't exist.
396
+ sig { params(relative_path: ::String).returns(::String) }
397
+ def read(relative_path); end
398
+
399
+ # Remove the path at `relative_path` (recursive + force) in this context directory
400
+ sig { params(relative_path: ::String).void }
401
+ def remove!(relative_path); end
402
+
403
+ # Write `contents` in the file at `relative_path` in this context directory
404
+ #
405
+ # Append to the file if `append` is true.
406
+ sig { params(relative_path: ::String, contents: ::String, append: T::Boolean).void }
407
+ def write!(relative_path, contents = T.unsafe(nil), append: T.unsafe(nil)); end
408
+ end
409
+
410
+ # Git features for a context
411
+ module Spoom::Context::Git
412
+ requires_ancestor { Spoom::Context }
413
+
414
+ # Run a command prefixed by `git` in this context directory
415
+ sig { params(command: ::String).returns(::Spoom::ExecResult) }
416
+ def git(command); end
417
+
418
+ # Run `git checkout` in this context directory
419
+ sig { params(ref: ::String).returns(::Spoom::ExecResult) }
420
+ def git_checkout!(ref: T.unsafe(nil)); end
421
+
422
+ # Run `git checkout -b <branch-name> <ref>` in this context directory
423
+ sig { params(branch_name: ::String, ref: T.nilable(::String)).returns(::Spoom::ExecResult) }
424
+ def git_checkout_new_branch!(branch_name, ref: T.unsafe(nil)); end
425
+
426
+ # Run `git add . && git commit` in this context directory
427
+ sig { params(message: ::String, time: ::Time, allow_empty: T::Boolean).returns(::Spoom::ExecResult) }
428
+ def git_commit!(message: T.unsafe(nil), time: T.unsafe(nil), allow_empty: T.unsafe(nil)); end
429
+
430
+ # Get the current git branch in this context directory
431
+ sig { returns(T.nilable(::String)) }
432
+ def git_current_branch; end
433
+
434
+ # Run `git diff` in this context directory
435
+ sig { params(arg: ::String).returns(::Spoom::ExecResult) }
436
+ def git_diff(*arg); end
437
+
438
+ # Run `git init` in this context directory
439
+ #
440
+ # Warning: passing a branch will run `git init -b <branch>` which is only available in git 2.28+.
441
+ # In older versions, use `git_init!` followed by `git("checkout -b <branch>")`.
442
+ sig { params(branch: T.nilable(::String)).returns(::Spoom::ExecResult) }
443
+ def git_init!(branch: T.unsafe(nil)); end
444
+
445
+ # Get the last commit in the currently checked out branch
446
+ sig { params(short_sha: T::Boolean).returns(T.nilable(::Spoom::Git::Commit)) }
447
+ def git_last_commit(short_sha: T.unsafe(nil)); end
448
+
449
+ sig { params(arg: ::String).returns(::Spoom::ExecResult) }
450
+ def git_log(*arg); end
451
+
452
+ # Run `git push <remote> <ref>` in this context directory
453
+ sig { params(remote: ::String, ref: ::String, force: T::Boolean).returns(::Spoom::ExecResult) }
454
+ def git_push!(remote, ref, force: T.unsafe(nil)); end
455
+
456
+ sig { params(arg: ::String).returns(::Spoom::ExecResult) }
457
+ def git_show(*arg); end
458
+
459
+ # Is there uncommitted changes in this context directory?
460
+ sig { params(path: ::String).returns(T::Boolean) }
461
+ def git_workdir_clean?(path: T.unsafe(nil)); end
462
+ end
463
+
464
+ # Sorbet features for a context
465
+ module Spoom::Context::Sorbet
466
+ requires_ancestor { Spoom::Context }
467
+
468
+ # Does this context has a `sorbet/config` file?
469
+ sig { returns(T::Boolean) }
470
+ def has_sorbet_config?; end
471
+
472
+ # Read the strictness sigil from the file at `relative_path` (returns `nil` if no sigil)
473
+ sig { params(relative_path: ::String).returns(T.nilable(::String)) }
474
+ def read_file_strictness(relative_path); end
475
+
476
+ # Read the contents of `sorbet/config` in this context directory
477
+ sig { returns(::String) }
478
+ def read_sorbet_config; end
479
+
480
+ sig { returns(::Spoom::Sorbet::Config) }
481
+ def sorbet_config; end
482
+
483
+ # Get the commit introducing the `sorbet/config` file
484
+ sig { returns(T.nilable(::Spoom::Git::Commit)) }
485
+ def sorbet_intro_commit; end
486
+
487
+ # Get the commit removing the `sorbet/config` file
488
+ sig { returns(T.nilable(::Spoom::Git::Commit)) }
489
+ def sorbet_removal_commit; end
490
+
491
+ # Run `bundle exec srb` in this context directory
492
+ sig { params(arg: ::String, sorbet_bin: T.nilable(::String), capture_err: T::Boolean).returns(::Spoom::ExecResult) }
493
+ def srb(*arg, sorbet_bin: T.unsafe(nil), capture_err: T.unsafe(nil)); end
494
+
495
+ # List all files typechecked by Sorbet from its `config`
496
+ sig { params(with_config: T.nilable(::Spoom::Sorbet::Config), include_rbis: T::Boolean).returns(T::Array[::String]) }
497
+ def srb_files(with_config: T.unsafe(nil), include_rbis: T.unsafe(nil)); end
498
+
499
+ # List all files typechecked by Sorbet from its `config` that matches `strictness`
500
+ sig do
501
+ params(
502
+ strictness: ::String,
503
+ with_config: T.nilable(::Spoom::Sorbet::Config),
504
+ include_rbis: T::Boolean
505
+ ).returns(T::Array[::String])
506
+ end
507
+ def srb_files_with_strictness(strictness, with_config: T.unsafe(nil), include_rbis: T.unsafe(nil)); end
508
+
509
+ sig do
510
+ params(
511
+ arg: ::String,
512
+ sorbet_bin: T.nilable(::String),
513
+ capture_err: T::Boolean
514
+ ).returns(T.nilable(T::Hash[::String, ::Integer]))
515
+ end
516
+ def srb_metrics(*arg, sorbet_bin: T.unsafe(nil), capture_err: T.unsafe(nil)); end
517
+
518
+ sig { params(arg: ::String, sorbet_bin: T.nilable(::String), capture_err: T::Boolean).returns(::Spoom::ExecResult) }
519
+ def srb_tc(*arg, sorbet_bin: T.unsafe(nil), capture_err: T.unsafe(nil)); end
520
+
521
+ sig { params(arg: ::String, sorbet_bin: T.nilable(::String), capture_err: T::Boolean).returns(T.nilable(::String)) }
522
+ def srb_version(*arg, sorbet_bin: T.unsafe(nil), capture_err: T.unsafe(nil)); end
523
+
524
+ # Set the `contents` of `sorbet/config` in this context directory
525
+ sig { params(contents: ::String, append: T::Boolean).void }
526
+ def write_sorbet_config!(contents, append: T.unsafe(nil)); end
527
+ end
528
+
529
+ module Spoom::Coverage
530
+ class << self
531
+ sig { params(context: ::Spoom::Context).returns(::Spoom::FileTree) }
532
+ def file_tree(context); end
533
+
534
+ sig do
535
+ params(
536
+ context: ::Spoom::Context,
537
+ snapshots: T::Array[::Spoom::Coverage::Snapshot],
538
+ palette: ::Spoom::Coverage::D3::ColorPalette
539
+ ).returns(::Spoom::Coverage::Report)
540
+ end
541
+ def report(context, snapshots, palette:); end
542
+
543
+ sig do
544
+ params(
545
+ context: ::Spoom::Context,
546
+ rbi: T::Boolean,
547
+ sorbet_bin: T.nilable(::String)
548
+ ).returns(::Spoom::Coverage::Snapshot)
549
+ end
550
+ def snapshot(context, rbi: T.unsafe(nil), sorbet_bin: T.unsafe(nil)); end
551
+ end
552
+ end
553
+
554
+ module Spoom::Coverage::Cards; end
555
+
556
+ class Spoom::Coverage::Cards::Card < ::Spoom::Coverage::Template
557
+ sig { params(template: ::String, title: T.nilable(::String), body: T.nilable(::String)).void }
558
+ def initialize(template: T.unsafe(nil), title: T.unsafe(nil), body: T.unsafe(nil)); end
559
+
560
+ # @return [String, nil]
561
+ def body; end
562
+
563
+ sig { returns(T.nilable(::String)) }
564
+ def title; end
565
+ end
566
+
567
+ Spoom::Coverage::Cards::Card::TEMPLATE = T.let(T.unsafe(nil), String)
568
+
569
+ # @abstract It cannot be directly instantiated. Subclasses must implement the `abstract` methods below.
570
+ class Spoom::Coverage::Cards::Erb < ::Spoom::Coverage::Cards::Card
571
+ abstract!
572
+
573
+ sig { void }
574
+ def initialize; end
575
+
576
+ # @abstract
577
+ sig { abstract.returns(::String) }
578
+ def erb; end
579
+
580
+ sig { override.returns(::String) }
581
+ def html; end
582
+ end
583
+
584
+ class Spoom::Coverage::Cards::Map < ::Spoom::Coverage::Cards::Card
585
+ sig do
586
+ params(
587
+ file_tree: ::Spoom::FileTree,
588
+ nodes_strictnesses: T::Hash[::Spoom::FileTree::Node, T.nilable(::String)],
589
+ nodes_strictness_scores: T::Hash[::Spoom::FileTree::Node, ::Float],
590
+ title: ::String
591
+ ).void
592
+ end
593
+ def initialize(file_tree:, nodes_strictnesses:, nodes_strictness_scores:, title: T.unsafe(nil)); end
594
+ end
595
+
596
+ class Spoom::Coverage::Cards::Snapshot < ::Spoom::Coverage::Cards::Card
597
+ sig { params(snapshot: ::Spoom::Coverage::Snapshot, title: ::String).void }
598
+ def initialize(snapshot:, title: T.unsafe(nil)); end
599
+
600
+ sig { returns(::Spoom::Coverage::D3::Pie::Calls) }
601
+ def pie_calls; end
602
+
603
+ sig { returns(::Spoom::Coverage::D3::Pie::Sigils) }
604
+ def pie_sigils; end
605
+
606
+ sig { returns(::Spoom::Coverage::D3::Pie::Sigs) }
607
+ def pie_sigs; end
608
+
609
+ sig { returns(::Spoom::Coverage::Snapshot) }
610
+ def snapshot; end
611
+ end
612
+
613
+ Spoom::Coverage::Cards::Snapshot::TEMPLATE = T.let(T.unsafe(nil), String)
614
+
615
+ class Spoom::Coverage::Cards::SorbetIntro < ::Spoom::Coverage::Cards::Erb
616
+ sig { params(sorbet_intro_commit: T.nilable(::String), sorbet_intro_date: T.nilable(::Time)).void }
617
+ def initialize(sorbet_intro_commit: T.unsafe(nil), sorbet_intro_date: T.unsafe(nil)); end
618
+
619
+ sig { override.returns(::String) }
620
+ def erb; end
621
+ end
622
+
623
+ class Spoom::Coverage::Cards::Timeline < ::Spoom::Coverage::Cards::Card
624
+ sig { params(title: ::String, timeline: ::Spoom::Coverage::D3::Timeline).void }
625
+ def initialize(title:, timeline:); end
626
+ end
627
+
628
+ class Spoom::Coverage::Cards::Timeline::Calls < ::Spoom::Coverage::Cards::Timeline
629
+ sig { params(snapshots: T::Array[::Spoom::Coverage::Snapshot], title: ::String).void }
630
+ def initialize(snapshots:, title: T.unsafe(nil)); end
631
+ end
632
+
633
+ class Spoom::Coverage::Cards::Timeline::RBIs < ::Spoom::Coverage::Cards::Timeline
634
+ sig { params(snapshots: T::Array[::Spoom::Coverage::Snapshot], title: ::String).void }
635
+ def initialize(snapshots:, title: T.unsafe(nil)); end
636
+ end
637
+
638
+ class Spoom::Coverage::Cards::Timeline::Runtimes < ::Spoom::Coverage::Cards::Timeline
639
+ sig { params(snapshots: T::Array[::Spoom::Coverage::Snapshot], title: ::String).void }
640
+ def initialize(snapshots:, title: T.unsafe(nil)); end
641
+ end
642
+
643
+ class Spoom::Coverage::Cards::Timeline::Sigils < ::Spoom::Coverage::Cards::Timeline
644
+ sig { params(snapshots: T::Array[::Spoom::Coverage::Snapshot], title: ::String).void }
645
+ def initialize(snapshots:, title: T.unsafe(nil)); end
646
+ end
647
+
648
+ class Spoom::Coverage::Cards::Timeline::Sigs < ::Spoom::Coverage::Cards::Timeline
649
+ sig { params(snapshots: T::Array[::Spoom::Coverage::Snapshot], title: ::String).void }
650
+ def initialize(snapshots:, title: T.unsafe(nil)); end
651
+ end
652
+
653
+ class Spoom::Coverage::Cards::Timeline::Versions < ::Spoom::Coverage::Cards::Timeline
654
+ sig { params(snapshots: T::Array[::Spoom::Coverage::Snapshot], title: ::String).void }
655
+ def initialize(snapshots:, title: T.unsafe(nil)); end
656
+ end
657
+
658
+ module Spoom::Coverage::D3
659
+ class << self
660
+ sig { params(palette: ::Spoom::Coverage::D3::ColorPalette).returns(::String) }
661
+ def header_script(palette); end
662
+
663
+ sig { returns(::String) }
664
+ def header_style; end
665
+ end
666
+ end
667
+
668
+ # @abstract It cannot be directly instantiated. Subclasses must implement the `abstract` methods below.
669
+ class Spoom::Coverage::D3::Base
670
+ abstract!
671
+
672
+ sig { params(id: ::String, data: T.untyped).void }
673
+ def initialize(id, data); end
674
+
675
+ sig { returns(::String) }
676
+ def html; end
677
+
678
+ sig { returns(::String) }
679
+ def id; end
680
+
681
+ # @abstract
682
+ sig { abstract.returns(::String) }
683
+ def script; end
684
+
685
+ sig { returns(::String) }
686
+ def tooltip; end
687
+
688
+ class << self
689
+ sig { returns(::String) }
690
+ def header_script; end
691
+
692
+ sig { returns(::String) }
693
+ def header_style; end
694
+ end
695
+ end
696
+
697
+ Spoom::Coverage::D3::COLOR_FALSE = T.let(T.unsafe(nil), String)
698
+ Spoom::Coverage::D3::COLOR_IGNORE = T.let(T.unsafe(nil), String)
699
+ Spoom::Coverage::D3::COLOR_STRICT = T.let(T.unsafe(nil), String)
700
+ Spoom::Coverage::D3::COLOR_STRONG = T.let(T.unsafe(nil), String)
701
+ Spoom::Coverage::D3::COLOR_TRUE = T.let(T.unsafe(nil), String)
702
+
703
+ class Spoom::Coverage::D3::CircleMap < ::Spoom::Coverage::D3::Base
704
+ sig { override.returns(::String) }
705
+ def script; end
706
+
707
+ class << self
708
+ sig { returns(::String) }
709
+ def header_script; end
710
+
711
+ sig { returns(::String) }
712
+ def header_style; end
713
+ end
714
+ end
715
+
716
+ class Spoom::Coverage::D3::CircleMap::Sigils < ::Spoom::Coverage::D3::CircleMap
717
+ sig do
718
+ params(
719
+ id: ::String,
720
+ file_tree: ::Spoom::FileTree,
721
+ nodes_strictnesses: T::Hash[::Spoom::FileTree::Node, T.nilable(::String)],
722
+ nodes_scores: T::Hash[::Spoom::FileTree::Node, ::Float]
723
+ ).void
724
+ end
725
+ def initialize(id, file_tree, nodes_strictnesses, nodes_scores); end
726
+
727
+ sig { params(node: ::Spoom::FileTree::Node).returns(T::Hash[::Symbol, T.untyped]) }
728
+ def tree_node_to_json(node); end
729
+ end
730
+
731
+ class Spoom::Coverage::D3::ColorPalette < ::T::Struct
732
+ prop :ignore, ::String
733
+ prop :false, ::String
734
+ prop :true, ::String
735
+ prop :strict, ::String
736
+ prop :strong, ::String
737
+
738
+ class << self
739
+ def inherited(s); end
740
+ end
741
+ end
742
+
743
+ # @abstract It cannot be directly instantiated. Subclasses must implement the `abstract` methods below.
744
+ class Spoom::Coverage::D3::Pie < ::Spoom::Coverage::D3::Base
745
+ abstract!
746
+
747
+ sig { params(id: ::String, title: ::String, data: T.untyped).void }
748
+ def initialize(id, title, data); end
749
+
750
+ sig { override.returns(::String) }
751
+ def script; end
752
+
753
+ class << self
754
+ sig { returns(::String) }
755
+ def header_script; end
756
+
757
+ sig { returns(::String) }
758
+ def header_style; end
759
+ end
760
+ end
761
+
762
+ class Spoom::Coverage::D3::Pie::Calls < ::Spoom::Coverage::D3::Pie
763
+ sig { params(id: ::String, title: ::String, snapshot: ::Spoom::Coverage::Snapshot).void }
764
+ def initialize(id, title, snapshot); end
765
+
766
+ sig { override.returns(::String) }
767
+ def tooltip; end
768
+ end
769
+
770
+ class Spoom::Coverage::D3::Pie::Sigils < ::Spoom::Coverage::D3::Pie
771
+ sig { params(id: ::String, title: ::String, snapshot: ::Spoom::Coverage::Snapshot).void }
772
+ def initialize(id, title, snapshot); end
773
+
774
+ sig { override.returns(::String) }
775
+ def tooltip; end
776
+ end
777
+
778
+ class Spoom::Coverage::D3::Pie::Sigs < ::Spoom::Coverage::D3::Pie
779
+ sig { params(id: ::String, title: ::String, snapshot: ::Spoom::Coverage::Snapshot).void }
780
+ def initialize(id, title, snapshot); end
781
+
782
+ sig { override.returns(::String) }
783
+ def tooltip; end
784
+ end
785
+
786
+ # @abstract It cannot be directly instantiated. Subclasses must implement the `abstract` methods below.
787
+ class Spoom::Coverage::D3::Timeline < ::Spoom::Coverage::D3::Base
788
+ abstract!
789
+
790
+ sig { params(id: ::String, data: T.untyped, keys: T::Array[::String]).void }
791
+ def initialize(id, data, keys); end
792
+
793
+ sig { params(y: ::String, color: ::String, curve: ::String).returns(::String) }
794
+ def area(y:, color: T.unsafe(nil), curve: T.unsafe(nil)); end
795
+
796
+ sig { params(y: ::String, color: ::String, curve: ::String).returns(::String) }
797
+ def line(y:, color: T.unsafe(nil), curve: T.unsafe(nil)); end
798
+
799
+ # @abstract
800
+ sig { abstract.returns(::String) }
801
+ def plot; end
802
+
803
+ sig { params(y: ::String).returns(::String) }
804
+ def points(y:); end
805
+
806
+ sig { override.returns(::String) }
807
+ def script; end
808
+
809
+ sig { returns(::String) }
810
+ def x_scale; end
811
+
812
+ sig { returns(::String) }
813
+ def x_ticks; end
814
+
815
+ sig { params(min: ::String, max: ::String, ticks: ::String).returns(::String) }
816
+ def y_scale(min:, max:, ticks:); end
817
+
818
+ sig { params(ticks: ::String, format: ::String, padding: ::Integer).returns(::String) }
819
+ def y_ticks(ticks:, format:, padding:); end
820
+
821
+ class << self
822
+ sig { returns(::String) }
823
+ def header_script; end
824
+
825
+ sig { returns(::String) }
826
+ def header_style; end
827
+ end
828
+ end
829
+
830
+ class Spoom::Coverage::D3::Timeline::Calls < ::Spoom::Coverage::D3::Timeline::Stacked
831
+ sig { params(id: ::String, snapshots: T::Array[::Spoom::Coverage::Snapshot]).void }
832
+ def initialize(id, snapshots); end
833
+
834
+ sig { override.returns(::String) }
835
+ def tooltip; end
836
+ end
837
+
838
+ class Spoom::Coverage::D3::Timeline::RBIs < ::Spoom::Coverage::D3::Timeline::Stacked
839
+ sig { params(id: ::String, snapshots: T::Array[::Spoom::Coverage::Snapshot]).void }
840
+ def initialize(id, snapshots); end
841
+
842
+ sig { override.params(y: ::String, color: ::String, curve: ::String).returns(::String) }
843
+ def line(y:, color: T.unsafe(nil), curve: T.unsafe(nil)); end
844
+
845
+ sig { override.returns(::String) }
846
+ def plot; end
847
+
848
+ sig { override.returns(::String) }
849
+ def script; end
850
+
851
+ sig { override.returns(::String) }
852
+ def tooltip; end
853
+ end
854
+
855
+ class Spoom::Coverage::D3::Timeline::Runtimes < ::Spoom::Coverage::D3::Timeline
856
+ sig { params(id: ::String, snapshots: T::Array[::Spoom::Coverage::Snapshot]).void }
857
+ def initialize(id, snapshots); end
858
+
859
+ sig { override.returns(::String) }
860
+ def plot; end
861
+
862
+ sig { override.returns(::String) }
863
+ def tooltip; end
864
+ end
865
+
866
+ class Spoom::Coverage::D3::Timeline::Sigils < ::Spoom::Coverage::D3::Timeline::Stacked
867
+ sig { params(id: ::String, snapshots: T::Array[::Spoom::Coverage::Snapshot]).void }
868
+ def initialize(id, snapshots); end
869
+
870
+ sig { override.returns(::String) }
871
+ def tooltip; end
872
+ end
873
+
874
+ class Spoom::Coverage::D3::Timeline::Sigs < ::Spoom::Coverage::D3::Timeline::Stacked
875
+ sig { params(id: ::String, snapshots: T::Array[::Spoom::Coverage::Snapshot]).void }
876
+ def initialize(id, snapshots); end
877
+
878
+ sig { override.returns(::String) }
879
+ def tooltip; end
880
+ end
881
+
882
+ # @abstract It cannot be directly instantiated. Subclasses must implement the `abstract` methods below.
883
+ class Spoom::Coverage::D3::Timeline::Stacked < ::Spoom::Coverage::D3::Timeline
884
+ abstract!
885
+
886
+ sig { override.params(y: ::String, color: ::String, curve: ::String).returns(::String) }
887
+ def line(y:, color: T.unsafe(nil), curve: T.unsafe(nil)); end
888
+
889
+ sig { override.returns(::String) }
890
+ def plot; end
891
+
892
+ sig { override.returns(::String) }
893
+ def script; end
894
+ end
895
+
896
+ class Spoom::Coverage::D3::Timeline::Versions < ::Spoom::Coverage::D3::Timeline
897
+ sig { params(id: ::String, snapshots: T::Array[::Spoom::Coverage::Snapshot]).void }
898
+ def initialize(id, snapshots); end
899
+
900
+ sig { override.returns(::String) }
901
+ def plot; end
902
+
903
+ sig { override.returns(::String) }
904
+ def tooltip; end
905
+ end
906
+
907
+ # @abstract It cannot be directly instantiated. Subclasses must implement the `abstract` methods below.
908
+ class Spoom::Coverage::Page < ::Spoom::Coverage::Template
909
+ abstract!
910
+
911
+ sig { params(title: ::String, palette: ::Spoom::Coverage::D3::ColorPalette, template: ::String).void }
912
+ def initialize(title:, palette:, template: T.unsafe(nil)); end
913
+
914
+ sig { returns(::String) }
915
+ def body_html; end
916
+
917
+ # @abstract
918
+ sig { abstract.returns(T::Array[::Spoom::Coverage::Cards::Card]) }
919
+ def cards; end
920
+
921
+ sig { returns(::String) }
922
+ def footer_html; end
923
+
924
+ sig { returns(::String) }
925
+ def header_html; end
926
+
927
+ sig { returns(::String) }
928
+ def header_script; end
929
+
930
+ sig { returns(::String) }
931
+ def header_style; end
932
+
933
+ sig { returns(::Spoom::Coverage::D3::ColorPalette) }
934
+ def palette; end
935
+
936
+ sig { returns(::String) }
937
+ def title; end
938
+ end
939
+
940
+ Spoom::Coverage::Page::TEMPLATE = T.let(T.unsafe(nil), String)
941
+
942
+ class Spoom::Coverage::Report < ::Spoom::Coverage::Page
943
+ sig do
944
+ params(
945
+ project_name: ::String,
946
+ palette: ::Spoom::Coverage::D3::ColorPalette,
947
+ snapshots: T::Array[::Spoom::Coverage::Snapshot],
948
+ file_tree: ::Spoom::FileTree,
949
+ nodes_strictnesses: T::Hash[::Spoom::FileTree::Node, T.nilable(::String)],
950
+ nodes_strictness_scores: T::Hash[::Spoom::FileTree::Node, ::Float],
951
+ sorbet_intro_commit: T.nilable(::String),
952
+ sorbet_intro_date: T.nilable(::Time)
953
+ ).void
954
+ end
955
+ def initialize(project_name:, palette:, snapshots:, file_tree:, nodes_strictnesses:, nodes_strictness_scores:, sorbet_intro_commit: T.unsafe(nil), sorbet_intro_date: T.unsafe(nil)); end
956
+
957
+ sig { override.returns(T::Array[::Spoom::Coverage::Cards::Card]) }
958
+ def cards; end
959
+
960
+ sig { override.returns(::String) }
961
+ def header_html; end
962
+ end
963
+
964
+ class Spoom::Coverage::Snapshot < ::T::Struct
965
+ prop :timestamp, ::Integer, default: T.unsafe(nil)
966
+ prop :version_static, T.nilable(::String), default: T.unsafe(nil)
967
+ prop :version_runtime, T.nilable(::String), default: T.unsafe(nil)
968
+ prop :duration, ::Integer, default: T.unsafe(nil)
969
+ prop :commit_sha, T.nilable(::String), default: T.unsafe(nil)
970
+ prop :commit_timestamp, T.nilable(::Integer), default: T.unsafe(nil)
971
+ prop :files, ::Integer, default: T.unsafe(nil)
972
+ prop :rbi_files, ::Integer, default: T.unsafe(nil)
973
+ prop :modules, ::Integer, default: T.unsafe(nil)
974
+ prop :classes, ::Integer, default: T.unsafe(nil)
975
+ prop :singleton_classes, ::Integer, default: T.unsafe(nil)
976
+ prop :methods_without_sig, ::Integer, default: T.unsafe(nil)
977
+ prop :methods_with_sig, ::Integer, default: T.unsafe(nil)
978
+ prop :calls_untyped, ::Integer, default: T.unsafe(nil)
979
+ prop :calls_typed, ::Integer, default: T.unsafe(nil)
980
+ prop :sigils, T::Hash[::String, ::Integer], default: T.unsafe(nil)
981
+ prop :methods_with_sig_excluding_rbis, ::Integer, default: T.unsafe(nil)
982
+ prop :methods_without_sig_excluding_rbis, ::Integer, default: T.unsafe(nil)
983
+ prop :sigils_excluding_rbis, T::Hash[::String, ::Integer], default: T.unsafe(nil)
984
+
985
+ sig { params(out: T.any(::IO, ::StringIO), colors: T::Boolean, indent_level: ::Integer).void }
986
+ def print(out: T.unsafe(nil), colors: T.unsafe(nil), indent_level: T.unsafe(nil)); end
987
+
988
+ sig { params(arg: T.untyped).returns(::String) }
989
+ def to_json(*arg); end
990
+
991
+ class << self
992
+ sig { params(json: ::String).returns(::Spoom::Coverage::Snapshot) }
993
+ def from_json(json); end
994
+
995
+ sig { params(obj: T::Hash[::String, T.untyped]).returns(::Spoom::Coverage::Snapshot) }
996
+ def from_obj(obj); end
997
+
998
+ def inherited(s); end
999
+ end
1000
+ end
1001
+
1002
+ # The strictness name as found in the Sorbet metrics file
1003
+ Spoom::Coverage::Snapshot::STRICTNESSES = T.let(T.unsafe(nil), Array)
1004
+
1005
+ class Spoom::Coverage::SnapshotPrinter < ::Spoom::Printer
1006
+ sig { params(snapshot: ::Spoom::Coverage::Snapshot).void }
1007
+ def print_snapshot(snapshot); end
1008
+
1009
+ private
1010
+
1011
+ sig { params(value: T.nilable(::Integer), total: T.nilable(::Integer)).returns(::String) }
1012
+ def percent(value, total); end
1013
+
1014
+ sig { params(hash: T::Hash[::String, ::Integer], total: ::Integer).void }
1015
+ def print_map(hash, total); end
1016
+ end
1017
+
1018
+ # @abstract It cannot be directly instantiated. Subclasses must implement the `abstract` methods below.
1019
+ class Spoom::Coverage::Template
1020
+ abstract!
1021
+
1022
+ # Create a new template from an Erb file path
1023
+ sig { params(template: ::String).void }
1024
+ def initialize(template:); end
1025
+
1026
+ sig { returns(::String) }
1027
+ def erb; end
1028
+
1029
+ sig { returns(::Binding) }
1030
+ def get_binding; end
1031
+
1032
+ sig { returns(::String) }
1033
+ def html; end
1034
+ end
1035
+
1036
+ module Spoom::Deadcode
1037
+ class << self
1038
+ sig { params(context: ::Spoom::Context).returns(T::Array[T.class_of(Spoom::Deadcode::Plugins::Base)]) }
1039
+ def load_custom_plugins(context); end
1040
+
1041
+ sig { params(context: ::Spoom::Context).returns(T::Set[T.class_of(Spoom::Deadcode::Plugins::Base)]) }
1042
+ def plugins_from_gemfile_lock(context); end
1043
+ end
1044
+ end
1045
+
1046
+ Spoom::Deadcode::DEFAULT_CUSTOM_PLUGINS_PATH = T.let(T.unsafe(nil), String)
1047
+ Spoom::Deadcode::DEFAULT_PLUGINS = T.let(T.unsafe(nil), Set)
1048
+
1049
+ # A definition is a class, module, method, constant, etc. being defined in the code
1050
+ class Spoom::Deadcode::Definition < ::T::Struct
1051
+ const :kind, ::Spoom::Deadcode::Definition::Kind
1052
+ const :name, ::String
1053
+ const :full_name, ::String
1054
+ const :location, ::Spoom::Location
1055
+ const :status, ::Spoom::Deadcode::Definition::Status, default: T.unsafe(nil)
1056
+
1057
+ sig { void }
1058
+ def alive!; end
1059
+
1060
+ # Status
1061
+ sig { returns(T::Boolean) }
1062
+ def alive?; end
1063
+
1064
+ # Kind
1065
+ sig { returns(T::Boolean) }
1066
+ def attr_reader?; end
1067
+
1068
+ sig { returns(T::Boolean) }
1069
+ def attr_writer?; end
1070
+
1071
+ sig { returns(T::Boolean) }
1072
+ def class?; end
1073
+
1074
+ sig { returns(T::Boolean) }
1075
+ def constant?; end
1076
+
1077
+ sig { returns(T::Boolean) }
1078
+ def dead?; end
1079
+
1080
+ sig { void }
1081
+ def ignored!; end
1082
+
1083
+ sig { returns(T::Boolean) }
1084
+ def ignored?; end
1085
+
1086
+ sig { returns(T::Boolean) }
1087
+ def method?; end
1088
+
1089
+ sig { returns(T::Boolean) }
1090
+ def module?; end
1091
+
1092
+ # Utils
1093
+ sig { params(args: T.untyped).returns(::String) }
1094
+ def to_json(*args); end
1095
+
1096
+ class << self
1097
+ def inherited(s); end
1098
+ end
1099
+ end
1100
+
1101
+ class Spoom::Deadcode::Definition::Kind < ::T::Enum
1102
+ enums do
1103
+ AttrReader = new
1104
+ AttrWriter = new
1105
+ Class = new
1106
+ Constant = new
1107
+ Method = new
1108
+ Module = new
1109
+ end
1110
+ end
1111
+
1112
+ class Spoom::Deadcode::Definition::Status < ::T::Enum
1113
+ enums do
1114
+ ALIVE = new
1115
+ DEAD = new
1116
+ IGNORED = new
1117
+ end
1118
+ end
1119
+
1120
+ # Custom engine to handle ERB templates as used by Rails
1121
+ class Spoom::Deadcode::ERB < ::Erubi::Engine
1122
+ sig { params(input: T.untyped, properties: T.untyped).void }
1123
+ def initialize(input, properties = T.unsafe(nil)); end
1124
+
1125
+ private
1126
+
1127
+ sig { override.params(code: T.untyped).void }
1128
+ def add_code(code); end
1129
+
1130
+ sig { override.params(indicator: T.untyped, code: T.untyped).void }
1131
+ def add_expression(indicator, code); end
1132
+
1133
+ sig { override.params(_: T.untyped).void }
1134
+ def add_postamble(_); end
1135
+
1136
+ sig { override.params(text: T.untyped).void }
1137
+ def add_text(text); end
1138
+
1139
+ sig { params(src: T.untyped).void }
1140
+ def flush_newline_if_pending(src); end
1141
+ end
1142
+
1143
+ Spoom::Deadcode::ERB::BLOCK_EXPR = T.let(T.unsafe(nil), Regexp)
1144
+
1145
+ class Spoom::Deadcode::Index
1146
+ sig { params(model: ::Spoom::Model).void }
1147
+ def initialize(model); end
1148
+
1149
+ sig { returns(T::Array[::Spoom::Deadcode::Definition]) }
1150
+ def all_definitions; end
1151
+
1152
+ sig { returns(T::Array[::Spoom::Model::Reference]) }
1153
+ def all_references; end
1154
+
1155
+ sig { params(plugins: T::Array[::Spoom::Deadcode::Plugins::Base]).void }
1156
+ def apply_plugins!(plugins); end
1157
+
1158
+ sig { params(definition: ::Spoom::Deadcode::Definition).void }
1159
+ def define(definition); end
1160
+
1161
+ sig { returns(T::Hash[::String, T::Array[::Spoom::Deadcode::Definition]]) }
1162
+ def definitions; end
1163
+
1164
+ # Utils
1165
+ sig { params(name: ::String).returns(T::Array[::Spoom::Deadcode::Definition]) }
1166
+ def definitions_for_name(name); end
1167
+
1168
+ # Mark all definitions having a reference of the same name as `alive`
1169
+ #
1170
+ # To be called once all the files have been indexed and all the definitions and references discovered.
1171
+ sig { void }
1172
+ def finalize!; end
1173
+
1174
+ sig { params(symbol_def: ::Spoom::Model::SymbolDef).void }
1175
+ def ignore(symbol_def); end
1176
+
1177
+ sig { params(erb: ::String, file: ::String, plugins: T::Array[::Spoom::Deadcode::Plugins::Base]).void }
1178
+ def index_erb(erb, file:, plugins: T.unsafe(nil)); end
1179
+
1180
+ # Indexing
1181
+ sig { params(file: ::String, plugins: T::Array[::Spoom::Deadcode::Plugins::Base]).void }
1182
+ def index_file(file, plugins: T.unsafe(nil)); end
1183
+
1184
+ sig { params(rb: ::String, file: ::String, plugins: T::Array[::Spoom::Deadcode::Plugins::Base]).void }
1185
+ def index_ruby(rb, file:, plugins: T.unsafe(nil)); end
1186
+
1187
+ sig { returns(::Spoom::Model) }
1188
+ def model; end
1189
+
1190
+ sig { params(name: ::String, location: ::Spoom::Location).void }
1191
+ def reference_constant(name, location); end
1192
+
1193
+ sig { params(name: ::String, location: ::Spoom::Location).void }
1194
+ def reference_method(name, location); end
1195
+
1196
+ sig { returns(T::Hash[::String, T::Array[::Spoom::Model::Reference]]) }
1197
+ def references; end
1198
+ end
1199
+
1200
+ class Spoom::Deadcode::Index::Error < ::Spoom::Error
1201
+ sig { params(message: ::String, parent: ::Exception).void }
1202
+ def initialize(message, parent:); end
1203
+ end
1204
+
1205
+ class Spoom::Deadcode::Indexer < ::Spoom::Visitor
1206
+ sig do
1207
+ params(
1208
+ path: ::String,
1209
+ index: ::Spoom::Deadcode::Index,
1210
+ plugins: T::Array[::Spoom::Deadcode::Plugins::Base]
1211
+ ).void
1212
+ end
1213
+ def initialize(path, index, plugins: T.unsafe(nil)); end
1214
+
1215
+ sig { returns(::Spoom::Deadcode::Index) }
1216
+ def index; end
1217
+
1218
+ sig { returns(::String) }
1219
+ def path; end
1220
+
1221
+ sig { override.params(node: ::Prism::CallNode).void }
1222
+ def visit_call_node(node); end
1223
+ end
1224
+
1225
+ Spoom::Deadcode::PLUGINS_FOR_GEM = T.let(T.unsafe(nil), Hash)
1226
+ module Spoom::Deadcode::Plugins; end
1227
+
1228
+ class Spoom::Deadcode::Plugins::ActionMailer < ::Spoom::Deadcode::Plugins::Base
1229
+ sig { override.params(send: ::Spoom::Deadcode::Send).void }
1230
+ def on_send(send); end
1231
+ end
1232
+
1233
+ class Spoom::Deadcode::Plugins::ActionMailerPreview < ::Spoom::Deadcode::Plugins::Base
1234
+ sig { override.params(definition: ::Spoom::Model::Method).void }
1235
+ def on_define_method(definition); end
1236
+ end
1237
+
1238
+ class Spoom::Deadcode::Plugins::ActionPack < ::Spoom::Deadcode::Plugins::Base
1239
+ sig { override.params(definition: ::Spoom::Model::Method).void }
1240
+ def on_define_method(definition); end
1241
+
1242
+ sig { override.params(send: ::Spoom::Deadcode::Send).void }
1243
+ def on_send(send); end
1244
+ end
1245
+
1246
+ Spoom::Deadcode::Plugins::ActionPack::CALLBACKS = T.let(T.unsafe(nil), Array)
1247
+ class Spoom::Deadcode::Plugins::ActiveJob < ::Spoom::Deadcode::Plugins::Base; end
1248
+
1249
+ class Spoom::Deadcode::Plugins::ActiveModel < ::Spoom::Deadcode::Plugins::Base
1250
+ sig { override.params(send: ::Spoom::Deadcode::Send).void }
1251
+ def on_send(send); end
1252
+ end
1253
+
1254
+ class Spoom::Deadcode::Plugins::ActiveRecord < ::Spoom::Deadcode::Plugins::Base
1255
+ sig { override.params(send: ::Spoom::Deadcode::Send).void }
1256
+ def on_send(send); end
1257
+ end
1258
+
1259
+ Spoom::Deadcode::Plugins::ActiveRecord::ARRAY_METHODS = T.let(T.unsafe(nil), Array)
1260
+ Spoom::Deadcode::Plugins::ActiveRecord::CALLBACKS = T.let(T.unsafe(nil), Array)
1261
+ Spoom::Deadcode::Plugins::ActiveRecord::CRUD_METHODS = T.let(T.unsafe(nil), Array)
1262
+
1263
+ class Spoom::Deadcode::Plugins::ActiveSupport < ::Spoom::Deadcode::Plugins::Base
1264
+ sig { override.params(send: ::Spoom::Deadcode::Send).void }
1265
+ def on_send(send); end
1266
+ end
1267
+
1268
+ Spoom::Deadcode::Plugins::ActiveSupport::SETUP_AND_TEARDOWN_METHODS = T.let(T.unsafe(nil), Array)
1269
+
1270
+ # @abstract It cannot be directly instantiated. Subclasses must implement the `abstract` methods below.
1271
+ class Spoom::Deadcode::Plugins::Base
1272
+ abstract!
1273
+
1274
+ sig { params(index: ::Spoom::Deadcode::Index).void }
1275
+ def initialize(index); end
1276
+
1277
+ sig { returns(::Spoom::Deadcode::Index) }
1278
+ def index; end
1279
+
1280
+ # Do not override this method, use `on_define_accessor` instead.
1281
+ sig { params(definition: ::Spoom::Model::Attr).void }
1282
+ def internal_on_define_accessor(definition); end
1283
+
1284
+ # Do not override this method, use `on_define_class` instead.
1285
+ sig { params(definition: ::Spoom::Model::Class).void }
1286
+ def internal_on_define_class(definition); end
1287
+
1288
+ # Do not override this method, use `on_define_constant` instead.
1289
+ sig { params(definition: ::Spoom::Model::Constant).void }
1290
+ def internal_on_define_constant(definition); end
1291
+
1292
+ # Do not override this method, use `on_define_method` instead.
1293
+ sig { params(definition: ::Spoom::Model::Method).void }
1294
+ def internal_on_define_method(definition); end
1295
+
1296
+ # Do not override this method, use `on_define_module` instead.
1297
+ sig { params(definition: ::Spoom::Model::Module).void }
1298
+ def internal_on_define_module(definition); end
1299
+
1300
+ # Called when an accessor is defined.
1301
+ #
1302
+ # Will be called when the indexer processes a `attr_reader`, `attr_writer` or `attr_accessor` node.
1303
+ # Note that when this method is called, the definition for the node has already been added to the index.
1304
+ # It is still possible to ignore it from the plugin:
1305
+ #
1306
+ # ~~~rb
1307
+ # class MyPlugin < Spoom::Deadcode::Plugins::Base
1308
+ # def on_define_accessor(definition)
1309
+ # @index.ignore(definition) if symbol_def.name == "foo"
1310
+ # end
1311
+ # end
1312
+ # ~~~
1313
+ sig { params(definition: ::Spoom::Model::Attr).void }
1314
+ def on_define_accessor(definition); end
1315
+
1316
+ # Called when a class is defined.
1317
+ #
1318
+ # Will be called when the indexer processes a `class` node.
1319
+ # Note that when this method is called, the definition for the node has already been added to the index.
1320
+ # It is still possible to ignore it from the plugin:
1321
+ #
1322
+ # ~~~rb
1323
+ # class MyPlugin < Spoom::Deadcode::Plugins::Base
1324
+ # def on_define_class(definition)
1325
+ # @index.ignore(definition) if definition.name == "Foo"
1326
+ # end
1327
+ # end
1328
+ # ~~~
1329
+ sig { params(definition: ::Spoom::Model::Class).void }
1330
+ def on_define_class(definition); end
1331
+
1332
+ # Called when a constant is defined.
1333
+ #
1334
+ # Will be called when the indexer processes a `CONST =` node.
1335
+ # Note that when this method is called, the definition for the node has already been added to the index.
1336
+ # It is still possible to ignore it from the plugin:
1337
+ #
1338
+ # ~~~rb
1339
+ # class MyPlugin < Spoom::Deadcode::Plugins::Base
1340
+ # def on_define_constant(definition)
1341
+ # @index.ignore(definition) if definition.name == "FOO"
1342
+ # end
1343
+ # end
1344
+ # ~~~
1345
+ sig { params(definition: ::Spoom::Model::Constant).void }
1346
+ def on_define_constant(definition); end
1347
+
1348
+ # Called when a method is defined.
1349
+ #
1350
+ # Will be called when the indexer processes a `def` or `defs` node.
1351
+ # Note that when this method is called, the definition for the node has already been added to the index.
1352
+ # It is still possible to ignore it from the plugin:
1353
+ #
1354
+ # ~~~rb
1355
+ # class MyPlugin < Spoom::Deadcode::Plugins::Base
1356
+ # def on_define_method(definition)
1357
+ # @index.ignore(definition) if definition.name == "foo"
1358
+ # end
1359
+ # end
1360
+ # ~~~
1361
+ sig { params(definition: ::Spoom::Model::Method).void }
1362
+ def on_define_method(definition); end
1363
+
1364
+ # Called when a module is defined.
1365
+ #
1366
+ # Will be called when the indexer processes a `module` node.
1367
+ # Note that when this method is called, the definition for the node has already been added to the index.
1368
+ # It is still possible to ignore it from the plugin:
1369
+ #
1370
+ # ~~~rb
1371
+ # class MyPlugin < Spoom::Deadcode::Plugins::Base
1372
+ # def on_define_module(definition)
1373
+ # @index.ignore(definition) if definition.name == "Foo"
1374
+ # end
1375
+ # end
1376
+ # ~~~
1377
+ sig { params(definition: ::Spoom::Model::Module).void }
1378
+ def on_define_module(definition); end
1379
+
1380
+ # Called when a send is being processed
1381
+ #
1382
+ # ~~~rb
1383
+ # class MyPlugin < Spoom::Deadcode::Plugins::Base
1384
+ # def on_send(send)
1385
+ # return unless send.name == "dsl_method"
1386
+ # return if send.args.empty?
1387
+ #
1388
+ # method_name = send.args.first.slice.delete_prefix(":")
1389
+ # @index.reference_method(method_name, send.node, send.loc)
1390
+ # end
1391
+ # end
1392
+ # ~~~
1393
+ sig { params(send: ::Spoom::Deadcode::Send).void }
1394
+ def on_send(send); end
1395
+
1396
+ private
1397
+
1398
+ # Plugin utils
1399
+ sig { params(name: ::String).returns(::String) }
1400
+ def camelize(name); end
1401
+
1402
+ sig { params(name: T.nilable(::String)).returns(T::Boolean) }
1403
+ def ignored_class_name?(name); end
1404
+
1405
+ sig { params(name: ::String).returns(T::Boolean) }
1406
+ def ignored_constant_name?(name); end
1407
+
1408
+ sig { params(name: ::String).returns(T::Boolean) }
1409
+ def ignored_method_name?(name); end
1410
+
1411
+ sig { params(name: ::String).returns(T::Boolean) }
1412
+ def ignored_module_name?(name); end
1413
+
1414
+ sig { params(name: ::String, names_variable: ::Symbol, patterns_variable: ::Symbol).returns(T::Boolean) }
1415
+ def ignored_name?(name, names_variable, patterns_variable); end
1416
+
1417
+ sig { params(definition: ::Spoom::Model::Class).returns(T::Boolean) }
1418
+ def ignored_subclass?(definition); end
1419
+
1420
+ sig { params(const: ::Symbol).returns(T::Set[::String]) }
1421
+ def names(const); end
1422
+
1423
+ sig { params(const: ::Symbol).returns(T::Array[::Regexp]) }
1424
+ def patterns(const); end
1425
+
1426
+ # DSL support
1427
+ sig { params(definition: ::Spoom::Model::Namespace, superclass_name: ::String).returns(T::Boolean) }
1428
+ def subclass_of?(definition, superclass_name); end
1429
+
1430
+ class << self
1431
+ # Mark classes directly subclassing a class matching `names` as ignored.
1432
+ #
1433
+ # Names can be either strings or regexps:
1434
+ #
1435
+ # ~~~rb
1436
+ # class MyPlugin < Spoom::Deadcode::Plugins::Base
1437
+ # ignore_classes_inheriting_from(
1438
+ # "Foo",
1439
+ # "Bar",
1440
+ # /Baz.*/,
1441
+ # )
1442
+ # end
1443
+ # ~~~
1444
+ sig { params(names: T.any(::Regexp, ::String)).void }
1445
+ def ignore_classes_inheriting_from(*names); end
1446
+
1447
+ # Mark classes matching `names` as ignored.
1448
+ #
1449
+ # Names can be either strings or regexps:
1450
+ #
1451
+ # ~~~rb
1452
+ # class MyPlugin < Spoom::Deadcode::Plugins::Base
1453
+ # ignore_class_names(
1454
+ # "Foo",
1455
+ # "Bar",
1456
+ # /Baz.*/,
1457
+ # )
1458
+ # end
1459
+ # ~~~
1460
+ sig { params(names: T.any(::Regexp, ::String)).void }
1461
+ def ignore_classes_named(*names); end
1462
+
1463
+ # Mark constants matching `names` as ignored.
1464
+ #
1465
+ # Names can be either strings or regexps:
1466
+ #
1467
+ # ~~~rb
1468
+ # class MyPlugin < Spoom::Deadcode::Plugins::Base
1469
+ # ignore_class_names(
1470
+ # "FOO",
1471
+ # "BAR",
1472
+ # /BAZ.*/,
1473
+ # )
1474
+ # end
1475
+ # ~~~
1476
+ sig { params(names: T.any(::Regexp, ::String)).void }
1477
+ def ignore_constants_named(*names); end
1478
+
1479
+ # Mark methods matching `names` as ignored.
1480
+ #
1481
+ # Names can be either strings or regexps:
1482
+ #
1483
+ # ~~~rb
1484
+ # class MyPlugin < Spoom::Deadcode::Plugins::Base
1485
+ # ignore_method_names(
1486
+ # "foo",
1487
+ # "bar",
1488
+ # /baz.*/,
1489
+ # )
1490
+ # end
1491
+ # ~~~
1492
+ sig { params(names: T.any(::Regexp, ::String)).void }
1493
+ def ignore_methods_named(*names); end
1494
+
1495
+ # Mark modules matching `names` as ignored.
1496
+ #
1497
+ # Names can be either strings or regexps:
1498
+ #
1499
+ # ~~~rb
1500
+ # class MyPlugin < Spoom::Deadcode::Plugins::Base
1501
+ # ignore_class_names(
1502
+ # "Foo",
1503
+ # "Bar",
1504
+ # /Baz.*/,
1505
+ # )
1506
+ # end
1507
+ # ~~~
1508
+ sig { params(names: T.any(::Regexp, ::String)).void }
1509
+ def ignore_modules_named(*names); end
1510
+
1511
+ private
1512
+
1513
+ sig do
1514
+ params(
1515
+ names: T::Array[T.any(::Regexp, ::String)],
1516
+ names_variable: ::Symbol,
1517
+ patterns_variable: ::Symbol
1518
+ ).void
1519
+ end
1520
+ def save_names_and_patterns(names, names_variable, patterns_variable); end
1521
+ end
1522
+ end
1523
+
1524
+ class Spoom::Deadcode::Plugins::GraphQL < ::Spoom::Deadcode::Plugins::Base
1525
+ sig { override.params(send: ::Spoom::Deadcode::Send).void }
1526
+ def on_send(send); end
1527
+ end
1528
+
1529
+ class Spoom::Deadcode::Plugins::Minitest < ::Spoom::Deadcode::Plugins::Base
1530
+ sig { override.params(definition: ::Spoom::Model::Method).void }
1531
+ def on_define_method(definition); end
1532
+
1533
+ sig { override.params(send: ::Spoom::Deadcode::Send).void }
1534
+ def on_send(send); end
1535
+ end
1536
+
1537
+ class Spoom::Deadcode::Plugins::Namespaces < ::Spoom::Deadcode::Plugins::Base
1538
+ sig { override.params(definition: ::Spoom::Model::Class).void }
1539
+ def on_define_class(definition); end
1540
+
1541
+ sig { override.params(definition: ::Spoom::Model::Module).void }
1542
+ def on_define_module(definition); end
1543
+
1544
+ private
1545
+
1546
+ sig { params(symbol_def: ::Spoom::Model::Namespace).returns(T::Boolean) }
1547
+ def used_as_namespace?(symbol_def); end
1548
+ end
1549
+
1550
+ class Spoom::Deadcode::Plugins::RSpec < ::Spoom::Deadcode::Plugins::Base; end
1551
+
1552
+ class Spoom::Deadcode::Plugins::Rails < ::Spoom::Deadcode::Plugins::Base
1553
+ sig { override.params(definition: ::Spoom::Model::Class).void }
1554
+ def on_define_class(definition); end
1555
+
1556
+ sig { override.params(definition: ::Spoom::Model::Module).void }
1557
+ def on_define_module(definition); end
1558
+
1559
+ private
1560
+
1561
+ sig { params(symbol_def: ::Spoom::Model::Namespace).returns(T::Boolean) }
1562
+ def file_is_helper?(symbol_def); end
1563
+ end
1564
+
1565
+ class Spoom::Deadcode::Plugins::Rake < ::Spoom::Deadcode::Plugins::Base; end
1566
+
1567
+ class Spoom::Deadcode::Plugins::Rubocop < ::Spoom::Deadcode::Plugins::Base
1568
+ sig { override.params(definition: ::Spoom::Model::Constant).void }
1569
+ def on_define_constant(definition); end
1570
+
1571
+ sig { override.params(definition: ::Spoom::Model::Method).void }
1572
+ def on_define_method(definition); end
1573
+ end
1574
+
1575
+ Spoom::Deadcode::Plugins::Rubocop::RUBOCOP_CONSTANTS = T.let(T.unsafe(nil), Set)
1576
+
1577
+ class Spoom::Deadcode::Plugins::Ruby < ::Spoom::Deadcode::Plugins::Base
1578
+ sig { override.params(send: ::Spoom::Deadcode::Send).void }
1579
+ def on_send(send); end
1580
+
1581
+ private
1582
+
1583
+ sig { params(send: ::Spoom::Deadcode::Send, node: ::Prism::Node).void }
1584
+ def reference_symbol_as_constant(send, node); end
1585
+ end
1586
+
1587
+ class Spoom::Deadcode::Plugins::Sorbet < ::Spoom::Deadcode::Plugins::Base
1588
+ sig { override.params(definition: ::Spoom::Model::Constant).void }
1589
+ def on_define_constant(definition); end
1590
+
1591
+ sig { override.params(definition: ::Spoom::Model::Method).void }
1592
+ def on_define_method(definition); end
1593
+
1594
+ private
1595
+
1596
+ sig { params(definition: ::Spoom::Model::Constant).returns(T::Boolean) }
1597
+ def sorbet_enum_constant?(definition); end
1598
+
1599
+ sig { params(definition: ::Spoom::Model::Constant).returns(T::Boolean) }
1600
+ def sorbet_type_member?(definition); end
1601
+ end
1602
+
1603
+ class Spoom::Deadcode::Plugins::Thor < ::Spoom::Deadcode::Plugins::Base
1604
+ sig { override.params(definition: ::Spoom::Model::Method).void }
1605
+ def on_define_method(definition); end
1606
+ end
1607
+
1608
+ class Spoom::Deadcode::Remover
1609
+ sig { params(context: ::Spoom::Context).void }
1610
+ def initialize(context); end
1611
+
1612
+ sig { params(kind: T.nilable(::Spoom::Deadcode::Definition::Kind), location: ::Spoom::Location).returns(::String) }
1613
+ def remove_location(kind, location); end
1614
+ end
1615
+
1616
+ class Spoom::Deadcode::Remover::Error < ::Spoom::Error; end
1617
+
1618
+ class Spoom::Deadcode::Remover::NodeContext
1619
+ sig do
1620
+ params(
1621
+ source: ::String,
1622
+ comments: T::Hash[::Integer, ::Prism::Comment],
1623
+ node: ::Prism::Node,
1624
+ nesting: T::Array[::Prism::Node]
1625
+ ).void
1626
+ end
1627
+ def initialize(source, comments, node, nesting); end
1628
+
1629
+ sig { params(node: ::Prism::Node).returns(T::Array[::Prism::Comment]) }
1630
+ def attached_comments(node); end
1631
+
1632
+ sig { returns(T.nilable(::Prism::CallNode)) }
1633
+ def attached_sig; end
1634
+
1635
+ sig { returns(T::Array[::Prism::Node]) }
1636
+ def attached_sigs; end
1637
+
1638
+ sig { returns(T::Hash[::Integer, ::Prism::Comment]) }
1639
+ def comments; end
1640
+
1641
+ sig { params(start_line: ::Integer, end_line: ::Integer).returns(T::Array[::Prism::Comment]) }
1642
+ def comments_between_lines(start_line, end_line); end
1643
+
1644
+ sig { returns(T::Array[::Prism::Node]) }
1645
+ def nesting; end
1646
+
1647
+ # @return [Array<Prism::Node>]
1648
+ def nesting=(_arg0); end
1649
+
1650
+ sig { returns(T.nilable(::Prism::Node)) }
1651
+ def next_node; end
1652
+
1653
+ # @raise [Error]
1654
+ sig { returns(T::Array[::Prism::Node]) }
1655
+ def next_nodes; end
1656
+
1657
+ sig { returns(::Prism::Node) }
1658
+ def node; end
1659
+
1660
+ # @raise [Error]
1661
+ sig { returns(::Spoom::Deadcode::Remover::NodeContext) }
1662
+ def parent_context; end
1663
+
1664
+ # @raise [Error]
1665
+ sig { returns(::Prism::Node) }
1666
+ def parent_node; end
1667
+
1668
+ sig { returns(T.nilable(::Prism::Node)) }
1669
+ def previous_node; end
1670
+
1671
+ # @raise [Error]
1672
+ sig { returns(T::Array[::Prism::Node]) }
1673
+ def previous_nodes; end
1674
+
1675
+ sig { returns(T.nilable(::Spoom::Deadcode::Remover::NodeContext)) }
1676
+ def sclass_context; end
1677
+
1678
+ sig { params(node: T.nilable(::Prism::Node)).returns(T::Boolean) }
1679
+ def sorbet_extend_sig?(node); end
1680
+
1681
+ sig { params(node: T.nilable(::Prism::Node)).returns(T::Boolean) }
1682
+ def sorbet_signature?(node); end
1683
+ end
1684
+
1685
+ class Spoom::Deadcode::Remover::NodeFinder < ::Spoom::Visitor
1686
+ sig { params(location: ::Spoom::Location, kind: T.nilable(::Spoom::Deadcode::Definition::Kind)).void }
1687
+ def initialize(location, kind); end
1688
+
1689
+ sig { returns(T.nilable(::Prism::Node)) }
1690
+ def node; end
1691
+
1692
+ sig { returns(T::Array[::Prism::Node]) }
1693
+ def nodes_nesting; end
1694
+
1695
+ sig { override.params(node: T.nilable(::Prism::Node)).void }
1696
+ def visit(node); end
1697
+
1698
+ class << self
1699
+ sig do
1700
+ params(
1701
+ source: ::String,
1702
+ location: ::Spoom::Location,
1703
+ kind: T.nilable(::Spoom::Deadcode::Definition::Kind)
1704
+ ).returns(::Spoom::Deadcode::Remover::NodeContext)
1705
+ end
1706
+ def find(source, location, kind); end
1707
+
1708
+ sig { params(node: ::Prism::Node, kind: ::Spoom::Deadcode::Definition::Kind).returns(T::Boolean) }
1709
+ def node_match_kind?(node, kind); end
1710
+ end
1711
+ end
1712
+
1713
+ class Spoom::Deadcode::Remover::NodeRemover
1714
+ sig do
1715
+ params(
1716
+ source: ::String,
1717
+ kind: T.nilable(::Spoom::Deadcode::Definition::Kind),
1718
+ location: ::Spoom::Location
1719
+ ).void
1720
+ end
1721
+ def initialize(source, kind, location); end
1722
+
1723
+ sig { void }
1724
+ def apply_edit; end
1725
+
1726
+ sig { returns(::String) }
1727
+ def new_source; end
1728
+
1729
+ private
1730
+
1731
+ sig { params(context: ::Spoom::Deadcode::Remover::NodeContext).void }
1732
+ def delete_attr_accessor(context); end
1733
+
1734
+ sig { params(start_char: ::Integer, end_char: ::Integer).void }
1735
+ def delete_chars(start_char, end_char); end
1736
+
1737
+ sig { params(context: ::Spoom::Deadcode::Remover::NodeContext).void }
1738
+ def delete_constant_assignment(context); end
1739
+
1740
+ sig { params(start_line: ::Integer, end_line: ::Integer).void }
1741
+ def delete_lines(start_line, end_line); end
1742
+
1743
+ sig { params(context: ::Spoom::Deadcode::Remover::NodeContext).void }
1744
+ def delete_node_and_comments_and_sigs(context); end
1745
+
1746
+ sig do
1747
+ params(
1748
+ node: ::Prism::Node,
1749
+ send_context: ::Spoom::Deadcode::Remover::NodeContext,
1750
+ was_removed: T::Boolean
1751
+ ).void
1752
+ end
1753
+ def insert_accessor(node, send_context, was_removed:); end
1754
+
1755
+ sig { params(start_char: ::Integer, end_char: ::Integer, replacement: ::String).void }
1756
+ def replace_chars(start_char, end_char, replacement); end
1757
+
1758
+ sig do
1759
+ params(
1760
+ node: ::Prism::CallNode,
1761
+ name: ::String,
1762
+ kind: T.nilable(::Spoom::Deadcode::Definition::Kind)
1763
+ ).returns(::String)
1764
+ end
1765
+ def transform_sig(node, name:, kind:); end
1766
+ end
1767
+
1768
+ # An abstraction to simplify handling of Prism::CallNode nodes.
1769
+ class Spoom::Deadcode::Send < ::T::Struct
1770
+ const :node, ::Prism::CallNode
1771
+ const :name, ::String
1772
+ const :recv, T.nilable(::Prism::Node), default: T.unsafe(nil)
1773
+ const :args, T::Array[::Prism::Node], default: T.unsafe(nil)
1774
+ const :block, T.nilable(::Prism::Node), default: T.unsafe(nil)
1775
+ const :location, ::Spoom::Location
1776
+
1777
+ sig do
1778
+ type_parameters(:T)
1779
+ .params(
1780
+ arg_type: T::Class[T.type_parameter(:T)],
1781
+ block: T.proc.params(arg: T.type_parameter(:T)).void
1782
+ ).void
1783
+ end
1784
+ def each_arg(arg_type, &block); end
1785
+
1786
+ sig { params(block: T.proc.params(key: ::Prism::Node, value: T.nilable(::Prism::Node)).void).void }
1787
+ def each_arg_assoc(&block); end
1788
+
1789
+ class << self
1790
+ def inherited(s); end
1791
+ end
1792
+ end
1793
+
1794
+ class Spoom::Error < ::StandardError; end
1795
+
1796
+ class Spoom::ExecResult < ::T::Struct
1797
+ const :out, ::String
1798
+ const :err, T.nilable(::String)
1799
+ const :status, T::Boolean
1800
+ const :exit_code, ::Integer
1801
+
1802
+ sig { returns(::String) }
1803
+ def to_s; end
1804
+
1805
+ class << self
1806
+ def inherited(s); end
1807
+ end
1808
+ end
1809
+
1810
+ class Spoom::FileCollector
1811
+ # Initialize a new file collector
1812
+ #
1813
+ # If `allow_extensions` is empty, all files are collected.
1814
+ # If `allow_extensions` is an array of extensions, only files with one of these extensions are collected.
1815
+ #
1816
+ # If `allow_mime_types` is empty, all files are collected.
1817
+ # If `allow_mime_types` is an array of mimetypes, files without an extension are collected if their mimetype is in
1818
+ # the list.
1819
+ sig do
1820
+ params(
1821
+ allow_extensions: T::Array[::String],
1822
+ allow_mime_types: T::Array[::String],
1823
+ exclude_patterns: T::Array[::String]
1824
+ ).void
1825
+ end
1826
+ def initialize(allow_extensions: T.unsafe(nil), allow_mime_types: T.unsafe(nil), exclude_patterns: T.unsafe(nil)); end
1827
+
1828
+ sig { returns(T::Array[::String]) }
1829
+ def files; end
1830
+
1831
+ sig { params(path: ::String).void }
1832
+ def visit_path(path); end
1833
+
1834
+ sig { params(paths: T::Array[::String]).void }
1835
+ def visit_paths(paths); end
1836
+
1837
+ private
1838
+
1839
+ sig { params(path: ::String).returns(::String) }
1840
+ def clean_path(path); end
1841
+
1842
+ sig { params(path: ::String).returns(T::Boolean) }
1843
+ def excluded_file?(path); end
1844
+
1845
+ sig { params(path: ::String).returns(T::Boolean) }
1846
+ def excluded_path?(path); end
1847
+
1848
+ sig { params(path: ::String).returns(T.nilable(::String)) }
1849
+ def mime_type_for(path); end
1850
+
1851
+ sig { params(path: ::String).void }
1852
+ def visit_directory(path); end
1853
+
1854
+ sig { params(path: ::String).void }
1855
+ def visit_file(path); end
1856
+ end
1857
+
1858
+ # Build a file hierarchy from a set of file paths.
1859
+ class Spoom::FileTree
1860
+ sig { params(paths: T::Enumerable[::String]).void }
1861
+ def initialize(paths = T.unsafe(nil)); end
1862
+
1863
+ # Add a `path` to the tree
1864
+ #
1865
+ # This will create all nodes until the root of `path`.
1866
+ sig { params(path: ::String).returns(::Spoom::FileTree::Node) }
1867
+ def add_path(path); end
1868
+
1869
+ # Add all `paths` to the tree
1870
+ sig { params(paths: T::Enumerable[::String]).void }
1871
+ def add_paths(paths); end
1872
+
1873
+ # All the nodes in this tree
1874
+ sig { returns(T::Array[::Spoom::FileTree::Node]) }
1875
+ def nodes; end
1876
+
1877
+ # Return a map of typing scores for each node in the tree
1878
+ sig { params(context: ::Spoom::Context).returns(T::Hash[::Spoom::FileTree::Node, ::Float]) }
1879
+ def nodes_strictness_scores(context); end
1880
+
1881
+ # All the paths in this tree
1882
+ sig { returns(T::Array[::String]) }
1883
+ def paths; end
1884
+
1885
+ # Return a map of typing scores for each path in the tree
1886
+ sig { params(context: ::Spoom::Context).returns(T::Hash[::String, ::Float]) }
1887
+ def paths_strictness_scores(context); end
1888
+
1889
+ sig { params(out: T.any(::IO, ::StringIO), colors: T::Boolean).void }
1890
+ def print(out: T.unsafe(nil), colors: T.unsafe(nil)); end
1891
+
1892
+ # All root nodes
1893
+ sig { returns(T::Array[::Spoom::FileTree::Node]) }
1894
+ def roots; end
1895
+ end
1896
+
1897
+ # A visitor that collects all the nodes in a tree
1898
+ class Spoom::FileTree::CollectNodes < ::Spoom::FileTree::Visitor
1899
+ sig { void }
1900
+ def initialize; end
1901
+
1902
+ sig { returns(T::Array[::Spoom::FileTree::Node]) }
1903
+ def nodes; end
1904
+
1905
+ sig { override.params(node: ::Spoom::FileTree::Node).void }
1906
+ def visit_node(node); end
1907
+ end
1908
+
1909
+ # A visitor that collects the typing score of each node in a tree
1910
+ class Spoom::FileTree::CollectScores < ::Spoom::FileTree::CollectStrictnesses
1911
+ sig { params(context: ::Spoom::Context).void }
1912
+ def initialize(context); end
1913
+
1914
+ sig { returns(T::Hash[::Spoom::FileTree::Node, ::Float]) }
1915
+ def scores; end
1916
+
1917
+ sig { override.params(node: ::Spoom::FileTree::Node).void }
1918
+ def visit_node(node); end
1919
+
1920
+ private
1921
+
1922
+ sig { params(node: ::Spoom::FileTree::Node).returns(::Float) }
1923
+ def node_score(node); end
1924
+
1925
+ sig { params(strictness: T.nilable(::String)).returns(::Float) }
1926
+ def strictness_score(strictness); end
1927
+ end
1928
+
1929
+ # A visitor that collects the strictness of each node in a tree
1930
+ class Spoom::FileTree::CollectStrictnesses < ::Spoom::FileTree::Visitor
1931
+ sig { params(context: ::Spoom::Context).void }
1932
+ def initialize(context); end
1933
+
1934
+ sig { returns(T::Hash[::Spoom::FileTree::Node, T.nilable(::String)]) }
1935
+ def strictnesses; end
1936
+
1937
+ sig { override.params(node: ::Spoom::FileTree::Node).void }
1938
+ def visit_node(node); end
1939
+ end
1940
+
1941
+ # A node representing either a file or a directory inside a FileTree
1942
+ class Spoom::FileTree::Node < ::T::Struct
1943
+ const :parent, T.nilable(::Spoom::FileTree::Node)
1944
+ const :name, ::String
1945
+ const :children, T::Hash[::String, ::Spoom::FileTree::Node], default: T.unsafe(nil)
1946
+
1947
+ # Full path to this node from root
1948
+ sig { returns(::String) }
1949
+ def path; end
1950
+
1951
+ class << self
1952
+ def inherited(s); end
1953
+ end
1954
+ end
1955
+
1956
+ # An internal class used to print a FileTree
1957
+ #
1958
+ # See `FileTree#print`
1959
+ class Spoom::FileTree::Printer < ::Spoom::FileTree::Visitor
1960
+ sig do
1961
+ params(
1962
+ strictnesses: T::Hash[::Spoom::FileTree::Node, T.nilable(::String)],
1963
+ out: T.any(::IO, ::StringIO),
1964
+ colors: T::Boolean
1965
+ ).void
1966
+ end
1967
+ def initialize(strictnesses, out: T.unsafe(nil), colors: T.unsafe(nil)); end
1968
+
1969
+ sig { override.params(node: ::Spoom::FileTree::Node).void }
1970
+ def visit_node(node); end
1971
+
1972
+ private
1973
+
1974
+ sig { params(strictness: T.nilable(::String)).returns(::Spoom::Color) }
1975
+ def strictness_color(strictness); end
1976
+ end
1977
+
1978
+ # An abstract visitor for FileTree
1979
+ #
1980
+ # @abstract It cannot be directly instantiated. Subclasses must implement the `abstract` methods below.
1981
+ class Spoom::FileTree::Visitor
1982
+ abstract!
1983
+
1984
+ sig { params(node: ::Spoom::FileTree::Node).void }
1985
+ def visit_node(node); end
1986
+
1987
+ sig { params(nodes: T::Array[::Spoom::FileTree::Node]).void }
1988
+ def visit_nodes(nodes); end
1989
+
1990
+ sig { params(tree: ::Spoom::FileTree).void }
1991
+ def visit_tree(tree); end
1992
+ end
1993
+
1994
+ module Spoom::Git; end
1995
+
1996
+ class Spoom::Git::Commit < ::T::Struct
1997
+ const :sha, ::String
1998
+ const :time, ::Time
1999
+
2000
+ sig { returns(::Integer) }
2001
+ def timestamp; end
2002
+
2003
+ class << self
2004
+ def inherited(s); end
2005
+
2006
+ # Parse a line formatted as `%h %at` into a `Commit`
2007
+ sig { params(string: ::String).returns(T.nilable(::Spoom::Git::Commit)) }
2008
+ def parse_line(string); end
2009
+ end
2010
+ end
2011
+
2012
+ module Spoom::LSP; end
2013
+
2014
+ class Spoom::LSP::Client
2015
+ sig { params(sorbet_bin: ::String, sorbet_args: ::String, path: ::String).void }
2016
+ def initialize(sorbet_bin, *sorbet_args, path: T.unsafe(nil)); end
2017
+
2018
+ sig { void }
2019
+ def close; end
2020
+
2021
+ sig { params(uri: ::String, line: ::Integer, column: ::Integer).returns(T::Array[::Spoom::LSP::Location]) }
2022
+ def definitions(uri, line, column); end
2023
+
2024
+ sig { params(uri: ::String).returns(T::Array[::Spoom::LSP::DocumentSymbol]) }
2025
+ def document_symbols(uri); end
2026
+
2027
+ sig { params(uri: ::String, line: ::Integer, column: ::Integer).returns(T.nilable(::Spoom::LSP::Hover)) }
2028
+ def hover(uri, line, column); end
2029
+
2030
+ sig { returns(::Integer) }
2031
+ def next_id; end
2032
+
2033
+ # LSP requests
2034
+ #
2035
+ # @raise [Error::AlreadyOpen]
2036
+ sig { params(workspace_path: ::String).void }
2037
+ def open(workspace_path); end
2038
+
2039
+ sig { returns(T.nilable(T::Hash[T.untyped, T.untyped])) }
2040
+ def read; end
2041
+
2042
+ # @raise [Error::BadHeaders]
2043
+ sig { returns(T.nilable(::String)) }
2044
+ def read_raw; end
2045
+
2046
+ sig do
2047
+ params(
2048
+ uri: ::String,
2049
+ line: ::Integer,
2050
+ column: ::Integer,
2051
+ include_decl: T::Boolean
2052
+ ).returns(T::Array[::Spoom::LSP::Location])
2053
+ end
2054
+ def references(uri, line, column, include_decl = T.unsafe(nil)); end
2055
+
2056
+ sig { params(message: ::Spoom::LSP::Message).returns(T.nilable(T::Hash[T.untyped, T.untyped])) }
2057
+ def send(message); end
2058
+
2059
+ sig { params(json_string: ::String).void }
2060
+ def send_raw(json_string); end
2061
+
2062
+ sig { params(uri: ::String, line: ::Integer, column: ::Integer).returns(T::Array[::Spoom::LSP::SignatureHelp]) }
2063
+ def signatures(uri, line, column); end
2064
+
2065
+ sig { params(query: ::String).returns(T::Array[::Spoom::LSP::DocumentSymbol]) }
2066
+ def symbols(query); end
2067
+
2068
+ sig { params(uri: ::String, line: ::Integer, column: ::Integer).returns(T::Array[::Spoom::LSP::Location]) }
2069
+ def type_definitions(uri, line, column); end
2070
+ end
2071
+
2072
+ class Spoom::LSP::Diagnostic < ::T::Struct
2073
+ include ::Spoom::LSP::PrintableSymbol
2074
+
2075
+ const :range, ::Spoom::LSP::Range
2076
+ const :code, ::Integer
2077
+ const :message, ::String
2078
+ const :information, ::Object
2079
+
2080
+ sig { override.params(printer: ::Spoom::LSP::SymbolPrinter).void }
2081
+ def accept_printer(printer); end
2082
+
2083
+ sig { returns(::String) }
2084
+ def to_s; end
2085
+
2086
+ class << self
2087
+ sig { params(json: T::Hash[T.untyped, T.untyped]).returns(::Spoom::LSP::Diagnostic) }
2088
+ def from_json(json); end
2089
+
2090
+ def inherited(s); end
2091
+ end
2092
+ end
2093
+
2094
+ class Spoom::LSP::DocumentSymbol < ::T::Struct
2095
+ include ::Spoom::LSP::PrintableSymbol
2096
+
2097
+ const :name, ::String
2098
+ const :detail, T.nilable(::String)
2099
+ const :kind, ::Integer
2100
+ const :location, T.nilable(::Spoom::LSP::Location)
2101
+ const :range, T.nilable(::Spoom::LSP::Range)
2102
+ const :children, T::Array[::Spoom::LSP::DocumentSymbol]
2103
+
2104
+ sig { override.params(printer: ::Spoom::LSP::SymbolPrinter).void }
2105
+ def accept_printer(printer); end
2106
+
2107
+ sig { returns(::String) }
2108
+ def kind_string; end
2109
+
2110
+ sig { returns(::String) }
2111
+ def to_s; end
2112
+
2113
+ class << self
2114
+ sig { params(json: T::Hash[T.untyped, T.untyped]).returns(::Spoom::LSP::DocumentSymbol) }
2115
+ def from_json(json); end
2116
+
2117
+ def inherited(s); end
2118
+ end
2119
+ end
2120
+
2121
+ Spoom::LSP::DocumentSymbol::SYMBOL_KINDS = T.let(T.unsafe(nil), Hash)
2122
+ class Spoom::LSP::Error < ::Spoom::Error; end
2123
+ class Spoom::LSP::Error::AlreadyOpen < ::Spoom::LSP::Error; end
2124
+ class Spoom::LSP::Error::BadHeaders < ::Spoom::LSP::Error; end
2125
+
2126
+ class Spoom::LSP::Error::Diagnostics < ::Spoom::LSP::Error
2127
+ sig { params(uri: ::String, diagnostics: T::Array[::Spoom::LSP::Diagnostic]).void }
2128
+ def initialize(uri, diagnostics); end
2129
+
2130
+ sig { returns(T::Array[::Spoom::LSP::Diagnostic]) }
2131
+ def diagnostics; end
2132
+
2133
+ sig { returns(::String) }
2134
+ def uri; end
2135
+
2136
+ class << self
2137
+ sig { params(json: T::Hash[T.untyped, T.untyped]).returns(::Spoom::LSP::Error::Diagnostics) }
2138
+ def from_json(json); end
2139
+ end
2140
+ end
2141
+
2142
+ class Spoom::LSP::Hover < ::T::Struct
2143
+ include ::Spoom::LSP::PrintableSymbol
2144
+
2145
+ const :contents, ::String
2146
+ const :range, T.nilable(T::Range[T.untyped])
2147
+
2148
+ sig { override.params(printer: ::Spoom::LSP::SymbolPrinter).void }
2149
+ def accept_printer(printer); end
2150
+
2151
+ sig { returns(::String) }
2152
+ def to_s; end
2153
+
2154
+ class << self
2155
+ sig { params(json: T::Hash[T.untyped, T.untyped]).returns(::Spoom::LSP::Hover) }
2156
+ def from_json(json); end
2157
+
2158
+ def inherited(s); end
2159
+ end
2160
+ end
2161
+
2162
+ class Spoom::LSP::Location < ::T::Struct
2163
+ include ::Spoom::LSP::PrintableSymbol
2164
+
2165
+ const :uri, ::String
2166
+ const :range, ::Spoom::LSP::Range
2167
+
2168
+ sig { override.params(printer: ::Spoom::LSP::SymbolPrinter).void }
2169
+ def accept_printer(printer); end
2170
+
2171
+ sig { returns(::String) }
2172
+ def to_s; end
2173
+
2174
+ class << self
2175
+ sig { params(json: T::Hash[T.untyped, T.untyped]).returns(::Spoom::LSP::Location) }
2176
+ def from_json(json); end
2177
+
2178
+ def inherited(s); end
2179
+ end
2180
+ end
2181
+
2182
+ # A general message as defined by JSON-RPC.
2183
+ #
2184
+ # The language server protocol always uses `"2.0"` as the `jsonrpc` version.
2185
+ class Spoom::LSP::Message
2186
+ sig { void }
2187
+ def initialize; end
2188
+
2189
+ sig { returns(T::Hash[T.untyped, T.untyped]) }
2190
+ def as_json; end
2191
+
2192
+ sig { params(args: T.untyped).returns(::String) }
2193
+ def to_json(*args); end
2194
+ end
2195
+
2196
+ # A notification message.
2197
+ #
2198
+ # A processed notification message must not send a response back. They work like events.
2199
+ class Spoom::LSP::Notification < ::Spoom::LSP::Message
2200
+ sig { params(method: ::String, params: T::Hash[T.untyped, T.untyped]).void }
2201
+ def initialize(method, params); end
2202
+
2203
+ sig { returns(::String) }
2204
+ def method; end
2205
+
2206
+ sig { returns(T::Hash[T.untyped, T.untyped]) }
2207
+ def params; end
2208
+ end
2209
+
2210
+ class Spoom::LSP::Position < ::T::Struct
2211
+ include ::Spoom::LSP::PrintableSymbol
2212
+
2213
+ const :line, ::Integer
2214
+ const :char, ::Integer
2215
+
2216
+ sig { override.params(printer: ::Spoom::LSP::SymbolPrinter).void }
2217
+ def accept_printer(printer); end
2218
+
2219
+ sig { returns(::String) }
2220
+ def to_s; end
2221
+
2222
+ class << self
2223
+ sig { params(json: T::Hash[T.untyped, T.untyped]).returns(::Spoom::LSP::Position) }
2224
+ def from_json(json); end
2225
+
2226
+ def inherited(s); end
2227
+ end
2228
+ end
2229
+
2230
+ # @abstract Subclasses must implement the `abstract` methods below.
2231
+ module Spoom::LSP::PrintableSymbol
2232
+ interface!
2233
+
2234
+ # @abstract
2235
+ sig { abstract.params(printer: ::Spoom::LSP::SymbolPrinter).void }
2236
+ def accept_printer(printer); end
2237
+ end
2238
+
2239
+ class Spoom::LSP::Range < ::T::Struct
2240
+ include ::Spoom::LSP::PrintableSymbol
2241
+
2242
+ const :start, ::Spoom::LSP::Position
2243
+ const :end, ::Spoom::LSP::Position
2244
+
2245
+ sig { override.params(printer: ::Spoom::LSP::SymbolPrinter).void }
2246
+ def accept_printer(printer); end
2247
+
2248
+ sig { returns(::String) }
2249
+ def to_s; end
2250
+
2251
+ class << self
2252
+ sig { params(json: T::Hash[T.untyped, T.untyped]).returns(::Spoom::LSP::Range) }
2253
+ def from_json(json); end
2254
+
2255
+ def inherited(s); end
2256
+ end
2257
+ end
2258
+
2259
+ # A request message to describe a request between the client and the server.
2260
+ #
2261
+ # Every processed request must send a response back to the sender of the request.
2262
+ class Spoom::LSP::Request < ::Spoom::LSP::Message
2263
+ sig { params(id: ::Integer, method: ::String, params: T::Hash[T.untyped, T.untyped]).void }
2264
+ def initialize(id, method, params); end
2265
+
2266
+ sig { returns(::Integer) }
2267
+ def id; end
2268
+
2269
+ sig { returns(T::Hash[T.untyped, T.untyped]) }
2270
+ def params; end
2271
+ end
2272
+
2273
+ class Spoom::LSP::ResponseError < ::Spoom::LSP::Error
2274
+ sig { params(code: ::Integer, message: ::String, data: T::Hash[T.untyped, T.untyped]).void }
2275
+ def initialize(code, message, data); end
2276
+
2277
+ sig { returns(::Integer) }
2278
+ def code; end
2279
+
2280
+ sig { returns(T::Hash[T.untyped, T.untyped]) }
2281
+ def data; end
2282
+
2283
+ class << self
2284
+ sig { params(json: T::Hash[T.untyped, T.untyped]).returns(::Spoom::LSP::ResponseError) }
2285
+ def from_json(json); end
2286
+ end
2287
+ end
2288
+
2289
+ class Spoom::LSP::SignatureHelp < ::T::Struct
2290
+ include ::Spoom::LSP::PrintableSymbol
2291
+
2292
+ const :label, T.nilable(::String)
2293
+ const :doc, ::Object
2294
+ const :params, T::Array[T.untyped]
2295
+
2296
+ sig { override.params(printer: ::Spoom::LSP::SymbolPrinter).void }
2297
+ def accept_printer(printer); end
2298
+
2299
+ sig { returns(::String) }
2300
+ def to_s; end
2301
+
2302
+ class << self
2303
+ sig { params(json: T::Hash[T.untyped, T.untyped]).returns(::Spoom::LSP::SignatureHelp) }
2304
+ def from_json(json); end
2305
+
2306
+ def inherited(s); end
2307
+ end
2308
+ end
2309
+
2310
+ class Spoom::LSP::SymbolPrinter < ::Spoom::Printer
2311
+ sig do
2312
+ params(
2313
+ out: T.any(::IO, ::StringIO),
2314
+ colors: T::Boolean,
2315
+ indent_level: ::Integer,
2316
+ prefix: T.nilable(::String)
2317
+ ).void
2318
+ end
2319
+ def initialize(out: T.unsafe(nil), colors: T.unsafe(nil), indent_level: T.unsafe(nil), prefix: T.unsafe(nil)); end
2320
+
2321
+ sig { params(uri: ::String).returns(::String) }
2322
+ def clean_uri(uri); end
2323
+
2324
+ sig { returns(T.nilable(::String)) }
2325
+ def prefix; end
2326
+
2327
+ # @return [String, nil]
2328
+ def prefix=(_arg0); end
2329
+
2330
+ sig { params(objects: T::Array[::Spoom::LSP::PrintableSymbol]).void }
2331
+ def print_list(objects); end
2332
+
2333
+ sig { params(object: T.nilable(::Spoom::LSP::PrintableSymbol)).void }
2334
+ def print_object(object); end
2335
+
2336
+ sig { params(objects: T::Array[::Spoom::LSP::PrintableSymbol]).void }
2337
+ def print_objects(objects); end
2338
+
2339
+ sig { returns(T::Set[::Integer]) }
2340
+ def seen; end
2341
+ end
2342
+
2343
+ class Spoom::Location
2344
+ include ::Comparable
2345
+
2346
+ # @raise [LocationError]
2347
+ sig do
2348
+ params(
2349
+ file: ::String,
2350
+ start_line: T.nilable(::Integer),
2351
+ start_column: T.nilable(::Integer),
2352
+ end_line: T.nilable(::Integer),
2353
+ end_column: T.nilable(::Integer)
2354
+ ).void
2355
+ end
2356
+ def initialize(file, start_line: T.unsafe(nil), start_column: T.unsafe(nil), end_line: T.unsafe(nil), end_column: T.unsafe(nil)); end
2357
+
2358
+ sig { override.params(other: ::BasicObject).returns(T.nilable(::Integer)) }
2359
+ def <=>(other); end
2360
+
2361
+ # @return [Integer, nil]
2362
+ def end_column; end
2363
+
2364
+ # @return [Integer, nil]
2365
+ def end_line; end
2366
+
2367
+ sig { returns(::String) }
2368
+ def file; end
2369
+
2370
+ sig { params(other: ::Spoom::Location).returns(T::Boolean) }
2371
+ def include?(other); end
2372
+
2373
+ # @return [Integer, nil]
2374
+ def start_column; end
2375
+
2376
+ sig { returns(T.nilable(::Integer)) }
2377
+ def start_line; end
2378
+
2379
+ sig { returns(::String) }
2380
+ def to_s; end
2381
+
2382
+ class << self
2383
+ sig { params(file: ::String, location: ::Prism::Location).returns(::Spoom::Location) }
2384
+ def from_prism(file, location); end
2385
+
2386
+ # @raise [LocationError]
2387
+ sig { params(location_string: ::String).returns(::Spoom::Location) }
2388
+ def from_string(location_string); end
2389
+ end
2390
+ end
2391
+
2392
+ class Spoom::Location::LocationError < ::Spoom::Error; end
2393
+
2394
+ class Spoom::Model
2395
+ sig { void }
2396
+ def initialize; end
2397
+
2398
+ # Get a symbol by it's full name
2399
+ #
2400
+ # Raises an error if the symbol is not found
2401
+ #
2402
+ # @raise [Error]
2403
+ sig { params(full_name: ::String).returns(::Spoom::Model::Symbol) }
2404
+ def [](full_name); end
2405
+
2406
+ sig { void }
2407
+ def finalize!; end
2408
+
2409
+ # Register a new symbol by it's full name
2410
+ #
2411
+ # If the symbol already exists, it will be returned.
2412
+ sig { params(full_name: ::String).returns(::Spoom::Model::Symbol) }
2413
+ def register_symbol(full_name); end
2414
+
2415
+ sig { params(full_name: ::String, context: ::Spoom::Model::Symbol).returns(::Spoom::Model::Symbol) }
2416
+ def resolve_symbol(full_name, context:); end
2417
+
2418
+ sig { params(symbol: ::Spoom::Model::Symbol).returns(T::Array[::Spoom::Model::Symbol]) }
2419
+ def subtypes(symbol); end
2420
+
2421
+ sig { params(symbol: ::Spoom::Model::Symbol).returns(T::Array[::Spoom::Model::Symbol]) }
2422
+ def supertypes(symbol); end
2423
+
2424
+ # All the symbols registered in this model
2425
+ sig { returns(T::Hash[::String, ::Spoom::Model::Symbol]) }
2426
+ def symbols; end
2427
+
2428
+ sig { returns(Spoom::Poset[::Spoom::Model::Symbol]) }
2429
+ def symbols_hierarchy; end
2430
+
2431
+ private
2432
+
2433
+ sig { void }
2434
+ def compute_symbols_hierarchy!; end
2435
+ end
2436
+
2437
+ # @abstract It cannot be directly instantiated. Subclasses must implement the `abstract` methods below.
2438
+ class Spoom::Model::Attr < ::Spoom::Model::Property
2439
+ abstract!
2440
+ end
2441
+
2442
+ class Spoom::Model::AttrAccessor < ::Spoom::Model::Attr; end
2443
+ class Spoom::Model::AttrReader < ::Spoom::Model::Attr; end
2444
+ class Spoom::Model::AttrWriter < ::Spoom::Model::Attr; end
2445
+
2446
+ # Populate a Model by visiting the nodes from a Ruby file
2447
+ class Spoom::Model::Builder < ::Spoom::Model::NamespaceVisitor
2448
+ sig { params(model: ::Spoom::Model, file: ::String, comments: T::Array[::Prism::Comment]).void }
2449
+ def initialize(model, file, comments:); end
2450
+
2451
+ sig { override.params(node: ::Prism::CallNode).void }
2452
+ def visit_call_node(node); end
2453
+
2454
+ sig { override.params(node: ::Prism::ClassNode).void }
2455
+ def visit_class_node(node); end
2456
+
2457
+ sig { override.params(node: ::Prism::ConstantPathWriteNode).void }
2458
+ def visit_constant_path_write_node(node); end
2459
+
2460
+ sig { override.params(node: ::Prism::ConstantWriteNode).void }
2461
+ def visit_constant_write_node(node); end
2462
+
2463
+ sig { override.params(node: ::Prism::DefNode).void }
2464
+ def visit_def_node(node); end
2465
+
2466
+ sig { override.params(node: ::Prism::ModuleNode).void }
2467
+ def visit_module_node(node); end
2468
+
2469
+ sig { override.params(node: ::Prism::MultiWriteNode).void }
2470
+ def visit_multi_write_node(node); end
2471
+
2472
+ sig { override.params(node: ::Prism::SingletonClassNode).void }
2473
+ def visit_singleton_class_node(node); end
2474
+
2475
+ private
2476
+
2477
+ sig { returns(T::Array[::Spoom::Model::Sig]) }
2478
+ def collect_sigs; end
2479
+
2480
+ sig { returns(::Spoom::Model::Visibility) }
2481
+ def current_visibility; end
2482
+
2483
+ sig { params(node: ::Prism::Node).returns(T::Array[::Spoom::Model::Comment]) }
2484
+ def node_comments(node); end
2485
+
2486
+ sig { params(node: ::Prism::Node).returns(::Spoom::Location) }
2487
+ def node_location(node); end
2488
+ end
2489
+
2490
+ class Spoom::Model::Class < ::Spoom::Model::Namespace
2491
+ sig do
2492
+ params(
2493
+ symbol: ::Spoom::Model::Symbol,
2494
+ owner: T.nilable(::Spoom::Model::Namespace),
2495
+ location: ::Spoom::Location,
2496
+ superclass_name: T.nilable(::String),
2497
+ comments: T::Array[::Spoom::Model::Comment]
2498
+ ).void
2499
+ end
2500
+ def initialize(symbol, owner:, location:, superclass_name: T.unsafe(nil), comments: T.unsafe(nil)); end
2501
+
2502
+ sig { returns(T.nilable(::String)) }
2503
+ def superclass_name; end
2504
+
2505
+ # @return [String, nil]
2506
+ def superclass_name=(_arg0); end
2507
+ end
2508
+
2509
+ class Spoom::Model::Comment
2510
+ sig { params(string: ::String, location: ::Spoom::Location).void }
2511
+ def initialize(string, location); end
2512
+
2513
+ sig { returns(::Spoom::Location) }
2514
+ def location; end
2515
+
2516
+ sig { returns(::String) }
2517
+ def string; end
2518
+ end
2519
+
2520
+ class Spoom::Model::Constant < ::Spoom::Model::SymbolDef
2521
+ sig do
2522
+ params(
2523
+ symbol: ::Spoom::Model::Symbol,
2524
+ owner: T.nilable(::Spoom::Model::Namespace),
2525
+ location: ::Spoom::Location,
2526
+ value: ::String,
2527
+ comments: T::Array[::Spoom::Model::Comment]
2528
+ ).void
2529
+ end
2530
+ def initialize(symbol, owner:, location:, value:, comments: T.unsafe(nil)); end
2531
+
2532
+ sig { returns(::String) }
2533
+ def value; end
2534
+ end
2535
+
2536
+ class Spoom::Model::Error < ::Spoom::Error; end
2537
+ class Spoom::Model::Extend < ::Spoom::Model::Mixin; end
2538
+ class Spoom::Model::Include < ::Spoom::Model::Mixin; end
2539
+ class Spoom::Model::Method < ::Spoom::Model::Property; end
2540
+
2541
+ # A mixin (include, prepend, extend) to a namespace
2542
+ #
2543
+ # @abstract It cannot be directly instantiated. Subclasses must implement the `abstract` methods below.
2544
+ class Spoom::Model::Mixin
2545
+ abstract!
2546
+
2547
+ sig { params(name: ::String).void }
2548
+ def initialize(name); end
2549
+
2550
+ sig { returns(::String) }
2551
+ def name; end
2552
+ end
2553
+
2554
+ class Spoom::Model::Module < ::Spoom::Model::Namespace; end
2555
+
2556
+ # A class or module
2557
+ #
2558
+ # @abstract It cannot be directly instantiated. Subclasses must implement the `abstract` methods below.
2559
+ class Spoom::Model::Namespace < ::Spoom::Model::SymbolDef
2560
+ abstract!
2561
+
2562
+ sig do
2563
+ params(
2564
+ symbol: ::Spoom::Model::Symbol,
2565
+ owner: T.nilable(::Spoom::Model::Namespace),
2566
+ location: ::Spoom::Location,
2567
+ comments: T::Array[::Spoom::Model::Comment]
2568
+ ).void
2569
+ end
2570
+ def initialize(symbol, owner:, location:, comments: T.unsafe(nil)); end
2571
+
2572
+ sig { returns(T::Array[::Spoom::Model::SymbolDef]) }
2573
+ def children; end
2574
+
2575
+ sig { returns(T::Array[::Spoom::Model::Mixin]) }
2576
+ def mixins; end
2577
+ end
2578
+
2579
+ # @abstract It cannot be directly instantiated. Subclasses must implement the `abstract` methods below.
2580
+ class Spoom::Model::NamespaceVisitor < ::Spoom::Visitor
2581
+ abstract!
2582
+
2583
+ sig { void }
2584
+ def initialize; end
2585
+
2586
+ sig { override.params(node: T.nilable(::Prism::Node)).void }
2587
+ def visit(node); end
2588
+ end
2589
+
2590
+ class Spoom::Model::Prepend < ::Spoom::Model::Mixin; end
2591
+
2592
+ # A method or an attribute accessor
2593
+ #
2594
+ # @abstract It cannot be directly instantiated. Subclasses must implement the `abstract` methods below.
2595
+ class Spoom::Model::Property < ::Spoom::Model::SymbolDef
2596
+ abstract!
2597
+
2598
+ sig do
2599
+ params(
2600
+ symbol: ::Spoom::Model::Symbol,
2601
+ owner: T.nilable(::Spoom::Model::Namespace),
2602
+ location: ::Spoom::Location,
2603
+ visibility: ::Spoom::Model::Visibility,
2604
+ sigs: T::Array[::Spoom::Model::Sig],
2605
+ comments: T::Array[::Spoom::Model::Comment]
2606
+ ).void
2607
+ end
2608
+ def initialize(symbol, owner:, location:, visibility:, sigs: T.unsafe(nil), comments: T.unsafe(nil)); end
2609
+
2610
+ sig { returns(T::Array[::Spoom::Model::Sig]) }
2611
+ def sigs; end
2612
+
2613
+ sig { returns(::Spoom::Model::Visibility) }
2614
+ def visibility; end
2615
+ end
2616
+
2617
+ # A reference to something that looks like a constant or a method
2618
+ #
2619
+ # Constants could be classes, modules, or actual constants.
2620
+ # Methods could be accessors, instance or class methods, aliases, etc.
2621
+ class Spoom::Model::Reference < ::T::Struct
2622
+ const :kind, ::Spoom::Model::Reference::Kind
2623
+ const :name, ::String
2624
+ const :location, ::Spoom::Location
2625
+
2626
+ sig { returns(T::Boolean) }
2627
+ def constant?; end
2628
+
2629
+ sig { returns(T::Boolean) }
2630
+ def method?; end
2631
+
2632
+ class << self
2633
+ sig { params(name: ::String, location: ::Spoom::Location).returns(::Spoom::Model::Reference) }
2634
+ def constant(name, location); end
2635
+
2636
+ def inherited(s); end
2637
+
2638
+ sig { params(name: ::String, location: ::Spoom::Location).returns(::Spoom::Model::Reference) }
2639
+ def method(name, location); end
2640
+ end
2641
+ end
2642
+
2643
+ class Spoom::Model::Reference::Kind < ::T::Enum
2644
+ enums do
2645
+ Constant = new
2646
+ Method = new
2647
+ end
2648
+ end
2649
+
2650
+ # Visit a file to collect all the references to constants and methods
2651
+ class Spoom::Model::ReferencesVisitor < ::Spoom::Visitor
2652
+ sig { params(file: ::String).void }
2653
+ def initialize(file); end
2654
+
2655
+ sig { returns(T::Array[::Spoom::Model::Reference]) }
2656
+ def references; end
2657
+
2658
+ sig { override.params(node: ::Prism::AliasMethodNode).void }
2659
+ def visit_alias_method_node(node); end
2660
+
2661
+ sig { override.params(node: ::Prism::AndNode).void }
2662
+ def visit_and_node(node); end
2663
+
2664
+ sig { override.params(node: ::Prism::BlockArgumentNode).void }
2665
+ def visit_block_argument_node(node); end
2666
+
2667
+ sig { override.params(node: ::Prism::CallAndWriteNode).void }
2668
+ def visit_call_and_write_node(node); end
2669
+
2670
+ sig { override.params(node: ::Prism::CallNode).void }
2671
+ def visit_call_node(node); end
2672
+
2673
+ sig { override.params(node: ::Prism::CallOperatorWriteNode).void }
2674
+ def visit_call_operator_write_node(node); end
2675
+
2676
+ sig { override.params(node: ::Prism::CallOrWriteNode).void }
2677
+ def visit_call_or_write_node(node); end
2678
+
2679
+ sig { override.params(node: ::Prism::ClassNode).void }
2680
+ def visit_class_node(node); end
2681
+
2682
+ sig { override.params(node: ::Prism::ConstantAndWriteNode).void }
2683
+ def visit_constant_and_write_node(node); end
2684
+
2685
+ sig { override.params(node: ::Prism::ConstantOperatorWriteNode).void }
2686
+ def visit_constant_operator_write_node(node); end
2687
+
2688
+ sig { override.params(node: ::Prism::ConstantOrWriteNode).void }
2689
+ def visit_constant_or_write_node(node); end
2690
+
2691
+ sig { override.params(node: ::Prism::ConstantPathNode).void }
2692
+ def visit_constant_path_node(node); end
2693
+
2694
+ sig { override.params(node: ::Prism::ConstantPathWriteNode).void }
2695
+ def visit_constant_path_write_node(node); end
2696
+
2697
+ sig { override.params(node: ::Prism::ConstantReadNode).void }
2698
+ def visit_constant_read_node(node); end
2699
+
2700
+ sig { override.params(node: ::Prism::ConstantWriteNode).void }
2701
+ def visit_constant_write_node(node); end
2702
+
2703
+ sig { override.params(node: ::Prism::LocalVariableAndWriteNode).void }
2704
+ def visit_local_variable_and_write_node(node); end
2705
+
2706
+ sig { override.params(node: ::Prism::LocalVariableOperatorWriteNode).void }
2707
+ def visit_local_variable_operator_write_node(node); end
2708
+
2709
+ sig { override.params(node: ::Prism::LocalVariableOrWriteNode).void }
2710
+ def visit_local_variable_or_write_node(node); end
2711
+
2712
+ sig { override.params(node: ::Prism::LocalVariableWriteNode).void }
2713
+ def visit_local_variable_write_node(node); end
2714
+
2715
+ sig { override.params(node: ::Prism::ModuleNode).void }
2716
+ def visit_module_node(node); end
2717
+
2718
+ sig { override.params(node: ::Prism::MultiWriteNode).void }
2719
+ def visit_multi_write_node(node); end
2720
+
2721
+ sig { override.params(node: ::Prism::OrNode).void }
2722
+ def visit_or_node(node); end
2723
+
2724
+ private
2725
+
2726
+ sig { params(node: ::Prism::Node).returns(::Spoom::Location) }
2727
+ def node_location(node); end
2728
+
2729
+ sig { params(name: ::String, node: ::Prism::Node).void }
2730
+ def reference_constant(name, node); end
2731
+
2732
+ sig { params(name: ::String, node: ::Prism::Node).void }
2733
+ def reference_method(name, node); end
2734
+ end
2735
+
2736
+ # A Sorbet signature (sig block)
2737
+ class Spoom::Model::Sig
2738
+ sig { params(string: ::String).void }
2739
+ def initialize(string); end
2740
+
2741
+ sig { returns(::String) }
2742
+ def string; end
2743
+ end
2744
+
2745
+ class Spoom::Model::SingletonClass < ::Spoom::Model::Namespace; end
2746
+
2747
+ # A Symbol is a uniquely named entity in the Ruby codebase
2748
+ #
2749
+ # A symbol can have multiple definitions, e.g. a class can be reopened.
2750
+ # Sometimes a symbol can have multiple definitions of different types,
2751
+ # e.g. `foo` method can be defined both as a method and as an attribute accessor.
2752
+ class Spoom::Model::Symbol
2753
+ sig { params(full_name: ::String).void }
2754
+ def initialize(full_name); end
2755
+
2756
+ # The definitions of this symbol (where it exists in the code)
2757
+ sig { returns(T::Array[::Spoom::Model::SymbolDef]) }
2758
+ def definitions; end
2759
+
2760
+ # The full, unique name of this symbol
2761
+ sig { returns(::String) }
2762
+ def full_name; end
2763
+
2764
+ # The short name of this symbol
2765
+ sig { returns(::String) }
2766
+ def name; end
2767
+
2768
+ sig { returns(::String) }
2769
+ def to_s; end
2770
+ end
2771
+
2772
+ # A SymbolDef is a definition of a Symbol
2773
+ #
2774
+ # It can be a class, module, constant, method, etc.
2775
+ # A SymbolDef has a location pointing to the actual code that defines the symbol.
2776
+ #
2777
+ # @abstract It cannot be directly instantiated. Subclasses must implement the `abstract` methods below.
2778
+ class Spoom::Model::SymbolDef
2779
+ abstract!
2780
+
2781
+ sig do
2782
+ params(
2783
+ symbol: ::Spoom::Model::Symbol,
2784
+ owner: T.nilable(::Spoom::Model::Namespace),
2785
+ location: ::Spoom::Location,
2786
+ comments: T::Array[::Spoom::Model::Comment]
2787
+ ).void
2788
+ end
2789
+ def initialize(symbol, owner:, location:, comments:); end
2790
+
2791
+ # The comments associated with this definition
2792
+ sig { returns(T::Array[::Spoom::Model::Comment]) }
2793
+ def comments; end
2794
+
2795
+ # The full name of the symbol this definition belongs to
2796
+ sig { returns(::String) }
2797
+ def full_name; end
2798
+
2799
+ # The actual code location of this definition
2800
+ sig { returns(::Spoom::Location) }
2801
+ def location; end
2802
+
2803
+ # The short name of the symbol this definition belongs to
2804
+ sig { returns(::String) }
2805
+ def name; end
2806
+
2807
+ # The enclosing namespace this definition belongs to
2808
+ sig { returns(T.nilable(::Spoom::Model::Namespace)) }
2809
+ def owner; end
2810
+
2811
+ # The symbol this definition belongs to
2812
+ sig { returns(::Spoom::Model::Symbol) }
2813
+ def symbol; end
2814
+ end
2815
+
2816
+ class Spoom::Model::UnresolvedSymbol < ::Spoom::Model::Symbol
2817
+ sig { override.returns(::String) }
2818
+ def to_s; end
2819
+ end
2820
+
2821
+ class Spoom::Model::Visibility < ::T::Enum
2822
+ enums do
2823
+ Private = new
2824
+ Protected = new
2825
+ Public = new
2826
+ end
2827
+ end
2828
+
2829
+ class Spoom::ParseError < ::Spoom::Error; end
2830
+
2831
+ # A Poset is a set of elements with a partial order relation.
2832
+ #
2833
+ # The partial order relation is a binary relation that is reflexive, antisymmetric, and transitive.
2834
+ # It can be used to represent a hierarchy of classes or modules, the dependencies between gems, etc.
2835
+ class Spoom::Poset
2836
+ extend T::Generic
2837
+
2838
+ E = type_member { { upper: Object } }
2839
+
2840
+ sig { void }
2841
+ def initialize; end
2842
+
2843
+ # Get the POSet element for a given value
2844
+ #
2845
+ # Raises if the element is not found
2846
+ #
2847
+ # @raise [Error]
2848
+ sig { params(value: E).returns(Spoom::Poset::Element[E]) }
2849
+ def [](value); end
2850
+
2851
+ # Add a direct edge from one element to another
2852
+ #
2853
+ # Transitive edges (transitive closure) are automatically computed.
2854
+ # Adds the elements if they don't exist.
2855
+ # If the direct edge already exists, nothing is done.
2856
+ sig { params(from: E, to: E).void }
2857
+ def add_direct_edge(from, to); end
2858
+
2859
+ # Add an element to the POSet
2860
+ sig { params(value: E).returns(Spoom::Poset::Element[E]) }
2861
+ def add_element(value); end
2862
+
2863
+ # Is there a direct edge from `from` to `to`?
2864
+ sig { params(from: E, to: E).returns(T::Boolean) }
2865
+ def direct_edge?(from, to); end
2866
+
2867
+ # Is there an edge (direct or indirect) from `from` to `to`?
2868
+ sig { params(from: E, to: E).returns(T::Boolean) }
2869
+ def edge?(from, to); end
2870
+
2871
+ # Is the given value a element in the POSet?
2872
+ sig { params(value: E).returns(T::Boolean) }
2873
+ def element?(value); end
2874
+
2875
+ # Show the POSet as a DOT graph using xdot (used for debugging)
2876
+ sig { params(direct: T::Boolean, transitive: T::Boolean).void }
2877
+ def show_dot(direct: T.unsafe(nil), transitive: T.unsafe(nil)); end
2878
+
2879
+ # Return the POSet as a DOT graph
2880
+ sig { params(direct: T::Boolean, transitive: T::Boolean).returns(::String) }
2881
+ def to_dot(direct: T.unsafe(nil), transitive: T.unsafe(nil)); end
2882
+ end
2883
+
2884
+ # An element in a POSet
2885
+ class Spoom::Poset::Element
2886
+ extend T::Generic
2887
+ include ::Comparable
2888
+
2889
+ E = type_member { { upper: Object } }
2890
+
2891
+ sig { params(value: E).void }
2892
+ def initialize(value); end
2893
+
2894
+ sig { params(other: T.untyped).returns(T.nilable(::Integer)) }
2895
+ def <=>(other); end
2896
+
2897
+ # Direct and indirect ancestors of this element
2898
+ sig { returns(T::Array[E]) }
2899
+ def ancestors; end
2900
+
2901
+ # Direct children of this element
2902
+ sig { returns(T::Array[E]) }
2903
+ def children; end
2904
+
2905
+ # Direct and indirect descendants of this element
2906
+ sig { returns(T::Array[E]) }
2907
+ def descendants; end
2908
+
2909
+ # Edges (direct and indirect) from this element to other elements in the same POSet
2910
+ #
2911
+ # @return [Set<Element[E]>]
2912
+ def dfroms; end
2913
+
2914
+ # Edges (direct and indirect) from this element to other elements in the same POSet
2915
+ sig { returns(T::Set[Spoom::Poset::Element[E]]) }
2916
+ def dtos; end
2917
+
2918
+ # Edges (direct and indirect) from this element to other elements in the same POSet
2919
+ #
2920
+ # @return [Set<Element[E]>]
2921
+ def froms; end
2922
+
2923
+ # Direct parents of this element
2924
+ sig { returns(T::Array[E]) }
2925
+ def parents; end
2926
+
2927
+ # Edges (direct and indirect) from this element to other elements in the same POSet
2928
+ #
2929
+ # @return [Set<Element[E]>]
2930
+ def tos; end
2931
+
2932
+ # The value held by this element
2933
+ sig { returns(E) }
2934
+ def value; end
2935
+ end
2936
+
2937
+ class Spoom::Poset::Error < ::Spoom::Error; end
2938
+
2939
+ class Spoom::Printer
2940
+ include ::Spoom::Colorize
2941
+
2942
+ sig { params(out: T.any(::IO, ::StringIO), colors: T::Boolean, indent_level: ::Integer).void }
2943
+ def initialize(out: T.unsafe(nil), colors: T.unsafe(nil), indent_level: T.unsafe(nil)); end
2944
+
2945
+ # Colorize `string` with color if `@colors`
2946
+ sig { params(string: ::String, color: ::Spoom::Color).returns(::String) }
2947
+ def colorize(string, *color); end
2948
+
2949
+ # Decrease indent level
2950
+ sig { void }
2951
+ def dedent; end
2952
+
2953
+ # Increase indent level
2954
+ sig { void }
2955
+ def indent; end
2956
+
2957
+ sig { returns(T.any(::IO, ::StringIO)) }
2958
+ def out; end
2959
+
2960
+ # @return [IO, StringIO]
2961
+ def out=(_arg0); end
2962
+
2963
+ # Print `string` into `out`
2964
+ sig { params(string: T.nilable(::String)).void }
2965
+ def print(string); end
2966
+
2967
+ # Print `string` colored with `color` into `out`
2968
+ #
2969
+ # Does not use colors unless `@colors`.
2970
+ sig { params(string: T.nilable(::String), color: ::Spoom::Color).void }
2971
+ def print_colored(string, *color); end
2972
+
2973
+ # Print `string` with indent and newline
2974
+ sig { params(string: T.nilable(::String)).void }
2975
+ def printl(string); end
2976
+
2977
+ # Print a new line into `out`
2978
+ sig { void }
2979
+ def printn; end
2980
+
2981
+ # Print an indent space into `out`
2982
+ sig { void }
2983
+ def printt; end
2984
+ end
2985
+
2986
+ Spoom::SPOOM_PATH = T.let(T.unsafe(nil), String)
2987
+ module Spoom::Sorbet; end
2988
+
2989
+ class Spoom::Sorbet::Assertions
2990
+ class << self
2991
+ sig { params(ruby_contents: ::String, file: ::String).returns(::String) }
2992
+ def rbi_to_rbs(ruby_contents, file:); end
2993
+
2994
+ private
2995
+
2996
+ sig { params(ruby_contents: ::String, file: ::String).returns(T::Array[::Spoom::Sorbet::Assertions::AssignNode]) }
2997
+ def collect_assigns(ruby_contents, file:); end
2998
+
2999
+ sig { params(assign: ::Spoom::Sorbet::Assertions::AssignNode).returns(::String) }
3000
+ def dedent_value(assign); end
3001
+ end
3002
+ end
3003
+
3004
+ class Spoom::Sorbet::Assertions::AssignNode
3005
+ sig do
3006
+ params(
3007
+ node: T.any(::Prism::ClassVariableAndWriteNode, ::Prism::ClassVariableOperatorWriteNode, ::Prism::ClassVariableOrWriteNode, ::Prism::ClassVariableWriteNode, ::Prism::ConstantAndWriteNode, ::Prism::ConstantOperatorWriteNode, ::Prism::ConstantOrWriteNode, ::Prism::ConstantPathAndWriteNode, ::Prism::ConstantPathOperatorWriteNode, ::Prism::ConstantPathOrWriteNode, ::Prism::ConstantPathWriteNode, ::Prism::ConstantWriteNode, ::Prism::GlobalVariableAndWriteNode, ::Prism::GlobalVariableOperatorWriteNode, ::Prism::GlobalVariableOrWriteNode, ::Prism::GlobalVariableWriteNode, ::Prism::InstanceVariableAndWriteNode, ::Prism::InstanceVariableOperatorWriteNode, ::Prism::InstanceVariableOrWriteNode, ::Prism::InstanceVariableWriteNode, ::Prism::LocalVariableAndWriteNode, ::Prism::LocalVariableOperatorWriteNode, ::Prism::LocalVariableOrWriteNode, ::Prism::LocalVariableWriteNode),
3008
+ operator_loc: ::Prism::Location,
3009
+ value: ::Prism::Node,
3010
+ type: ::Prism::Node
3011
+ ).void
3012
+ end
3013
+ def initialize(node, operator_loc, value, type); end
3014
+
3015
+ sig do
3016
+ returns(T.any(::Prism::ClassVariableAndWriteNode, ::Prism::ClassVariableOperatorWriteNode, ::Prism::ClassVariableOrWriteNode, ::Prism::ClassVariableWriteNode, ::Prism::ConstantAndWriteNode, ::Prism::ConstantOperatorWriteNode, ::Prism::ConstantOrWriteNode, ::Prism::ConstantPathAndWriteNode, ::Prism::ConstantPathOperatorWriteNode, ::Prism::ConstantPathOrWriteNode, ::Prism::ConstantPathWriteNode, ::Prism::ConstantWriteNode, ::Prism::GlobalVariableAndWriteNode, ::Prism::GlobalVariableOperatorWriteNode, ::Prism::GlobalVariableOrWriteNode, ::Prism::GlobalVariableWriteNode, ::Prism::InstanceVariableAndWriteNode, ::Prism::InstanceVariableOperatorWriteNode, ::Prism::InstanceVariableOrWriteNode, ::Prism::InstanceVariableWriteNode, ::Prism::LocalVariableAndWriteNode, ::Prism::LocalVariableOperatorWriteNode, ::Prism::LocalVariableOrWriteNode, ::Prism::LocalVariableWriteNode))
3017
+ end
3018
+ def node; end
3019
+
3020
+ sig { returns(::Prism::Location) }
3021
+ def operator_loc; end
3022
+
3023
+ sig { returns(::String) }
3024
+ def rbs_type; end
3025
+
3026
+ # @return [Prism::Node]
3027
+ def type; end
3028
+
3029
+ sig { returns(::Prism::Node) }
3030
+ def value; end
3031
+ end
3032
+
3033
+ Spoom::Sorbet::Assertions::AssignType = T.type_alias { T.any(::Prism::ClassVariableAndWriteNode, ::Prism::ClassVariableOperatorWriteNode, ::Prism::ClassVariableOrWriteNode, ::Prism::ClassVariableWriteNode, ::Prism::ConstantAndWriteNode, ::Prism::ConstantOperatorWriteNode, ::Prism::ConstantOrWriteNode, ::Prism::ConstantPathAndWriteNode, ::Prism::ConstantPathOperatorWriteNode, ::Prism::ConstantPathOrWriteNode, ::Prism::ConstantPathWriteNode, ::Prism::ConstantWriteNode, ::Prism::GlobalVariableAndWriteNode, ::Prism::GlobalVariableOperatorWriteNode, ::Prism::GlobalVariableOrWriteNode, ::Prism::GlobalVariableWriteNode, ::Prism::InstanceVariableAndWriteNode, ::Prism::InstanceVariableOperatorWriteNode, ::Prism::InstanceVariableOrWriteNode, ::Prism::InstanceVariableWriteNode, ::Prism::LocalVariableAndWriteNode, ::Prism::LocalVariableOperatorWriteNode, ::Prism::LocalVariableOrWriteNode, ::Prism::LocalVariableWriteNode) }
3034
+
3035
+ class Spoom::Sorbet::Assertions::Locator < ::Spoom::Visitor
3036
+ sig { void }
3037
+ def initialize; end
3038
+
3039
+ sig { returns(T::Array[::Spoom::Sorbet::Assertions::AssignNode]) }
3040
+ def assigns; end
3041
+
3042
+ sig { params(node: ::Prism::Node).returns(T::Boolean) }
3043
+ def contains_heredoc?(node); end
3044
+
3045
+ # Is this node a `T` or `::T` constant?
3046
+ sig { params(node: T.nilable(::Prism::Node)).returns(T::Boolean) }
3047
+ def t?(node); end
3048
+
3049
+ # Is this node a `T.let` or `T.cast`?
3050
+ sig { params(node: ::Prism::CallNode).returns(T::Boolean) }
3051
+ def t_annotation?(node); end
3052
+
3053
+ sig do
3054
+ params(
3055
+ node: T.any(::Prism::ClassVariableAndWriteNode, ::Prism::ClassVariableOperatorWriteNode, ::Prism::ClassVariableOrWriteNode, ::Prism::ClassVariableWriteNode, ::Prism::ConstantAndWriteNode, ::Prism::ConstantOperatorWriteNode, ::Prism::ConstantOrWriteNode, ::Prism::ConstantPathAndWriteNode, ::Prism::ConstantPathOperatorWriteNode, ::Prism::ConstantPathOrWriteNode, ::Prism::ConstantPathWriteNode, ::Prism::ConstantWriteNode, ::Prism::GlobalVariableAndWriteNode, ::Prism::GlobalVariableOperatorWriteNode, ::Prism::GlobalVariableOrWriteNode, ::Prism::GlobalVariableWriteNode, ::Prism::InstanceVariableAndWriteNode, ::Prism::InstanceVariableOperatorWriteNode, ::Prism::InstanceVariableOrWriteNode, ::Prism::InstanceVariableWriteNode, ::Prism::LocalVariableAndWriteNode, ::Prism::LocalVariableOperatorWriteNode, ::Prism::LocalVariableOrWriteNode, ::Prism::LocalVariableWriteNode)
3056
+ ).void
3057
+ end
3058
+ def visit_assign(node); end
3059
+
3060
+ # @param node [AssignType]
3061
+ # @return [void]
3062
+ def visit_class_variable_and_write_node(*args, **_arg1, &blk); end
3063
+
3064
+ # @param node [AssignType]
3065
+ # @return [void]
3066
+ def visit_class_variable_operator_write_node(*args, **_arg1, &blk); end
3067
+
3068
+ # @param node [AssignType]
3069
+ # @return [void]
3070
+ def visit_class_variable_or_write_node(*args, **_arg1, &blk); end
3071
+
3072
+ # @param node [AssignType]
3073
+ # @return [void]
3074
+ def visit_class_variable_write_node(*args, **_arg1, &blk); end
3075
+
3076
+ # @param node [AssignType]
3077
+ # @return [void]
3078
+ def visit_constant_and_write_node(*args, **_arg1, &blk); end
3079
+
3080
+ # @param node [AssignType]
3081
+ # @return [void]
3082
+ def visit_constant_operator_write_node(*args, **_arg1, &blk); end
3083
+
3084
+ # @param node [AssignType]
3085
+ # @return [void]
3086
+ def visit_constant_or_write_node(*args, **_arg1, &blk); end
3087
+
3088
+ # @param node [AssignType]
3089
+ # @return [void]
3090
+ def visit_constant_path_and_write_node(*args, **_arg1, &blk); end
3091
+
3092
+ # @param node [AssignType]
3093
+ # @return [void]
3094
+ def visit_constant_path_operator_write_node(*args, **_arg1, &blk); end
3095
+
3096
+ # @param node [AssignType]
3097
+ # @return [void]
3098
+ def visit_constant_path_or_write_node(*args, **_arg1, &blk); end
3099
+
3100
+ # @param node [AssignType]
3101
+ # @return [void]
3102
+ def visit_constant_path_write_node(*args, **_arg1, &blk); end
3103
+
3104
+ # @param node [AssignType]
3105
+ # @return [void]
3106
+ def visit_constant_write_node(*args, **_arg1, &blk); end
3107
+
3108
+ # @param node [AssignType]
3109
+ # @return [void]
3110
+ def visit_global_variable_and_write_node(*args, **_arg1, &blk); end
3111
+
3112
+ # @param node [AssignType]
3113
+ # @return [void]
3114
+ def visit_global_variable_operator_write_node(*args, **_arg1, &blk); end
3115
+
3116
+ # @param node [AssignType]
3117
+ # @return [void]
3118
+ def visit_global_variable_or_write_node(*args, **_arg1, &blk); end
3119
+
3120
+ # @param node [AssignType]
3121
+ # @return [void]
3122
+ def visit_global_variable_write_node(*args, **_arg1, &blk); end
3123
+
3124
+ # @param node [AssignType]
3125
+ # @return [void]
3126
+ def visit_instance_variable_and_write_node(*args, **_arg1, &blk); end
3127
+
3128
+ # @param node [AssignType]
3129
+ # @return [void]
3130
+ def visit_instance_variable_operator_write_node(*args, **_arg1, &blk); end
3131
+
3132
+ # @param node [AssignType]
3133
+ # @return [void]
3134
+ def visit_instance_variable_or_write_node(*args, **_arg1, &blk); end
3135
+
3136
+ # @param node [AssignType]
3137
+ # @return [void]
3138
+ def visit_instance_variable_write_node(*args, **_arg1, &blk); end
3139
+
3140
+ # @param node [AssignType]
3141
+ # @return [void]
3142
+ def visit_local_variable_and_write_node(*args, **_arg1, &blk); end
3143
+
3144
+ # @param node [AssignType]
3145
+ # @return [void]
3146
+ def visit_local_variable_operator_write_node(*args, **_arg1, &blk); end
3147
+
3148
+ # @param node [AssignType]
3149
+ # @return [void]
3150
+ def visit_local_variable_or_write_node(*args, **_arg1, &blk); end
3151
+
3152
+ # @param node [AssignType]
3153
+ # @return [void]
3154
+ def visit_local_variable_write_node(*args, **_arg1, &blk); end
3155
+
3156
+ # @param node [AssignType]
3157
+ # @return [void]
3158
+ def visit_multi_write_node(*args, **_arg1, &blk); end
3159
+ end
3160
+
3161
+ Spoom::Sorbet::Assertions::Locator::ANNOTATION_METHODS = T.let(T.unsafe(nil), Array)
3162
+
3163
+ class Spoom::Sorbet::Assertions::Locator::HeredocVisitor < ::Spoom::Visitor
3164
+ sig { void }
3165
+ def initialize; end
3166
+
3167
+ sig { returns(T::Boolean) }
3168
+ def contains_heredoc; end
3169
+
3170
+ sig { override.params(node: T.nilable(::Prism::Node)).void }
3171
+ def visit(node); end
3172
+ end
3173
+
3174
+ Spoom::Sorbet::BIN_PATH = T.let(T.unsafe(nil), String)
3175
+ Spoom::Sorbet::CONFIG_PATH = T.let(T.unsafe(nil), String)
3176
+
3177
+ # Parse Sorbet config files
3178
+ #
3179
+ # Parses a Sorbet config file:
3180
+ #
3181
+ # ```ruby
3182
+ # config = Spoom::Sorbet::Config.parse_file("sorbet/config")
3183
+ # puts config.paths # "."
3184
+ # ```
3185
+ #
3186
+ # Parses a Sorbet config string:
3187
+ #
3188
+ # ```ruby
3189
+ # config = Spoom::Sorbet::Config.parse_string(<<~CONFIG)
3190
+ # a
3191
+ # --file=b
3192
+ # --ignore=c
3193
+ # CONFIG
3194
+ # puts config.paths # "a", "b"
3195
+ # puts config.ignore # "c"
3196
+ # ```
3197
+ class Spoom::Sorbet::Config
3198
+ sig { void }
3199
+ def initialize; end
3200
+
3201
+ # @return [Array<String>]
3202
+ def allowed_extensions; end
3203
+
3204
+ # @return [Array<String>]
3205
+ def allowed_extensions=(_arg0); end
3206
+
3207
+ sig { returns(::Spoom::Sorbet::Config) }
3208
+ def copy; end
3209
+
3210
+ # @return [Array<String>]
3211
+ def ignore; end
3212
+
3213
+ # @return [Array<String>]
3214
+ def ignore=(_arg0); end
3215
+
3216
+ sig { returns(T::Boolean) }
3217
+ def no_stdlib; end
3218
+
3219
+ # @return [Boolean]
3220
+ def no_stdlib=(_arg0); end
3221
+
3222
+ # Returns self as a string of options that can be passed to Sorbet
3223
+ #
3224
+ # Example:
3225
+ # ~~~rb
3226
+ # config = Sorbet::Config.new
3227
+ # config.paths << "/foo"
3228
+ # config.paths << "/bar"
3229
+ # config.ignore << "/baz"
3230
+ # config.allowed_extensions << ".rb"
3231
+ #
3232
+ # puts config.options_string # "/foo /bar --ignore /baz --allowed-extension .rb"
3233
+ # ~~~
3234
+ sig { returns(::String) }
3235
+ def options_string; end
3236
+
3237
+ sig { returns(T::Array[::String]) }
3238
+ def paths; end
3239
+
3240
+ # @return [Array<String>]
3241
+ def paths=(_arg0); end
3242
+
3243
+ class << self
3244
+ sig { params(sorbet_config_path: ::String).returns(::Spoom::Sorbet::Config) }
3245
+ def parse_file(sorbet_config_path); end
3246
+
3247
+ sig { params(sorbet_config: ::String).returns(::Spoom::Sorbet::Config) }
3248
+ def parse_string(sorbet_config); end
3249
+
3250
+ private
3251
+
3252
+ sig { params(line: ::String).returns(::String) }
3253
+ def parse_option(line); end
3254
+ end
3255
+ end
3256
+
3257
+ Spoom::Sorbet::Config::DEFAULT_ALLOWED_EXTENSIONS = T.let(T.unsafe(nil), Array)
3258
+
3259
+ class Spoom::Sorbet::Error < ::Spoom::Error
3260
+ sig { params(message: ::String, result: ::Spoom::ExecResult).void }
3261
+ def initialize(message, result); end
3262
+
3263
+ sig { returns(::Spoom::ExecResult) }
3264
+ def result; end
3265
+ end
3266
+
3267
+ class Spoom::Sorbet::Error::Killed < ::Spoom::Sorbet::Error; end
3268
+ class Spoom::Sorbet::Error::Segfault < ::Spoom::Sorbet::Error; end
3269
+
3270
+ module Spoom::Sorbet::Errors
3271
+ class << self
3272
+ sig { params(errors: T::Array[::Spoom::Sorbet::Errors::Error]).returns(T::Array[::Spoom::Sorbet::Errors::Error]) }
3273
+ def sort_errors_by_code(errors); end
3274
+ end
3275
+ end
3276
+
3277
+ Spoom::Sorbet::Errors::DEFAULT_ERROR_URL_BASE = T.let(T.unsafe(nil), String)
3278
+
3279
+ class Spoom::Sorbet::Errors::Error
3280
+ include ::Comparable
3281
+
3282
+ sig do
3283
+ params(
3284
+ file: T.nilable(::String),
3285
+ line: T.nilable(::Integer),
3286
+ message: T.nilable(::String),
3287
+ code: T.nilable(::Integer),
3288
+ more: T::Array[::String]
3289
+ ).void
3290
+ end
3291
+ def initialize(file, line, message, code, more = T.unsafe(nil)); end
3292
+
3293
+ # By default errors are sorted by location
3294
+ sig { params(other: T.untyped).returns(::Integer) }
3295
+ def <=>(other); end
3296
+
3297
+ # @return [Integer, nil]
3298
+ def code; end
3299
+
3300
+ sig { returns(T.nilable(::String)) }
3301
+ def file; end
3302
+
3303
+ # Other files associated with the error
3304
+ sig { returns(T::Set[::String]) }
3305
+ def files_from_error_sections; end
3306
+
3307
+ sig { returns(T.nilable(::Integer)) }
3308
+ def line; end
3309
+
3310
+ # @return [String, nil]
3311
+ def message; end
3312
+
3313
+ sig { returns(T::Array[::String]) }
3314
+ def more; end
3315
+
3316
+ sig { returns(::String) }
3317
+ def to_s; end
3318
+ end
3319
+
3320
+ # Parse errors from Sorbet output
3321
+ class Spoom::Sorbet::Errors::Parser
3322
+ sig { params(error_url_base: ::String).void }
3323
+ def initialize(error_url_base: T.unsafe(nil)); end
3324
+
3325
+ sig { params(output: ::String).returns(T::Array[::Spoom::Sorbet::Errors::Error]) }
3326
+ def parse(output); end
3327
+
3328
+ private
3329
+
3330
+ # @raise [ParseError]
3331
+ sig { params(line: ::String).void }
3332
+ def append_error(line); end
3333
+
3334
+ # @raise [ParseError]
3335
+ sig { void }
3336
+ def close_error; end
3337
+
3338
+ sig { params(error_url_base: ::String).returns(::Regexp) }
3339
+ def error_line_match_regexp(error_url_base); end
3340
+
3341
+ sig { params(line: ::String).returns(T.nilable(::Spoom::Sorbet::Errors::Error)) }
3342
+ def match_error_line(line); end
3343
+
3344
+ # @raise [ParseError]
3345
+ sig { params(error: ::Spoom::Sorbet::Errors::Error).void }
3346
+ def open_error(error); end
3347
+
3348
+ class << self
3349
+ sig { params(output: ::String, error_url_base: ::String).returns(T::Array[::Spoom::Sorbet::Errors::Error]) }
3350
+ def parse_string(output, error_url_base: T.unsafe(nil)); end
3351
+ end
3352
+ end
3353
+
3354
+ Spoom::Sorbet::Errors::Parser::HEADER = T.let(T.unsafe(nil), Array)
3355
+ class Spoom::Sorbet::Errors::Parser::ParseError < ::Spoom::Error; end
3356
+ Spoom::Sorbet::GEM_PATH = T.let(T.unsafe(nil), String)
3357
+ Spoom::Sorbet::GEM_VERSION = T.let(T.unsafe(nil), String)
3358
+ Spoom::Sorbet::KILLED_CODE = T.let(T.unsafe(nil), Integer)
3359
+
3360
+ module Spoom::Sorbet::MetricsParser
3361
+ class << self
3362
+ sig { params(path: ::String, prefix: ::String).returns(T::Hash[::String, ::Integer]) }
3363
+ def parse_file(path, prefix = T.unsafe(nil)); end
3364
+
3365
+ sig { params(obj: T::Hash[::String, T.untyped], prefix: ::String).returns(T::Hash[::String, ::Integer]) }
3366
+ def parse_hash(obj, prefix = T.unsafe(nil)); end
3367
+
3368
+ sig { params(string: ::String, prefix: ::String).returns(T::Hash[::String, ::Integer]) }
3369
+ def parse_string(string, prefix = T.unsafe(nil)); end
3370
+ end
3371
+ end
3372
+
3373
+ Spoom::Sorbet::MetricsParser::DEFAULT_PREFIX = T.let(T.unsafe(nil), String)
3374
+ Spoom::Sorbet::SEGFAULT_CODE = T.let(T.unsafe(nil), Integer)
3375
+
3376
+ module Spoom::Sorbet::Sigils
3377
+ class << self
3378
+ # changes the sigil in the file at the passed path to the specified new strictness
3379
+ sig { params(path: T.any(::Pathname, ::String), new_strictness: ::String).returns(T::Boolean) }
3380
+ def change_sigil_in_file(path, new_strictness); end
3381
+
3382
+ # changes the sigil to have a new strictness in a list of files
3383
+ sig { params(path_list: T::Array[::String], new_strictness: ::String).returns(T::Array[::String]) }
3384
+ def change_sigil_in_files(path_list, new_strictness); end
3385
+
3386
+ # returns a string containing the strictness of a sigil in a file at the passed path
3387
+ # * returns nil if no sigil
3388
+ sig { params(path: T.any(::Pathname, ::String)).returns(T.nilable(::String)) }
3389
+ def file_strictness(path); end
3390
+
3391
+ # returns the full sigil comment string for the passed strictness
3392
+ sig { params(strictness: ::String).returns(::String) }
3393
+ def sigil_string(strictness); end
3394
+
3395
+ # returns the strictness of a sigil in the passed file content string (nil if no sigil)
3396
+ sig { params(content: ::String).returns(T.nilable(::String)) }
3397
+ def strictness_in_content(content); end
3398
+
3399
+ # returns a string which is the passed content but with the sigil updated to a new strictness
3400
+ sig { params(content: ::String, new_strictness: ::String).returns(::String) }
3401
+ def update_sigil(content, new_strictness); end
3402
+
3403
+ # returns true if the passed string is a valid strictness (else false)
3404
+ sig { params(strictness: ::String).returns(T::Boolean) }
3405
+ def valid_strictness?(strictness); end
3406
+ end
3407
+ end
3408
+
3409
+ Spoom::Sorbet::Sigils::SIGIL_REGEXP = T.let(T.unsafe(nil), Regexp)
3410
+ Spoom::Sorbet::Sigils::STRICTNESS_FALSE = T.let(T.unsafe(nil), String)
3411
+ Spoom::Sorbet::Sigils::STRICTNESS_IGNORE = T.let(T.unsafe(nil), String)
3412
+ Spoom::Sorbet::Sigils::STRICTNESS_INTERNAL = T.let(T.unsafe(nil), String)
3413
+ Spoom::Sorbet::Sigils::STRICTNESS_STRICT = T.let(T.unsafe(nil), String)
3414
+ Spoom::Sorbet::Sigils::STRICTNESS_STRONG = T.let(T.unsafe(nil), String)
3415
+ Spoom::Sorbet::Sigils::STRICTNESS_TRUE = T.let(T.unsafe(nil), String)
3416
+ Spoom::Sorbet::Sigils::VALID_STRICTNESS = T.let(T.unsafe(nil), Array)
3417
+
3418
+ class Spoom::Sorbet::Sigs
3419
+ class << self
3420
+ sig { params(ruby_contents: ::String).returns(::String) }
3421
+ def rbi_to_rbs(ruby_contents); end
3422
+
3423
+ sig { params(ruby_contents: ::String).returns(::String) }
3424
+ def rbs_to_rbi(ruby_contents); end
3425
+
3426
+ sig { params(ruby_contents: ::String).returns(::String) }
3427
+ def strip(ruby_contents); end
3428
+
3429
+ private
3430
+
3431
+ sig { params(ruby_contents: ::String).returns(T::Array[[::RBI::RBSComment, T.any(::RBI::Attr, ::RBI::Method)]]) }
3432
+ def collect_rbs_comments(ruby_contents); end
3433
+
3434
+ sig { params(ruby_contents: ::String).returns(T::Array[[::RBI::Sig, T.any(::RBI::Attr, ::RBI::Method)]]) }
3435
+ def collect_sorbet_sigs(ruby_contents); end
3436
+ end
3437
+ end
3438
+
3439
+ class Spoom::Sorbet::Sigs::Error < ::Spoom::Error; end
3440
+
3441
+ class Spoom::Sorbet::Sigs::RBIToRBSTranslator
3442
+ class << self
3443
+ sig { params(sig: ::RBI::Sig, node: T.any(::RBI::Attr, ::RBI::Method)).returns(::String) }
3444
+ def translate(sig, node); end
3445
+
3446
+ private
3447
+
3448
+ sig { params(sig: ::RBI::Sig, node: ::RBI::Attr).returns(::String) }
3449
+ def translate_attr_sig(sig, node); end
3450
+
3451
+ sig { params(sig: ::RBI::Sig, node: ::RBI::Method).returns(::String) }
3452
+ def translate_method_sig(sig, node); end
3453
+ end
3454
+ end
3455
+
3456
+ class Spoom::Sorbet::Sigs::RBSToRBITranslator
3457
+ class << self
3458
+ sig { params(comment: ::RBI::RBSComment, node: T.any(::RBI::Attr, ::RBI::Method)).returns(::String) }
3459
+ def translate(comment, node); end
3460
+
3461
+ private
3462
+
3463
+ sig { params(comment: ::RBI::RBSComment, node: ::RBI::Attr).returns(::String) }
3464
+ def translate_attr_sig(comment, node); end
3465
+
3466
+ sig { params(rbs_comment: ::RBI::RBSComment, node: ::RBI::Method).returns(::String) }
3467
+ def translate_method_sig(rbs_comment, node); end
3468
+ end
3469
+ end
3470
+
3471
+ # From https://github.com/Shopify/ruby-lsp/blob/9154bfc6ef/lib/ruby_lsp/document.rb#L127
3472
+ class Spoom::Sorbet::Sigs::Scanner
3473
+ sig { params(source: ::String).void }
3474
+ def initialize(source); end
3475
+
3476
+ # Finds the character index inside the source string for a given line and column
3477
+ sig { params(line: ::Integer, character: ::Integer).returns(::Integer) }
3478
+ def find_char_position(line, character); end
3479
+ end
3480
+
3481
+ Spoom::Sorbet::Sigs::Scanner::LINE_BREAK = T.let(T.unsafe(nil), Integer)
3482
+
3483
+ class Spoom::Sorbet::Sigs::SigsLocator < ::RBI::Visitor
3484
+ sig { void }
3485
+ def initialize; end
3486
+
3487
+ sig { returns(T::Array[[::RBI::RBSComment, T.any(::RBI::Attr, ::RBI::Method)]]) }
3488
+ def rbs_comments; end
3489
+
3490
+ sig { returns(T::Array[[::RBI::Sig, T.any(::RBI::Attr, ::RBI::Method)]]) }
3491
+ def sigs; end
3492
+
3493
+ sig { override.params(node: T.nilable(::RBI::Node)).void }
3494
+ def visit(node); end
3495
+ end
3496
+
3497
+ class Spoom::Timeline
3498
+ sig { params(context: ::Spoom::Context, from: ::Time, to: ::Time).void }
3499
+ def initialize(context, from, to); end
3500
+
3501
+ # Return one commit for each date in `dates`
3502
+ sig { params(dates: T::Array[::Time]).returns(T::Array[::Spoom::Git::Commit]) }
3503
+ def commits_for_dates(dates); end
3504
+
3505
+ # Return all months between `from` and `to`
3506
+ sig { returns(T::Array[::Time]) }
3507
+ def months; end
3508
+
3509
+ # Return one commit for each month between `from` and `to`
3510
+ sig { returns(T::Array[::Spoom::Git::Commit]) }
3511
+ def ticks; end
3512
+ end
3513
+
3514
+ Spoom::VERSION = T.let(T.unsafe(nil), String)
3515
+
3516
+ class Spoom::Visitor < ::Prism::Visitor
3517
+ sig { override.params(node: ::Prism::AliasGlobalVariableNode).void }
3518
+ def visit_alias_global_variable_node(node); end
3519
+
3520
+ sig { override.params(node: ::Prism::AliasMethodNode).void }
3521
+ def visit_alias_method_node(node); end
3522
+
3523
+ sig { override.params(node: ::Prism::AlternationPatternNode).void }
3524
+ def visit_alternation_pattern_node(node); end
3525
+
3526
+ sig { override.params(node: ::Prism::AndNode).void }
3527
+ def visit_and_node(node); end
3528
+
3529
+ sig { override.params(node: ::Prism::ArgumentsNode).void }
3530
+ def visit_arguments_node(node); end
3531
+
3532
+ sig { override.params(node: ::Prism::ArrayNode).void }
3533
+ def visit_array_node(node); end
3534
+
3535
+ sig { override.params(node: ::Prism::ArrayPatternNode).void }
3536
+ def visit_array_pattern_node(node); end
3537
+
3538
+ sig { override.params(node: ::Prism::AssocNode).void }
3539
+ def visit_assoc_node(node); end
3540
+
3541
+ sig { override.params(node: ::Prism::AssocSplatNode).void }
3542
+ def visit_assoc_splat_node(node); end
3543
+
3544
+ sig { override.params(node: ::Prism::BackReferenceReadNode).void }
3545
+ def visit_back_reference_read_node(node); end
3546
+
3547
+ sig { override.params(node: ::Prism::BeginNode).void }
3548
+ def visit_begin_node(node); end
3549
+
3550
+ sig { override.params(node: ::Prism::BlockArgumentNode).void }
3551
+ def visit_block_argument_node(node); end
3552
+
3553
+ sig { override.params(node: ::Prism::BlockLocalVariableNode).void }
3554
+ def visit_block_local_variable_node(node); end
3555
+
3556
+ sig { override.params(node: ::Prism::BlockNode).void }
3557
+ def visit_block_node(node); end
3558
+
3559
+ sig { override.params(node: ::Prism::BlockParameterNode).void }
3560
+ def visit_block_parameter_node(node); end
3561
+
3562
+ sig { override.params(node: ::Prism::BlockParametersNode).void }
3563
+ def visit_block_parameters_node(node); end
3564
+
3565
+ sig { override.params(node: ::Prism::BreakNode).void }
3566
+ def visit_break_node(node); end
3567
+
3568
+ sig { override.params(node: ::Prism::CallAndWriteNode).void }
3569
+ def visit_call_and_write_node(node); end
3570
+
3571
+ sig { override.params(node: ::Prism::CallNode).void }
3572
+ def visit_call_node(node); end
3573
+
3574
+ sig { override.params(node: ::Prism::CallOperatorWriteNode).void }
3575
+ def visit_call_operator_write_node(node); end
3576
+
3577
+ sig { override.params(node: ::Prism::CallOrWriteNode).void }
3578
+ def visit_call_or_write_node(node); end
3579
+
3580
+ sig { override.params(node: ::Prism::CallTargetNode).void }
3581
+ def visit_call_target_node(node); end
3582
+
3583
+ sig { override.params(node: ::Prism::CapturePatternNode).void }
3584
+ def visit_capture_pattern_node(node); end
3585
+
3586
+ sig { override.params(node: ::Prism::CaseMatchNode).void }
3587
+ def visit_case_match_node(node); end
3588
+
3589
+ sig { override.params(node: ::Prism::CaseNode).void }
3590
+ def visit_case_node(node); end
3591
+
3592
+ sig { override.params(node: ::Prism::Node).void }
3593
+ def visit_child_nodes(node); end
3594
+
3595
+ sig { override.params(node: ::Prism::ClassNode).void }
3596
+ def visit_class_node(node); end
3597
+
3598
+ sig { override.params(node: ::Prism::ClassVariableAndWriteNode).void }
3599
+ def visit_class_variable_and_write_node(node); end
3600
+
3601
+ sig { override.params(node: ::Prism::ClassVariableOperatorWriteNode).void }
3602
+ def visit_class_variable_operator_write_node(node); end
3603
+
3604
+ sig { override.params(node: ::Prism::ClassVariableOrWriteNode).void }
3605
+ def visit_class_variable_or_write_node(node); end
3606
+
3607
+ sig { override.params(node: ::Prism::ClassVariableReadNode).void }
3608
+ def visit_class_variable_read_node(node); end
3609
+
3610
+ sig { override.params(node: ::Prism::ClassVariableTargetNode).void }
3611
+ def visit_class_variable_target_node(node); end
3612
+
3613
+ sig { override.params(node: ::Prism::ClassVariableWriteNode).void }
3614
+ def visit_class_variable_write_node(node); end
3615
+
3616
+ sig { override.params(node: ::Prism::ConstantAndWriteNode).void }
3617
+ def visit_constant_and_write_node(node); end
3618
+
3619
+ sig { override.params(node: ::Prism::ConstantOperatorWriteNode).void }
3620
+ def visit_constant_operator_write_node(node); end
3621
+
3622
+ sig { override.params(node: ::Prism::ConstantOrWriteNode).void }
3623
+ def visit_constant_or_write_node(node); end
3624
+
3625
+ sig { override.params(node: ::Prism::ConstantPathAndWriteNode).void }
3626
+ def visit_constant_path_and_write_node(node); end
3627
+
3628
+ sig { override.params(node: ::Prism::ConstantPathNode).void }
3629
+ def visit_constant_path_node(node); end
3630
+
3631
+ sig { override.params(node: ::Prism::ConstantPathOperatorWriteNode).void }
3632
+ def visit_constant_path_operator_write_node(node); end
3633
+
3634
+ sig { override.params(node: ::Prism::ConstantPathOrWriteNode).void }
3635
+ def visit_constant_path_or_write_node(node); end
3636
+
3637
+ sig { override.params(node: ::Prism::ConstantPathTargetNode).void }
3638
+ def visit_constant_path_target_node(node); end
3639
+
3640
+ sig { override.params(node: ::Prism::ConstantPathWriteNode).void }
3641
+ def visit_constant_path_write_node(node); end
3642
+
3643
+ sig { override.params(node: ::Prism::ConstantReadNode).void }
3644
+ def visit_constant_read_node(node); end
3645
+
3646
+ sig { override.params(node: ::Prism::ConstantTargetNode).void }
3647
+ def visit_constant_target_node(node); end
3648
+
3649
+ sig { override.params(node: ::Prism::ConstantWriteNode).void }
3650
+ def visit_constant_write_node(node); end
3651
+
3652
+ sig { override.params(node: ::Prism::DefNode).void }
3653
+ def visit_def_node(node); end
3654
+
3655
+ sig { override.params(node: ::Prism::DefinedNode).void }
3656
+ def visit_defined_node(node); end
3657
+
3658
+ sig { override.params(node: ::Prism::ElseNode).void }
3659
+ def visit_else_node(node); end
3660
+
3661
+ sig { override.params(node: ::Prism::EmbeddedStatementsNode).void }
3662
+ def visit_embedded_statements_node(node); end
3663
+
3664
+ sig { override.params(node: ::Prism::EmbeddedVariableNode).void }
3665
+ def visit_embedded_variable_node(node); end
3666
+
3667
+ sig { override.params(node: ::Prism::EnsureNode).void }
3668
+ def visit_ensure_node(node); end
3669
+
3670
+ sig { override.params(node: ::Prism::FalseNode).void }
3671
+ def visit_false_node(node); end
3672
+
3673
+ sig { override.params(node: ::Prism::FindPatternNode).void }
3674
+ def visit_find_pattern_node(node); end
3675
+
3676
+ sig { override.params(node: ::Prism::FlipFlopNode).void }
3677
+ def visit_flip_flop_node(node); end
3678
+
3679
+ sig { override.params(node: ::Prism::FloatNode).void }
3680
+ def visit_float_node(node); end
3681
+
3682
+ sig { override.params(node: ::Prism::ForNode).void }
3683
+ def visit_for_node(node); end
3684
+
3685
+ sig { override.params(node: ::Prism::ForwardingArgumentsNode).void }
3686
+ def visit_forwarding_arguments_node(node); end
3687
+
3688
+ sig { override.params(node: ::Prism::ForwardingParameterNode).void }
3689
+ def visit_forwarding_parameter_node(node); end
3690
+
3691
+ sig { override.params(node: ::Prism::ForwardingSuperNode).void }
3692
+ def visit_forwarding_super_node(node); end
3693
+
3694
+ sig { override.params(node: ::Prism::GlobalVariableAndWriteNode).void }
3695
+ def visit_global_variable_and_write_node(node); end
3696
+
3697
+ sig { override.params(node: ::Prism::GlobalVariableOperatorWriteNode).void }
3698
+ def visit_global_variable_operator_write_node(node); end
3699
+
3700
+ sig { override.params(node: ::Prism::GlobalVariableOrWriteNode).void }
3701
+ def visit_global_variable_or_write_node(node); end
3702
+
3703
+ sig { override.params(node: ::Prism::GlobalVariableReadNode).void }
3704
+ def visit_global_variable_read_node(node); end
3705
+
3706
+ sig { override.params(node: ::Prism::GlobalVariableTargetNode).void }
3707
+ def visit_global_variable_target_node(node); end
3708
+
3709
+ sig { override.params(node: ::Prism::GlobalVariableWriteNode).void }
3710
+ def visit_global_variable_write_node(node); end
3711
+
3712
+ sig { override.params(node: ::Prism::HashNode).void }
3713
+ def visit_hash_node(node); end
3714
+
3715
+ sig { override.params(node: ::Prism::HashPatternNode).void }
3716
+ def visit_hash_pattern_node(node); end
3717
+
3718
+ sig { override.params(node: ::Prism::IfNode).void }
3719
+ def visit_if_node(node); end
3720
+
3721
+ sig { override.params(node: ::Prism::ImaginaryNode).void }
3722
+ def visit_imaginary_node(node); end
3723
+
3724
+ sig { override.params(node: ::Prism::ImplicitNode).void }
3725
+ def visit_implicit_node(node); end
3726
+
3727
+ sig { override.params(node: ::Prism::ImplicitRestNode).void }
3728
+ def visit_implicit_rest_node(node); end
3729
+
3730
+ sig { override.params(node: ::Prism::InNode).void }
3731
+ def visit_in_node(node); end
3732
+
3733
+ sig { override.params(node: ::Prism::IndexAndWriteNode).void }
3734
+ def visit_index_and_write_node(node); end
3735
+
3736
+ sig { override.params(node: ::Prism::IndexOperatorWriteNode).void }
3737
+ def visit_index_operator_write_node(node); end
3738
+
3739
+ sig { override.params(node: ::Prism::IndexOrWriteNode).void }
3740
+ def visit_index_or_write_node(node); end
3741
+
3742
+ sig { override.params(node: ::Prism::IndexTargetNode).void }
3743
+ def visit_index_target_node(node); end
3744
+
3745
+ sig { override.params(node: ::Prism::InstanceVariableAndWriteNode).void }
3746
+ def visit_instance_variable_and_write_node(node); end
3747
+
3748
+ sig { override.params(node: ::Prism::InstanceVariableOperatorWriteNode).void }
3749
+ def visit_instance_variable_operator_write_node(node); end
3750
+
3751
+ sig { override.params(node: ::Prism::InstanceVariableOrWriteNode).void }
3752
+ def visit_instance_variable_or_write_node(node); end
3753
+
3754
+ sig { override.params(node: ::Prism::InstanceVariableReadNode).void }
3755
+ def visit_instance_variable_read_node(node); end
3756
+
3757
+ sig { override.params(node: ::Prism::InstanceVariableTargetNode).void }
3758
+ def visit_instance_variable_target_node(node); end
3759
+
3760
+ sig { override.params(node: ::Prism::InstanceVariableWriteNode).void }
3761
+ def visit_instance_variable_write_node(node); end
3762
+
3763
+ sig { override.params(node: ::Prism::IntegerNode).void }
3764
+ def visit_integer_node(node); end
3765
+
3766
+ sig { override.params(node: ::Prism::InterpolatedMatchLastLineNode).void }
3767
+ def visit_interpolated_match_last_line_node(node); end
3768
+
3769
+ sig { override.params(node: ::Prism::InterpolatedRegularExpressionNode).void }
3770
+ def visit_interpolated_regular_expression_node(node); end
3771
+
3772
+ sig { override.params(node: ::Prism::InterpolatedStringNode).void }
3773
+ def visit_interpolated_string_node(node); end
3774
+
3775
+ sig { override.params(node: ::Prism::InterpolatedSymbolNode).void }
3776
+ def visit_interpolated_symbol_node(node); end
3777
+
3778
+ sig { override.params(node: ::Prism::InterpolatedXStringNode).void }
3779
+ def visit_interpolated_x_string_node(node); end
3780
+
3781
+ sig { override.params(node: ::Prism::KeywordHashNode).void }
3782
+ def visit_keyword_hash_node(node); end
3783
+
3784
+ sig { override.params(node: ::Prism::KeywordRestParameterNode).void }
3785
+ def visit_keyword_rest_parameter_node(node); end
3786
+
3787
+ sig { override.params(node: ::Prism::LambdaNode).void }
3788
+ def visit_lambda_node(node); end
3789
+
3790
+ sig { override.params(node: ::Prism::LocalVariableAndWriteNode).void }
3791
+ def visit_local_variable_and_write_node(node); end
3792
+
3793
+ sig { override.params(node: ::Prism::LocalVariableOperatorWriteNode).void }
3794
+ def visit_local_variable_operator_write_node(node); end
3795
+
3796
+ sig { override.params(node: ::Prism::LocalVariableOrWriteNode).void }
3797
+ def visit_local_variable_or_write_node(node); end
3798
+
3799
+ sig { override.params(node: ::Prism::LocalVariableReadNode).void }
3800
+ def visit_local_variable_read_node(node); end
3801
+
3802
+ sig { override.params(node: ::Prism::LocalVariableTargetNode).void }
3803
+ def visit_local_variable_target_node(node); end
3804
+
3805
+ sig { override.params(node: ::Prism::LocalVariableWriteNode).void }
3806
+ def visit_local_variable_write_node(node); end
3807
+
3808
+ sig { override.params(node: ::Prism::MatchLastLineNode).void }
3809
+ def visit_match_last_line_node(node); end
3810
+
3811
+ sig { override.params(node: ::Prism::MatchPredicateNode).void }
3812
+ def visit_match_predicate_node(node); end
3813
+
3814
+ sig { override.params(node: ::Prism::MatchRequiredNode).void }
3815
+ def visit_match_required_node(node); end
3816
+
3817
+ sig { override.params(node: ::Prism::MatchWriteNode).void }
3818
+ def visit_match_write_node(node); end
3819
+
3820
+ sig { override.params(node: ::Prism::MissingNode).void }
3821
+ def visit_missing_node(node); end
3822
+
3823
+ sig { override.params(node: ::Prism::ModuleNode).void }
3824
+ def visit_module_node(node); end
3825
+
3826
+ sig { override.params(node: ::Prism::MultiTargetNode).void }
3827
+ def visit_multi_target_node(node); end
3828
+
3829
+ sig { override.params(node: ::Prism::MultiWriteNode).void }
3830
+ def visit_multi_write_node(node); end
3831
+
3832
+ sig { override.params(node: ::Prism::NextNode).void }
3833
+ def visit_next_node(node); end
3834
+
3835
+ sig { override.params(node: ::Prism::NilNode).void }
3836
+ def visit_nil_node(node); end
3837
+
3838
+ sig { override.params(node: ::Prism::NoKeywordsParameterNode).void }
3839
+ def visit_no_keywords_parameter_node(node); end
3840
+
3841
+ sig { override.params(node: ::Prism::NumberedParametersNode).void }
3842
+ def visit_numbered_parameters_node(node); end
3843
+
3844
+ sig { override.params(node: ::Prism::NumberedReferenceReadNode).void }
3845
+ def visit_numbered_reference_read_node(node); end
3846
+
3847
+ sig { override.params(node: ::Prism::OptionalKeywordParameterNode).void }
3848
+ def visit_optional_keyword_parameter_node(node); end
3849
+
3850
+ sig { override.params(node: ::Prism::OptionalParameterNode).void }
3851
+ def visit_optional_parameter_node(node); end
3852
+
3853
+ sig { override.params(node: ::Prism::OrNode).void }
3854
+ def visit_or_node(node); end
3855
+
3856
+ sig { override.params(node: ::Prism::ParametersNode).void }
3857
+ def visit_parameters_node(node); end
3858
+
3859
+ sig { override.params(node: ::Prism::ParenthesesNode).void }
3860
+ def visit_parentheses_node(node); end
3861
+
3862
+ sig { override.params(node: ::Prism::PinnedExpressionNode).void }
3863
+ def visit_pinned_expression_node(node); end
3864
+
3865
+ sig { override.params(node: ::Prism::PinnedVariableNode).void }
3866
+ def visit_pinned_variable_node(node); end
3867
+
3868
+ sig { override.params(node: ::Prism::PostExecutionNode).void }
3869
+ def visit_post_execution_node(node); end
3870
+
3871
+ sig { override.params(node: ::Prism::PreExecutionNode).void }
3872
+ def visit_pre_execution_node(node); end
3873
+
3874
+ sig { override.params(node: ::Prism::ProgramNode).void }
3875
+ def visit_program_node(node); end
3876
+
3877
+ sig { override.params(node: ::Prism::RangeNode).void }
3878
+ def visit_range_node(node); end
3879
+
3880
+ sig { override.params(node: ::Prism::RationalNode).void }
3881
+ def visit_rational_node(node); end
3882
+
3883
+ sig { override.params(node: ::Prism::RedoNode).void }
3884
+ def visit_redo_node(node); end
3885
+
3886
+ sig { override.params(node: ::Prism::RegularExpressionNode).void }
3887
+ def visit_regular_expression_node(node); end
3888
+
3889
+ sig { override.params(node: ::Prism::RequiredKeywordParameterNode).void }
3890
+ def visit_required_keyword_parameter_node(node); end
3891
+
3892
+ sig { override.params(node: ::Prism::RequiredParameterNode).void }
3893
+ def visit_required_parameter_node(node); end
3894
+
3895
+ sig { override.params(node: ::Prism::RescueModifierNode).void }
3896
+ def visit_rescue_modifier_node(node); end
3897
+
3898
+ sig { override.params(node: ::Prism::RescueNode).void }
3899
+ def visit_rescue_node(node); end
3900
+
3901
+ sig { override.params(node: ::Prism::RestParameterNode).void }
3902
+ def visit_rest_parameter_node(node); end
3903
+
3904
+ sig { override.params(node: ::Prism::RetryNode).void }
3905
+ def visit_retry_node(node); end
3906
+
3907
+ sig { override.params(node: ::Prism::ReturnNode).void }
3908
+ def visit_return_node(node); end
3909
+
3910
+ sig { override.params(node: ::Prism::SelfNode).void }
3911
+ def visit_self_node(node); end
3912
+
3913
+ sig { override.params(node: ::Prism::SingletonClassNode).void }
3914
+ def visit_singleton_class_node(node); end
3915
+
3916
+ sig { override.params(node: ::Prism::SourceEncodingNode).void }
3917
+ def visit_source_encoding_node(node); end
3918
+
3919
+ sig { override.params(node: ::Prism::SourceFileNode).void }
3920
+ def visit_source_file_node(node); end
3921
+
3922
+ sig { override.params(node: ::Prism::SourceLineNode).void }
3923
+ def visit_source_line_node(node); end
3924
+
3925
+ sig { override.params(node: ::Prism::SplatNode).void }
3926
+ def visit_splat_node(node); end
3927
+
3928
+ sig { override.params(node: ::Prism::StatementsNode).void }
3929
+ def visit_statements_node(node); end
3930
+
3931
+ sig { override.params(node: ::Prism::StringNode).void }
3932
+ def visit_string_node(node); end
3933
+
3934
+ sig { override.params(node: ::Prism::SuperNode).void }
3935
+ def visit_super_node(node); end
3936
+
3937
+ sig { override.params(node: ::Prism::SymbolNode).void }
3938
+ def visit_symbol_node(node); end
3939
+
3940
+ sig { override.params(node: ::Prism::TrueNode).void }
3941
+ def visit_true_node(node); end
3942
+
3943
+ sig { override.params(node: ::Prism::UndefNode).void }
3944
+ def visit_undef_node(node); end
3945
+
3946
+ sig { override.params(node: ::Prism::UnlessNode).void }
3947
+ def visit_unless_node(node); end
3948
+
3949
+ sig { override.params(node: ::Prism::UntilNode).void }
3950
+ def visit_until_node(node); end
3951
+
3952
+ sig { override.params(node: ::Prism::WhenNode).void }
3953
+ def visit_when_node(node); end
3954
+
3955
+ sig { override.params(node: ::Prism::WhileNode).void }
3956
+ def visit_while_node(node); end
3957
+
3958
+ sig { override.params(node: ::Prism::XStringNode).void }
3959
+ def visit_x_string_node(node); end
3960
+
3961
+ sig { override.params(node: ::Prism::YieldNode).void }
3962
+ def visit_yield_node(node); end
3963
+ end