packwerk 1.0.2 → 1.2.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 (120) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +14 -5
  3. data/.ruby-version +1 -1
  4. data/Gemfile +1 -1
  5. data/Gemfile.lock +129 -111
  6. data/README.md +8 -1
  7. data/USAGE.md +39 -17
  8. data/dev.yml +1 -1
  9. data/exe/packwerk +1 -1
  10. data/gemfiles/Gemfile-rails-6-0 +22 -0
  11. data/lib/packwerk.rb +73 -34
  12. data/lib/packwerk/application_load_paths.rb +3 -2
  13. data/lib/packwerk/application_validator.rb +85 -69
  14. data/lib/packwerk/association_inspector.rb +23 -11
  15. data/lib/packwerk/checker.rb +4 -7
  16. data/lib/packwerk/cli.rb +36 -93
  17. data/lib/packwerk/configuration.rb +10 -2
  18. data/lib/packwerk/const_node_inspector.rb +13 -14
  19. data/lib/packwerk/constant_discovery.rb +2 -0
  20. data/lib/packwerk/constant_name_inspector.rb +0 -1
  21. data/lib/packwerk/dependency_checker.rb +12 -17
  22. data/lib/packwerk/deprecated_references.rb +25 -8
  23. data/lib/packwerk/file_processor.rb +0 -4
  24. data/lib/packwerk/formatters/offenses_formatter.rb +43 -0
  25. data/lib/packwerk/formatters/progress_formatter.rb +9 -4
  26. data/lib/packwerk/generators/configuration_file.rb +0 -1
  27. data/lib/packwerk/inflector.rb +0 -2
  28. data/lib/packwerk/node.rb +9 -2
  29. data/lib/packwerk/node_processor.rb +15 -32
  30. data/lib/packwerk/node_processor_factory.rb +0 -5
  31. data/lib/packwerk/node_visitor.rb +1 -4
  32. data/lib/packwerk/offense.rb +2 -8
  33. data/lib/packwerk/offense_collection.rb +84 -0
  34. data/lib/packwerk/offenses_formatter.rb +15 -0
  35. data/lib/packwerk/output_style.rb +20 -0
  36. data/lib/packwerk/output_styles/coloured.rb +29 -0
  37. data/lib/packwerk/output_styles/plain.rb +26 -0
  38. data/lib/packwerk/package.rb +8 -0
  39. data/lib/packwerk/package_set.rb +8 -5
  40. data/lib/packwerk/parse_run.rb +104 -0
  41. data/lib/packwerk/parsed_constant_definitions.rb +2 -4
  42. data/lib/packwerk/parsers.rb +0 -2
  43. data/lib/packwerk/parsers/erb.rb +4 -2
  44. data/lib/packwerk/parsers/factory.rb +10 -3
  45. data/lib/packwerk/privacy_checker.rb +22 -17
  46. data/lib/packwerk/reference_extractor.rb +0 -8
  47. data/lib/packwerk/reference_offense.rb +49 -0
  48. data/lib/packwerk/result.rb +9 -0
  49. data/lib/packwerk/run_context.rb +4 -20
  50. data/lib/packwerk/sanity_checker.rb +1 -3
  51. data/lib/packwerk/spring_command.rb +1 -1
  52. data/lib/packwerk/version.rb +1 -1
  53. data/lib/packwerk/violation_type.rb +0 -2
  54. data/library.yml +1 -1
  55. data/packwerk.gemspec +1 -0
  56. data/service.yml +1 -4
  57. data/shipit.rubygems.yml +5 -1
  58. data/sorbet/rbi/gems/{actioncable@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi → actioncable@7.0.0.alpha-d612542336d9a61381311c95a27d801bb4094779.rbi} +56 -36
  59. data/sorbet/rbi/gems/{actionmailbox@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi → actionmailbox@7.0.0.alpha-d612542336d9a61381311c95a27d801bb4094779.rbi} +25 -28
  60. data/sorbet/rbi/gems/{actionmailer@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi → actionmailer@7.0.0.alpha-d612542336d9a61381311c95a27d801bb4094779.rbi} +43 -24
  61. data/sorbet/rbi/gems/{actionpack@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi → actionpack@7.0.0.alpha-d612542336d9a61381311c95a27d801bb4094779.rbi} +382 -284
  62. data/sorbet/rbi/gems/{actiontext@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi → actiontext@7.0.0.alpha-d612542336d9a61381311c95a27d801bb4094779.rbi} +76 -40
  63. data/sorbet/rbi/gems/{actionview@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi → actionview@7.0.0.alpha-d612542336d9a61381311c95a27d801bb4094779.rbi} +206 -195
  64. data/sorbet/rbi/gems/{activejob@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi → activejob@7.0.0.alpha-d612542336d9a61381311c95a27d801bb4094779.rbi} +64 -75
  65. data/sorbet/rbi/gems/{activemodel@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi → activemodel@7.0.0.alpha-d612542336d9a61381311c95a27d801bb4094779.rbi} +103 -56
  66. data/sorbet/rbi/gems/{activerecord@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi → activerecord@7.0.0.alpha-d612542336d9a61381311c95a27d801bb4094779.rbi} +1250 -898
  67. data/sorbet/rbi/gems/{activestorage@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi → activestorage@7.0.0.alpha-d612542336d9a61381311c95a27d801bb4094779.rbi} +92 -120
  68. data/sorbet/rbi/gems/{activesupport@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi → activesupport@7.0.0.alpha-d612542336d9a61381311c95a27d801bb4094779.rbi} +292 -193
  69. data/sorbet/rbi/gems/{ast@2.4.1.rbi → ast@2.4.2.rbi} +2 -1
  70. data/sorbet/rbi/gems/{better_html@1.0.15.rbi → better_html@1.0.16.rbi} +2 -2
  71. data/sorbet/rbi/gems/{concurrent-ruby@1.1.6.rbi → concurrent-ruby@1.1.8.rbi} +12 -9
  72. data/sorbet/rbi/gems/{erubi@1.9.0.rbi → erubi@1.10.0.rbi} +3 -1
  73. data/sorbet/rbi/gems/{i18n@1.8.2.rbi → i18n@1.8.10.rbi} +19 -52
  74. data/sorbet/rbi/gems/{loofah@2.5.0.rbi → loofah@2.9.0.rbi} +3 -1
  75. data/sorbet/rbi/gems/marcel@1.0.0.rbi +70 -0
  76. data/sorbet/rbi/gems/{mini_mime@1.0.2.rbi → mini_mime@1.0.3.rbi} +6 -6
  77. data/sorbet/rbi/gems/{mini_portile2@2.4.0.rbi → minitest-focus@1.2.1.rbi} +2 -2
  78. data/sorbet/rbi/gems/{minitest@5.14.0.rbi → minitest@5.14.4.rbi} +31 -29
  79. data/sorbet/rbi/gems/{mocha@1.11.2.rbi → mocha@1.12.0.rbi} +25 -36
  80. data/sorbet/rbi/gems/{nio4r@2.5.2.rbi → nio4r@2.5.7.rbi} +21 -20
  81. data/sorbet/rbi/gems/{nokogiri@1.10.9.rbi → nokogiri@1.11.2.rbi} +193 -154
  82. data/sorbet/rbi/gems/parallel@1.20.1.rbi +117 -0
  83. data/sorbet/rbi/gems/parlour@6.0.0.rbi +1272 -0
  84. data/sorbet/rbi/gems/{parser@2.7.1.4.rbi → parser@3.0.0.0.rbi} +287 -174
  85. data/sorbet/rbi/gems/{pry@0.13.1.rbi → pry@0.14.0.rbi} +1 -1
  86. data/sorbet/rbi/gems/racc@1.5.2.rbi +57 -0
  87. data/sorbet/rbi/gems/{rack@2.2.2.rbi → rack@2.2.3.rbi} +23 -35
  88. data/sorbet/rbi/gems/{rails@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi → rails@7.0.0.alpha-d612542336d9a61381311c95a27d801bb4094779.rbi} +1 -1
  89. data/sorbet/rbi/gems/{railties@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi → railties@7.0.0.alpha-d612542336d9a61381311c95a27d801bb4094779.rbi} +132 -121
  90. data/sorbet/rbi/gems/{rake@13.0.1.rbi → rake@13.0.3.rbi} +16 -20
  91. data/sorbet/rbi/gems/{parallel@1.19.1.rbi → regexp_parser@2.1.1.rbi} +2 -2
  92. data/sorbet/rbi/gems/rubocop-ast@1.4.1.rbi +8 -0
  93. data/sorbet/rbi/gems/{rubocop-performance@1.5.2.rbi → rubocop-performance@1.10.2.rbi} +1 -1
  94. data/sorbet/rbi/gems/{rubocop-shopify@1.0.2.rbi → rubocop-shopify@2.0.1.rbi} +1 -1
  95. data/sorbet/rbi/gems/{rubocop-sorbet@0.3.7.rbi → rubocop-sorbet@0.6.1.rbi} +1 -1
  96. data/sorbet/rbi/gems/{rubocop@0.82.0.rbi → rubocop@1.12.0.rbi} +1 -1
  97. data/sorbet/rbi/gems/{ruby-progressbar@1.10.1.rbi → ruby-progressbar@1.11.0.rbi} +1 -1
  98. data/sorbet/rbi/gems/spoom@1.1.0.rbi +1061 -0
  99. data/sorbet/rbi/gems/{spring@2.1.0.rbi → spring@2.1.1.rbi} +7 -7
  100. data/sorbet/rbi/gems/{sprockets-rails@3.2.1.rbi → sprockets-rails@3.2.2.rbi} +88 -68
  101. data/sorbet/rbi/gems/{sprockets@4.0.0.rbi → sprockets@4.0.2.rbi} +8 -7
  102. data/sorbet/rbi/gems/{tapioca@0.4.5.rbi → tapioca@0.4.19.rbi} +109 -24
  103. data/sorbet/rbi/gems/{thor@1.0.1.rbi → thor@1.1.0.rbi} +16 -15
  104. data/sorbet/rbi/gems/{tzinfo@2.0.2.rbi → tzinfo@2.0.4.rbi} +21 -2
  105. data/sorbet/rbi/gems/{unicode-display_width@1.7.0.rbi → unicode-display_width@2.0.0.rbi} +1 -1
  106. data/sorbet/rbi/gems/{websocket-driver@0.7.1.rbi → websocket-driver@0.7.3.rbi} +29 -29
  107. data/sorbet/rbi/gems/{websocket-extensions@0.1.4.rbi → websocket-extensions@0.1.5.rbi} +2 -2
  108. data/sorbet/rbi/gems/zeitwerk@2.4.2.rbi +177 -0
  109. data/sorbet/tapioca/require.rb +1 -0
  110. metadata +78 -57
  111. data/lib/packwerk/checking_deprecated_references.rb +0 -40
  112. data/lib/packwerk/output_styles.rb +0 -41
  113. data/lib/packwerk/reference_lister.rb +0 -23
  114. data/lib/packwerk/updating_deprecated_references.rb +0 -51
  115. data/sorbet/rbi/gems/jaro_winkler@1.5.4.rbi +0 -8
  116. data/sorbet/rbi/gems/marcel@0.3.3.rbi +0 -30
  117. data/sorbet/rbi/gems/mimemagic@0.3.5.rbi +0 -47
  118. data/sorbet/rbi/gems/parlour@4.0.1.rbi +0 -561
  119. data/sorbet/rbi/gems/spoom@1.0.4.rbi +0 -418
  120. data/sorbet/rbi/gems/zeitwerk@2.3.0.rbi +0 -8
@@ -1,6 +1,6 @@
1
1
  # DO NOT EDIT MANUALLY
2
2
  # This is an autogenerated file for types exported from the `rake` gem.
3
- # Please instead update this file by running `dev typecheck update`.
3
+ # Please instead update this file by running `bin/tapioca sync`.
4
4
 
5
5
  # typed: true
6
6
 
@@ -104,7 +104,7 @@ class Rake::Application
104
104
  def standard_rake_options; end
105
105
  def system_dir; end
106
106
  def terminal_columns; end
107
- def terminal_columns=(_); end
107
+ def terminal_columns=(_arg0); end
108
108
  def terminal_width; end
109
109
  def thread_pool; end
110
110
  def top_level; end
@@ -112,7 +112,7 @@ class Rake::Application
112
112
  def trace(*strings); end
113
113
  def truncate(string, width); end
114
114
  def truncate_output?; end
115
- def tty_output=(_); end
115
+ def tty_output=(_arg0); end
116
116
  def tty_output?; end
117
117
  def unix?; end
118
118
  def windows?; end
@@ -198,10 +198,6 @@ class Rake::EarlyTime
198
198
 
199
199
  def <=>(other); end
200
200
  def to_s; end
201
-
202
- class << self
203
- def instance; end
204
- end
205
201
  end
206
202
 
207
203
  class Rake::FileCreationTask < ::Rake::FileTask
@@ -245,6 +241,7 @@ class Rake::FileList
245
241
  def concat(*args, &block); end
246
242
  def count(*args, &block); end
247
243
  def cycle(*args, &block); end
244
+ def deconstruct(*args, &block); end
248
245
  def delete(*args, &block); end
249
246
  def delete_at(*args, &block); end
250
247
  def delete_if(*args, &block); end
@@ -272,6 +269,7 @@ class Rake::FileList
272
269
  def fill(*args, &block); end
273
270
  def filter(*args, &block); end
274
271
  def filter!(*args, &block); end
272
+ def filter_map(*args, &block); end
275
273
  def find(*args, &block); end
276
274
  def find_all(*args, &block); end
277
275
  def find_index(*args, &block); end
@@ -291,6 +289,7 @@ class Rake::FileList
291
289
  def inject(*args, &block); end
292
290
  def insert(*args, &block); end
293
291
  def inspect(*args, &block); end
292
+ def intersection(*args, &block); end
294
293
  def is_a?(klass); end
295
294
  def join(*args, &block); end
296
295
  def keep_if(*args, &block); end
@@ -353,6 +352,7 @@ class Rake::FileList
353
352
  def sum(*args, &block); end
354
353
  def take(*args, &block); end
355
354
  def take_while(*args, &block); end
355
+ def tally(*args, &block); end
356
356
  def to_a; end
357
357
  def to_ary; end
358
358
  def to_h(*args, &block); end
@@ -454,9 +454,9 @@ module Rake::FileUtilsExt
454
454
 
455
455
  class << self
456
456
  def nowrite_flag; end
457
- def nowrite_flag=(_); end
457
+ def nowrite_flag=(_arg0); end
458
458
  def verbose_flag; end
459
- def verbose_flag=(_); end
459
+ def verbose_flag=(_arg0); end
460
460
  end
461
461
  end
462
462
 
@@ -498,10 +498,6 @@ class Rake::LateTime
498
498
 
499
499
  def <=>(other); end
500
500
  def to_s; end
501
-
502
- class << self
503
- def instance; end
504
- end
505
501
  end
506
502
 
507
503
  class Rake::LinkedList
@@ -568,7 +564,7 @@ class Rake::Promise
568
564
  def initialize(args, &block); end
569
565
 
570
566
  def recorder; end
571
- def recorder=(_); end
567
+ def recorder=(_arg0); end
572
568
  def value; end
573
569
  def work; end
574
570
 
@@ -622,7 +618,7 @@ class Rake::Task
622
618
  def all_prerequisite_tasks; end
623
619
  def already_invoked; end
624
620
  def application; end
625
- def application=(_); end
621
+ def application=(_arg0); end
626
622
  def arg_description; end
627
623
  def arg_names; end
628
624
  def clear; end
@@ -653,7 +649,7 @@ class Rake::Task
653
649
  def set_arg_names(args); end
654
650
  def source; end
655
651
  def sources; end
656
- def sources=(_); end
652
+ def sources=(_arg0); end
657
653
  def timestamp; end
658
654
  def to_s; end
659
655
  def |(deps); end
@@ -727,7 +723,7 @@ module Rake::TaskManager
727
723
  def in_namespace(name); end
728
724
  def intern(task_class, task_name); end
729
725
  def last_description; end
730
- def last_description=(_); end
726
+ def last_description=(_arg0); end
731
727
  def lookup(task_name, initial_scope = T.unsafe(nil)); end
732
728
  def resolve_args(args); end
733
729
  def synthesize_file_task(task_name); end
@@ -749,7 +745,7 @@ module Rake::TaskManager
749
745
 
750
746
  class << self
751
747
  def record_task_metadata; end
752
- def record_task_metadata=(_); end
748
+ def record_task_metadata=(_arg0); end
753
749
  end
754
750
  end
755
751
 
@@ -821,10 +817,10 @@ RakeFileUtils = Rake::FileUtilsExt
821
817
 
822
818
  class String
823
819
  include(::Comparable)
824
- include(::Colorize::InstanceMethods)
825
820
  include(::JSON::Ext::Generator::GeneratorMethods::String)
826
- extend(::Colorize::ClassMethods)
821
+ include(::Colorize::InstanceMethods)
827
822
  extend(::JSON::Ext::Generator::GeneratorMethods::String::Extend)
823
+ extend(::Colorize::ClassMethods)
828
824
 
829
825
  def ext(newext = T.unsafe(nil)); end
830
826
  def pathmap(spec = T.unsafe(nil), &block); end
@@ -1,6 +1,6 @@
1
1
  # DO NOT EDIT MANUALLY
2
- # This is an autogenerated file for types exported from the `parallel` gem.
3
- # Please instead update this file by running `dev typecheck update`.
2
+ # This is an autogenerated file for types exported from the `regexp_parser` gem.
3
+ # Please instead update this file by running `bin/tapioca sync`.
4
4
 
5
5
  # typed: true
6
6
 
@@ -0,0 +1,8 @@
1
+ # DO NOT EDIT MANUALLY
2
+ # This is an autogenerated file for types exported from the `rubocop-ast` gem.
3
+ # Please instead update this file by running `bin/tapioca sync`.
4
+
5
+ # typed: true
6
+
7
+ # THIS IS AN EMPTY RBI FILE.
8
+ # see https://github.com/Shopify/tapioca/blob/master/README.md#manual-gem-requires
@@ -1,6 +1,6 @@
1
1
  # DO NOT EDIT MANUALLY
2
2
  # This is an autogenerated file for types exported from the `rubocop-performance` gem.
3
- # Please instead update this file by running `dev typecheck update`.
3
+ # Please instead update this file by running `bin/tapioca sync`.
4
4
 
5
5
  # typed: true
6
6
 
@@ -1,6 +1,6 @@
1
1
  # DO NOT EDIT MANUALLY
2
2
  # This is an autogenerated file for types exported from the `rubocop-shopify` gem.
3
- # Please instead update this file by running `dev typecheck update`.
3
+ # Please instead update this file by running `bin/tapioca sync`.
4
4
 
5
5
  # typed: true
6
6
 
@@ -1,6 +1,6 @@
1
1
  # DO NOT EDIT MANUALLY
2
2
  # This is an autogenerated file for types exported from the `rubocop-sorbet` gem.
3
- # Please instead update this file by running `dev typecheck update`.
3
+ # Please instead update this file by running `bin/tapioca sync`.
4
4
 
5
5
  # typed: true
6
6
 
@@ -1,6 +1,6 @@
1
1
  # DO NOT EDIT MANUALLY
2
2
  # This is an autogenerated file for types exported from the `rubocop` gem.
3
- # Please instead update this file by running `dev typecheck update`.
3
+ # Please instead update this file by running `bin/tapioca sync`.
4
4
 
5
5
  # typed: true
6
6
 
@@ -1,6 +1,6 @@
1
1
  # DO NOT EDIT MANUALLY
2
2
  # This is an autogenerated file for types exported from the `ruby-progressbar` gem.
3
- # Please instead update this file by running `dev typecheck update`.
3
+ # Please instead update this file by running `bin/tapioca sync`.
4
4
 
5
5
  # typed: true
6
6
 
@@ -0,0 +1,1061 @@
1
+ # DO NOT EDIT MANUALLY
2
+ # This is an autogenerated file for types exported from the `spoom` gem.
3
+ # Please instead update this file by running `bin/tapioca sync`.
4
+
5
+ # typed: true
6
+
7
+ module Spoom
8
+ class << self
9
+ sig { params(cmd: String, arg: String, path: String, capture_err: T::Boolean).returns([String, T::Boolean]) }
10
+ def exec(cmd, *arg, path: T.unsafe(nil), capture_err: T.unsafe(nil)); end
11
+ end
12
+ end
13
+
14
+ module Spoom::Cli
15
+ end
16
+
17
+ class Spoom::Cli::Bump < ::Thor
18
+ include(::Spoom::Cli::Helper)
19
+
20
+ sig { params(directory: String).void }
21
+ def bump(directory = T.unsafe(nil)); end
22
+ def config_files(path: T.unsafe(nil)); end
23
+ def help(command = T.unsafe(nil), subcommand = T.unsafe(nil)); end
24
+ def print_changes(files, command:, from: T.unsafe(nil), to: T.unsafe(nil), dry: T.unsafe(nil), path: T.unsafe(nil)); end
25
+ def undo_changes(files, from_strictness); end
26
+ end
27
+
28
+ class Spoom::Cli::Config < ::Thor
29
+ include(::Spoom::Cli::Helper)
30
+
31
+ def help(command = T.unsafe(nil), subcommand = T.unsafe(nil)); end
32
+ def show; end
33
+ end
34
+
35
+ class Spoom::Cli::Coverage < ::Thor
36
+ include(::Spoom::Cli::Helper)
37
+
38
+ def bundle_install(path, sha); end
39
+ def help(command = T.unsafe(nil), subcommand = T.unsafe(nil)); end
40
+ def message_no_data(file); end
41
+ def open(file = T.unsafe(nil)); end
42
+ def parse_time(string, option); end
43
+ def report; end
44
+ def snapshot; end
45
+ def timeline; end
46
+ end
47
+
48
+ Spoom::Cli::Coverage::DATA_DIR = T.let(T.unsafe(nil), String)
49
+
50
+ module Spoom::Cli::Helper
51
+ include(::Thor::Shell)
52
+
53
+ sig { params(string: String).returns(String) }
54
+ def blue(string); end
55
+ sig { returns(T::Boolean) }
56
+ def color?; end
57
+ sig { params(string: String, color: Symbol).returns(String) }
58
+ def colorize(string, color); end
59
+ sig { returns(String) }
60
+ def exec_path; end
61
+ sig { params(string: String).returns(String) }
62
+ def gray(string); end
63
+ sig { params(string: String).returns(String) }
64
+ def green(string); end
65
+ sig { params(string: String).returns(String) }
66
+ def highlight(string); end
67
+ sig { void }
68
+ def in_sorbet_project!; end
69
+ sig { returns(T::Boolean) }
70
+ def in_sorbet_project?; end
71
+ sig { params(string: String).returns(String) }
72
+ def red(string); end
73
+ sig { params(message: String).void }
74
+ def say(message); end
75
+ sig { params(message: String, status: T.nilable(String), nl: T::Boolean).void }
76
+ def say_error(message, status: T.unsafe(nil), nl: T.unsafe(nil)); end
77
+ sig { returns(Spoom::Sorbet::Config) }
78
+ def sorbet_config; end
79
+ sig { returns(String) }
80
+ def sorbet_config_file; end
81
+ sig { params(string: String).returns(String) }
82
+ def yellow(string); end
83
+ end
84
+
85
+ Spoom::Cli::Helper::HIGHLIGHT_COLOR = T.let(T.unsafe(nil), Symbol)
86
+
87
+ class Spoom::Cli::LSP < ::Thor
88
+ include(::Spoom::Cli::Helper)
89
+
90
+ def defs(file, line, col); end
91
+ def find(query); end
92
+ def help(command = T.unsafe(nil), subcommand = T.unsafe(nil)); end
93
+ def hover(file, line, col); end
94
+ def list; end
95
+ def lsp_client; end
96
+ def refs(file, line, col); end
97
+ def run(&block); end
98
+ def show; end
99
+ def sigs(file, line, col); end
100
+ def symbol_printer; end
101
+ def symbols(file); end
102
+ def to_uri(path); end
103
+ def types(file, line, col); end
104
+ end
105
+
106
+ class Spoom::Cli::Main < ::Thor
107
+ include(::Spoom::Cli::Helper)
108
+
109
+ def __print_version; end
110
+ def bump(*args); end
111
+ def config(*args); end
112
+ def coverage(*args); end
113
+ def files; end
114
+ def lsp(*args); end
115
+ def tc(*args); end
116
+
117
+ class << self
118
+ def exit_on_failure?; end
119
+ end
120
+ end
121
+
122
+ class Spoom::Cli::Run < ::Thor
123
+ include(::Spoom::Cli::Helper)
124
+
125
+ def colorize_message(message); end
126
+ def format_error(error, format); end
127
+ def help(command = T.unsafe(nil), subcommand = T.unsafe(nil)); end
128
+ def tc(*arg); end
129
+ end
130
+
131
+ Spoom::Cli::Run::DEFAULT_FORMAT = T.let(T.unsafe(nil), String)
132
+
133
+ Spoom::Cli::Run::SORT_CODE = T.let(T.unsafe(nil), String)
134
+
135
+ Spoom::Cli::Run::SORT_ENUM = T.let(T.unsafe(nil), Array)
136
+
137
+ Spoom::Cli::Run::SORT_LOC = T.let(T.unsafe(nil), String)
138
+
139
+ module Spoom::Coverage
140
+ class << self
141
+ sig { params(snapshots: T::Array[Spoom::Coverage::Snapshot], palette: Spoom::Coverage::D3::ColorPalette, path: String).returns(Spoom::Coverage::Report) }
142
+ def report(snapshots, palette:, path: T.unsafe(nil)); end
143
+ sig { params(path: String).returns(Spoom::FileTree) }
144
+ def sigils_tree(path: T.unsafe(nil)); end
145
+ sig { params(path: String, rbi: T::Boolean, sorbet_bin: T.nilable(String)).returns(Spoom::Coverage::Snapshot) }
146
+ def snapshot(path: T.unsafe(nil), rbi: T.unsafe(nil), sorbet_bin: T.unsafe(nil)); end
147
+ sig { params(path: String).returns(Spoom::Sorbet::Config) }
148
+ def sorbet_config(path: T.unsafe(nil)); end
149
+ end
150
+ end
151
+
152
+ module Spoom::Coverage::Cards
153
+ end
154
+
155
+ class Spoom::Coverage::Cards::Card < ::Spoom::Coverage::Template
156
+ sig { params(template: String, title: T.nilable(String), body: T.nilable(String)).void }
157
+ def initialize(template: T.unsafe(nil), title: T.unsafe(nil), body: T.unsafe(nil)); end
158
+
159
+ def body; end
160
+ sig { returns(T.nilable(String)) }
161
+ def title; end
162
+ end
163
+
164
+ Spoom::Coverage::Cards::Card::TEMPLATE = T.let(T.unsafe(nil), String)
165
+
166
+ class Spoom::Coverage::Cards::Erb < ::Spoom::Coverage::Cards::Card
167
+ abstract!
168
+
169
+ sig { void }
170
+ def initialize; end
171
+
172
+ sig { abstract.returns(String) }
173
+ def erb; end
174
+ sig { override.returns(String) }
175
+ def html; end
176
+ end
177
+
178
+ class Spoom::Coverage::Cards::Map < ::Spoom::Coverage::Cards::Card
179
+ sig { params(sigils_tree: Spoom::FileTree, title: String).void }
180
+ def initialize(sigils_tree:, title: T.unsafe(nil)); end
181
+ end
182
+
183
+ class Spoom::Coverage::Cards::Snapshot < ::Spoom::Coverage::Cards::Card
184
+ sig { params(snapshot: Spoom::Coverage::Snapshot, title: String).void }
185
+ def initialize(snapshot:, title: T.unsafe(nil)); end
186
+
187
+ sig { returns(Spoom::Coverage::D3::Pie::Calls) }
188
+ def pie_calls; end
189
+ sig { returns(Spoom::Coverage::D3::Pie::Sigils) }
190
+ def pie_sigils; end
191
+ sig { returns(Spoom::Coverage::D3::Pie::Sigs) }
192
+ def pie_sigs; end
193
+ sig { returns(Spoom::Coverage::Snapshot) }
194
+ def snapshot; end
195
+ end
196
+
197
+ Spoom::Coverage::Cards::Snapshot::TEMPLATE = T.let(T.unsafe(nil), String)
198
+
199
+ class Spoom::Coverage::Cards::SorbetIntro < ::Spoom::Coverage::Cards::Erb
200
+ sig { params(sorbet_intro_commit: T.nilable(String), sorbet_intro_date: T.nilable(Time)).void }
201
+ def initialize(sorbet_intro_commit: T.unsafe(nil), sorbet_intro_date: T.unsafe(nil)); end
202
+
203
+ sig { override.returns(String) }
204
+ def erb; end
205
+ end
206
+
207
+ class Spoom::Coverage::Cards::Timeline < ::Spoom::Coverage::Cards::Card
208
+ sig { params(title: String, timeline: Spoom::Coverage::D3::Timeline).void }
209
+ def initialize(title:, timeline:); end
210
+ end
211
+
212
+ class Spoom::Coverage::Cards::Timeline::Calls < ::Spoom::Coverage::Cards::Timeline
213
+ sig { params(snapshots: T::Array[Spoom::Coverage::Snapshot], title: String).void }
214
+ def initialize(snapshots:, title: T.unsafe(nil)); end
215
+ end
216
+
217
+ class Spoom::Coverage::Cards::Timeline::Runtimes < ::Spoom::Coverage::Cards::Timeline
218
+ sig { params(snapshots: T::Array[Spoom::Coverage::Snapshot], title: String).void }
219
+ def initialize(snapshots:, title: T.unsafe(nil)); end
220
+ end
221
+
222
+ class Spoom::Coverage::Cards::Timeline::Sigils < ::Spoom::Coverage::Cards::Timeline
223
+ sig { params(snapshots: T::Array[Spoom::Coverage::Snapshot], title: String).void }
224
+ def initialize(snapshots:, title: T.unsafe(nil)); end
225
+ end
226
+
227
+ class Spoom::Coverage::Cards::Timeline::Sigs < ::Spoom::Coverage::Cards::Timeline
228
+ sig { params(snapshots: T::Array[Spoom::Coverage::Snapshot], title: String).void }
229
+ def initialize(snapshots:, title: T.unsafe(nil)); end
230
+ end
231
+
232
+ class Spoom::Coverage::Cards::Timeline::Versions < ::Spoom::Coverage::Cards::Timeline
233
+ sig { params(snapshots: T::Array[Spoom::Coverage::Snapshot], title: String).void }
234
+ def initialize(snapshots:, title: T.unsafe(nil)); end
235
+ end
236
+
237
+ module Spoom::Coverage::D3
238
+ class << self
239
+ sig { params(palette: Spoom::Coverage::D3::ColorPalette).returns(String) }
240
+ def header_script(palette); end
241
+ sig { returns(String) }
242
+ def header_style; end
243
+ end
244
+ end
245
+
246
+ class Spoom::Coverage::D3::Base
247
+ abstract!
248
+
249
+ sig { params(id: String, data: T.untyped).void }
250
+ def initialize(id, data); end
251
+
252
+ sig { returns(String) }
253
+ def html; end
254
+ sig { returns(String) }
255
+ def id; end
256
+ sig { abstract.returns(String) }
257
+ def script; end
258
+ sig { returns(String) }
259
+ def tooltip; end
260
+
261
+ class << self
262
+ sig { returns(String) }
263
+ def header_script; end
264
+ sig { returns(String) }
265
+ def header_style; end
266
+ end
267
+ end
268
+
269
+ Spoom::Coverage::D3::COLOR_FALSE = T.let(T.unsafe(nil), String)
270
+
271
+ Spoom::Coverage::D3::COLOR_IGNORE = T.let(T.unsafe(nil), String)
272
+
273
+ Spoom::Coverage::D3::COLOR_STRICT = T.let(T.unsafe(nil), String)
274
+
275
+ Spoom::Coverage::D3::COLOR_STRONG = T.let(T.unsafe(nil), String)
276
+
277
+ Spoom::Coverage::D3::COLOR_TRUE = T.let(T.unsafe(nil), String)
278
+
279
+ class Spoom::Coverage::D3::CircleMap < ::Spoom::Coverage::D3::Base
280
+ sig { override.returns(String) }
281
+ def script; end
282
+
283
+ class << self
284
+ sig { returns(String) }
285
+ def header_script; end
286
+ sig { returns(String) }
287
+ def header_style; end
288
+ end
289
+ end
290
+
291
+ class Spoom::Coverage::D3::CircleMap::Sigils < ::Spoom::Coverage::D3::CircleMap
292
+ sig { params(id: String, sigils_tree: Spoom::FileTree).void }
293
+ def initialize(id, sigils_tree); end
294
+
295
+ sig { params(node: Spoom::FileTree::Node).returns(Float) }
296
+ def tree_node_score(node); end
297
+ sig { params(node: Spoom::FileTree::Node).returns(T.nilable(String)) }
298
+ def tree_node_strictness(node); end
299
+ sig { params(node: Spoom::FileTree::Node).returns(T::Hash[Symbol, T.untyped]) }
300
+ def tree_node_to_json(node); end
301
+ end
302
+
303
+ class Spoom::Coverage::D3::ColorPalette < ::T::Struct
304
+ prop :ignore, String
305
+ prop :false, String
306
+ prop :true, String
307
+ prop :strict, String
308
+ prop :strong, String
309
+
310
+ class << self
311
+ def inherited(s); end
312
+ end
313
+ end
314
+
315
+ class Spoom::Coverage::D3::Pie < ::Spoom::Coverage::D3::Base
316
+ abstract!
317
+
318
+ sig { params(id: String, title: String, data: T.untyped).void }
319
+ def initialize(id, title, data); end
320
+
321
+ sig { override.returns(String) }
322
+ def script; end
323
+
324
+ class << self
325
+ sig { returns(String) }
326
+ def header_script; end
327
+ sig { returns(String) }
328
+ def header_style; end
329
+ end
330
+ end
331
+
332
+ class Spoom::Coverage::D3::Pie::Calls < ::Spoom::Coverage::D3::Pie
333
+ sig { params(id: String, title: String, snapshot: Spoom::Coverage::Snapshot).void }
334
+ def initialize(id, title, snapshot); end
335
+
336
+ sig { override.returns(String) }
337
+ def tooltip; end
338
+ end
339
+
340
+ class Spoom::Coverage::D3::Pie::Sigils < ::Spoom::Coverage::D3::Pie
341
+ sig { params(id: String, title: String, snapshot: Spoom::Coverage::Snapshot).void }
342
+ def initialize(id, title, snapshot); end
343
+
344
+ sig { override.returns(String) }
345
+ def tooltip; end
346
+ end
347
+
348
+ class Spoom::Coverage::D3::Pie::Sigs < ::Spoom::Coverage::D3::Pie
349
+ sig { params(id: String, title: String, snapshot: Spoom::Coverage::Snapshot).void }
350
+ def initialize(id, title, snapshot); end
351
+
352
+ sig { override.returns(String) }
353
+ def tooltip; end
354
+ end
355
+
356
+ class Spoom::Coverage::D3::Timeline < ::Spoom::Coverage::D3::Base
357
+ abstract!
358
+
359
+ sig { params(id: String, data: T.untyped, keys: T::Array[String]).void }
360
+ def initialize(id, data, keys); end
361
+
362
+ sig { params(y: String, color: String, curve: String).returns(String) }
363
+ def area(y:, color: T.unsafe(nil), curve: T.unsafe(nil)); end
364
+ sig { params(y: String, color: String, curve: String).returns(String) }
365
+ def line(y:, color: T.unsafe(nil), curve: T.unsafe(nil)); end
366
+ sig { abstract.returns(String) }
367
+ def plot; end
368
+ sig { params(y: String).returns(String) }
369
+ def points(y:); end
370
+ sig { override.returns(String) }
371
+ def script; end
372
+ sig { returns(String) }
373
+ def x_scale; end
374
+ sig { returns(String) }
375
+ def x_ticks; end
376
+ sig { params(min: String, max: String, ticks: String).returns(String) }
377
+ def y_scale(min:, max:, ticks:); end
378
+ sig { params(ticks: String, format: String, padding: Integer).returns(String) }
379
+ def y_ticks(ticks:, format:, padding:); end
380
+
381
+ class << self
382
+ sig { returns(String) }
383
+ def header_script; end
384
+ sig { returns(String) }
385
+ def header_style; end
386
+ end
387
+ end
388
+
389
+ class Spoom::Coverage::D3::Timeline::Calls < ::Spoom::Coverage::D3::Timeline::Stacked
390
+ sig { params(id: String, snapshots: T::Array[Spoom::Coverage::Snapshot]).void }
391
+ def initialize(id, snapshots); end
392
+
393
+ sig { override.returns(String) }
394
+ def tooltip; end
395
+ end
396
+
397
+ class Spoom::Coverage::D3::Timeline::Runtimes < ::Spoom::Coverage::D3::Timeline
398
+ sig { params(id: String, snapshots: T::Array[Spoom::Coverage::Snapshot]).void }
399
+ def initialize(id, snapshots); end
400
+
401
+ sig { override.returns(String) }
402
+ def plot; end
403
+ sig { override.returns(String) }
404
+ def tooltip; end
405
+ end
406
+
407
+ class Spoom::Coverage::D3::Timeline::Sigils < ::Spoom::Coverage::D3::Timeline::Stacked
408
+ sig { params(id: String, snapshots: T::Array[Spoom::Coverage::Snapshot]).void }
409
+ def initialize(id, snapshots); end
410
+
411
+ sig { override.returns(String) }
412
+ def tooltip; end
413
+ end
414
+
415
+ class Spoom::Coverage::D3::Timeline::Sigs < ::Spoom::Coverage::D3::Timeline::Stacked
416
+ sig { params(id: String, snapshots: T::Array[Spoom::Coverage::Snapshot]).void }
417
+ def initialize(id, snapshots); end
418
+
419
+ sig { override.returns(String) }
420
+ def tooltip; end
421
+ end
422
+
423
+ class Spoom::Coverage::D3::Timeline::Stacked < ::Spoom::Coverage::D3::Timeline
424
+ abstract!
425
+
426
+ def initialize(*args, &blk); end
427
+
428
+ sig { override.params(y: String, color: String, curve: String).returns(String) }
429
+ def line(y:, color: T.unsafe(nil), curve: T.unsafe(nil)); end
430
+ sig { override.returns(String) }
431
+ def plot; end
432
+ sig { override.returns(String) }
433
+ def script; end
434
+ end
435
+
436
+ class Spoom::Coverage::D3::Timeline::Versions < ::Spoom::Coverage::D3::Timeline
437
+ sig { params(id: String, snapshots: T::Array[Spoom::Coverage::Snapshot]).void }
438
+ def initialize(id, snapshots); end
439
+
440
+ sig { override.returns(String) }
441
+ def plot; end
442
+ sig { override.returns(String) }
443
+ def tooltip; end
444
+ end
445
+
446
+ class Spoom::Coverage::Page < ::Spoom::Coverage::Template
447
+ abstract!
448
+
449
+ sig { params(title: String, palette: Spoom::Coverage::D3::ColorPalette, template: String).void }
450
+ def initialize(title:, palette:, template: T.unsafe(nil)); end
451
+
452
+ sig { returns(String) }
453
+ def body_html; end
454
+ sig { abstract.returns(T::Array[Spoom::Coverage::Cards::Card]) }
455
+ def cards; end
456
+ sig { returns(String) }
457
+ def footer_html; end
458
+ sig { returns(String) }
459
+ def header_html; end
460
+ sig { returns(String) }
461
+ def header_script; end
462
+ sig { returns(String) }
463
+ def header_style; end
464
+ sig { returns(Spoom::Coverage::D3::ColorPalette) }
465
+ def palette; end
466
+ sig { returns(String) }
467
+ def title; end
468
+ end
469
+
470
+ Spoom::Coverage::Page::TEMPLATE = T.let(T.unsafe(nil), String)
471
+
472
+ class Spoom::Coverage::Report < ::Spoom::Coverage::Page
473
+ sig { params(project_name: String, palette: Spoom::Coverage::D3::ColorPalette, snapshots: T::Array[Spoom::Coverage::Snapshot], sigils_tree: Spoom::FileTree, sorbet_intro_commit: T.nilable(String), sorbet_intro_date: T.nilable(Time)).void }
474
+ def initialize(project_name:, palette:, snapshots:, sigils_tree:, sorbet_intro_commit: T.unsafe(nil), sorbet_intro_date: T.unsafe(nil)); end
475
+
476
+ sig { override.returns(T::Array[Spoom::Coverage::Cards::Card]) }
477
+ def cards; end
478
+ sig { override.returns(String) }
479
+ def header_html; end
480
+ sig { returns(String) }
481
+ def project_name; end
482
+ sig { returns(Spoom::FileTree) }
483
+ def sigils_tree; end
484
+ sig { returns(T::Array[Spoom::Coverage::Snapshot]) }
485
+ def snapshots; end
486
+ sig { returns(T.nilable(String)) }
487
+ def sorbet_intro_commit; end
488
+ sig { returns(T.nilable(Time)) }
489
+ def sorbet_intro_date; end
490
+ end
491
+
492
+ class Spoom::Coverage::Snapshot < ::T::Struct
493
+ prop :timestamp, Integer, default: T.unsafe(nil)
494
+ prop :version_static, T.nilable(String), default: T.unsafe(nil)
495
+ prop :version_runtime, T.nilable(String), default: T.unsafe(nil)
496
+ prop :duration, Integer, default: T.unsafe(nil)
497
+ prop :commit_sha, T.nilable(String), default: T.unsafe(nil)
498
+ prop :commit_timestamp, T.nilable(Integer), default: T.unsafe(nil)
499
+ prop :files, Integer, default: T.unsafe(nil)
500
+ prop :modules, Integer, default: T.unsafe(nil)
501
+ prop :classes, Integer, default: T.unsafe(nil)
502
+ prop :singleton_classes, Integer, default: T.unsafe(nil)
503
+ prop :methods_without_sig, Integer, default: T.unsafe(nil)
504
+ prop :methods_with_sig, Integer, default: T.unsafe(nil)
505
+ prop :calls_untyped, Integer, default: T.unsafe(nil)
506
+ prop :calls_typed, Integer, default: T.unsafe(nil)
507
+ prop :sigils, T::Hash[String, Integer], default: T.unsafe(nil)
508
+
509
+ sig { params(out: T.any(IO, StringIO), colors: T::Boolean, indent_level: Integer).void }
510
+ def print(out: T.unsafe(nil), colors: T.unsafe(nil), indent_level: T.unsafe(nil)); end
511
+ sig { params(arg: T.untyped).returns(String) }
512
+ def to_json(*arg); end
513
+
514
+ class << self
515
+ sig { params(json: String).returns(Spoom::Coverage::Snapshot) }
516
+ def from_json(json); end
517
+ sig { params(obj: T::Hash[String, T.untyped]).returns(Spoom::Coverage::Snapshot) }
518
+ def from_obj(obj); end
519
+ def inherited(s); end
520
+ end
521
+ end
522
+
523
+ Spoom::Coverage::Snapshot::STRICTNESSES = T.let(T.unsafe(nil), Array)
524
+
525
+ class Spoom::Coverage::SnapshotPrinter < ::Spoom::Printer
526
+ sig { params(snapshot: Spoom::Coverage::Snapshot).void }
527
+ def print_snapshot(snapshot); end
528
+
529
+ private
530
+
531
+ sig { params(value: T.nilable(Integer), total: T.nilable(Integer)).returns(String) }
532
+ def percent(value, total); end
533
+ sig { params(hash: T::Hash[String, Integer], total: Integer).void }
534
+ def print_map(hash, total); end
535
+ end
536
+
537
+ class Spoom::Coverage::Template
538
+ abstract!
539
+
540
+ sig { params(template: String).void }
541
+ def initialize(template:); end
542
+
543
+ sig { returns(String) }
544
+ def erb; end
545
+ sig { returns(Binding) }
546
+ def get_binding; end
547
+ sig { returns(String) }
548
+ def html; end
549
+ end
550
+
551
+ class Spoom::Error < ::StandardError
552
+ end
553
+
554
+ class Spoom::FileTree
555
+ sig { params(paths: T::Enumerable[String], strip_prefix: T.nilable(String)).void }
556
+ def initialize(paths = T.unsafe(nil), strip_prefix: T.unsafe(nil)); end
557
+
558
+ sig { params(path: String).returns(Spoom::FileTree::Node) }
559
+ def add_path(path); end
560
+ sig { params(paths: T::Enumerable[String]).void }
561
+ def add_paths(paths); end
562
+ sig { returns(T::Array[Spoom::FileTree::Node]) }
563
+ def nodes; end
564
+ sig { returns(T::Array[String]) }
565
+ def paths; end
566
+ sig { params(out: T.any(IO, StringIO), show_strictness: T::Boolean, colors: T::Boolean, indent_level: Integer).void }
567
+ def print(out: T.unsafe(nil), show_strictness: T.unsafe(nil), colors: T.unsafe(nil), indent_level: T.unsafe(nil)); end
568
+ sig { returns(T::Array[Spoom::FileTree::Node]) }
569
+ def roots; end
570
+ sig { returns(T.nilable(String)) }
571
+ def strip_prefix; end
572
+
573
+ private
574
+
575
+ sig { params(node: Spoom::FileTree::Node, collected_nodes: T::Array[Spoom::FileTree::Node]).returns(T::Array[Spoom::FileTree::Node]) }
576
+ def collect_nodes(node, collected_nodes = T.unsafe(nil)); end
577
+ end
578
+
579
+ class Spoom::FileTree::Node < ::T::Struct
580
+ const :parent, T.nilable(Spoom::FileTree::Node)
581
+ const :name, String
582
+ const :children, T::Hash[String, Spoom::FileTree::Node], default: T.unsafe(nil)
583
+
584
+ sig { returns(String) }
585
+ def path; end
586
+
587
+ class << self
588
+ def inherited(s); end
589
+ end
590
+ end
591
+
592
+ class Spoom::FileTree::TreePrinter < ::Spoom::Printer
593
+ sig { params(tree: Spoom::FileTree, out: T.any(IO, StringIO), show_strictness: T::Boolean, colors: T::Boolean, indent_level: Integer).void }
594
+ def initialize(tree:, out: T.unsafe(nil), show_strictness: T.unsafe(nil), colors: T.unsafe(nil), indent_level: T.unsafe(nil)); end
595
+
596
+ sig { params(node: Spoom::FileTree::Node).void }
597
+ def print_node(node); end
598
+ sig { params(nodes: T::Array[Spoom::FileTree::Node]).void }
599
+ def print_nodes(nodes); end
600
+ sig { void }
601
+ def print_tree; end
602
+ sig { returns(Spoom::FileTree) }
603
+ def tree; end
604
+
605
+ private
606
+
607
+ sig { params(node: Spoom::FileTree::Node).returns(T.nilable(String)) }
608
+ def node_strictness(node); end
609
+ sig { params(strictness: T.nilable(String)).returns(Symbol) }
610
+ def strictness_color(strictness); end
611
+ end
612
+
613
+ module Spoom::Git
614
+ class << self
615
+ sig { params(arg: String, path: String).returns([String, String, T::Boolean]) }
616
+ def checkout(*arg, path: T.unsafe(nil)); end
617
+ sig { params(sha: String, path: String).returns(T.nilable(Time)) }
618
+ def commit_time(sha, path: T.unsafe(nil)); end
619
+ sig { params(sha: String, path: String).returns(T.nilable(Integer)) }
620
+ def commit_timestamp(sha, path: T.unsafe(nil)); end
621
+ sig { params(arg: String, path: String).returns([String, String, T::Boolean]) }
622
+ def diff(*arg, path: T.unsafe(nil)); end
623
+ sig { params(timestamp: String).returns(Time) }
624
+ def epoch_to_time(timestamp); end
625
+ sig { params(command: String, arg: String, path: String).returns([String, String, T::Boolean]) }
626
+ def exec(command, *arg, path: T.unsafe(nil)); end
627
+ sig { params(path: String).returns(T.nilable(String)) }
628
+ def last_commit(path: T.unsafe(nil)); end
629
+ sig { params(arg: String, path: String).returns([String, String, T::Boolean]) }
630
+ def log(*arg, path: T.unsafe(nil)); end
631
+ sig { params(arg: String, path: String).returns([String, String, T::Boolean]) }
632
+ def rev_parse(*arg, path: T.unsafe(nil)); end
633
+ sig { params(arg: String, path: String).returns([String, String, T::Boolean]) }
634
+ def show(*arg, path: T.unsafe(nil)); end
635
+ sig { params(path: String).returns(T.nilable(String)) }
636
+ def sorbet_intro_commit(path: T.unsafe(nil)); end
637
+ sig { params(path: String).returns(T::Boolean) }
638
+ def workdir_clean?(path: T.unsafe(nil)); end
639
+ end
640
+ end
641
+
642
+ module Spoom::LSP
643
+ end
644
+
645
+ class Spoom::LSP::Client
646
+ def initialize(sorbet_bin, *sorbet_args, path: T.unsafe(nil)); end
647
+
648
+ def close; end
649
+ def definitions(uri, line, column); end
650
+ def document_symbols(uri); end
651
+ def hover(uri, line, column); end
652
+ def next_id; end
653
+ def open(workspace_path); end
654
+ def read; end
655
+ def read_raw; end
656
+ def references(uri, line, column, include_decl = T.unsafe(nil)); end
657
+ def send(message); end
658
+ def send_raw(json_string); end
659
+ def signatures(uri, line, column); end
660
+ def symbols(query); end
661
+ def type_definitions(uri, line, column); end
662
+ end
663
+
664
+ class Spoom::LSP::Diagnostic < ::T::Struct
665
+ include(::Spoom::LSP::PrintableSymbol)
666
+
667
+ const :range, Spoom::LSP::Range
668
+ const :code, Integer
669
+ const :message, String
670
+ const :informations, Object
671
+
672
+ sig { override.params(printer: Spoom::LSP::SymbolPrinter).void }
673
+ def accept_printer(printer); end
674
+ def to_s; end
675
+
676
+ class << self
677
+ def from_json(json); end
678
+ def inherited(s); end
679
+ end
680
+ end
681
+
682
+ class Spoom::LSP::DocumentSymbol < ::T::Struct
683
+ include(::Spoom::LSP::PrintableSymbol)
684
+
685
+ const :name, String
686
+ const :detail, T.nilable(String)
687
+ const :kind, Integer
688
+ const :location, T.nilable(Spoom::LSP::Location)
689
+ const :range, T.nilable(Spoom::LSP::Range)
690
+ const :children, T::Array[Spoom::LSP::DocumentSymbol]
691
+
692
+ sig { override.params(printer: Spoom::LSP::SymbolPrinter).void }
693
+ def accept_printer(printer); end
694
+ def kind_string; end
695
+ def to_s; end
696
+
697
+ class << self
698
+ def from_json(json); end
699
+ def inherited(s); end
700
+ end
701
+ end
702
+
703
+ Spoom::LSP::DocumentSymbol::SYMBOL_KINDS = T.let(T.unsafe(nil), Hash)
704
+
705
+ class Spoom::LSP::Error < ::StandardError
706
+ end
707
+
708
+ class Spoom::LSP::Error::AlreadyOpen < ::Spoom::LSP::Error
709
+ end
710
+
711
+ class Spoom::LSP::Error::BadHeaders < ::Spoom::LSP::Error
712
+ end
713
+
714
+ class Spoom::LSP::Error::Diagnostics < ::Spoom::LSP::Error
715
+ def initialize(uri, diagnostics); end
716
+
717
+ def diagnostics; end
718
+ def uri; end
719
+
720
+ class << self
721
+ def from_json(json); end
722
+ end
723
+ end
724
+
725
+ class Spoom::LSP::Hover < ::T::Struct
726
+ include(::Spoom::LSP::PrintableSymbol)
727
+
728
+ const :contents, String
729
+ const :range, T.nilable(T::Range[T.untyped])
730
+
731
+ sig { override.params(printer: Spoom::LSP::SymbolPrinter).void }
732
+ def accept_printer(printer); end
733
+ def to_s; end
734
+
735
+ class << self
736
+ def from_json(json); end
737
+ def inherited(s); end
738
+ end
739
+ end
740
+
741
+ class Spoom::LSP::Location < ::T::Struct
742
+ include(::Spoom::LSP::PrintableSymbol)
743
+
744
+ const :uri, String
745
+ const :range, Spoom::LSP::Range
746
+
747
+ sig { override.params(printer: Spoom::LSP::SymbolPrinter).void }
748
+ def accept_printer(printer); end
749
+ def to_s; end
750
+
751
+ class << self
752
+ def from_json(json); end
753
+ def inherited(s); end
754
+ end
755
+ end
756
+
757
+ class Spoom::LSP::Message
758
+ def initialize; end
759
+
760
+ def as_json; end
761
+ def jsonrpc; end
762
+ def to_json(*args); end
763
+ end
764
+
765
+ class Spoom::LSP::Notification < ::Spoom::LSP::Message
766
+ def initialize(method, params); end
767
+
768
+ def method; end
769
+ def params; end
770
+ end
771
+
772
+ class Spoom::LSP::Position < ::T::Struct
773
+ include(::Spoom::LSP::PrintableSymbol)
774
+
775
+ const :line, Integer
776
+ const :char, Integer
777
+
778
+ sig { override.params(printer: Spoom::LSP::SymbolPrinter).void }
779
+ def accept_printer(printer); end
780
+ def to_s; end
781
+
782
+ class << self
783
+ def from_json(json); end
784
+ def inherited(s); end
785
+ end
786
+ end
787
+
788
+ module Spoom::LSP::PrintableSymbol
789
+ interface!
790
+
791
+ sig { abstract.params(printer: Spoom::LSP::SymbolPrinter).void }
792
+ def accept_printer(printer); end
793
+ end
794
+
795
+ class Spoom::LSP::Range < ::T::Struct
796
+ include(::Spoom::LSP::PrintableSymbol)
797
+
798
+ const :start, Spoom::LSP::Position
799
+ const :end, Spoom::LSP::Position
800
+
801
+ sig { override.params(printer: Spoom::LSP::SymbolPrinter).void }
802
+ def accept_printer(printer); end
803
+ def to_s; end
804
+
805
+ class << self
806
+ def from_json(json); end
807
+ def inherited(s); end
808
+ end
809
+ end
810
+
811
+ class Spoom::LSP::Request < ::Spoom::LSP::Message
812
+ def initialize(id, method, params); end
813
+
814
+ def id; end
815
+ def method; end
816
+ def params; end
817
+ end
818
+
819
+ class Spoom::LSP::ResponseError < ::Spoom::LSP::Error
820
+ def initialize(code, message, data); end
821
+
822
+ def code; end
823
+ def data; end
824
+ def message; end
825
+
826
+ class << self
827
+ def from_json(json); end
828
+ end
829
+ end
830
+
831
+ class Spoom::LSP::SignatureHelp < ::T::Struct
832
+ include(::Spoom::LSP::PrintableSymbol)
833
+
834
+ const :label, T.nilable(String)
835
+ const :doc, Object
836
+ const :params, T::Array[T.untyped]
837
+
838
+ sig { override.params(printer: Spoom::LSP::SymbolPrinter).void }
839
+ def accept_printer(printer); end
840
+ def to_s; end
841
+
842
+ class << self
843
+ def from_json(json); end
844
+ def inherited(s); end
845
+ end
846
+ end
847
+
848
+ class Spoom::LSP::SymbolPrinter < ::Spoom::Printer
849
+ sig { params(out: T.any(IO, StringIO), colors: T::Boolean, indent_level: Integer, prefix: T.nilable(String)).void }
850
+ def initialize(out: T.unsafe(nil), colors: T.unsafe(nil), indent_level: T.unsafe(nil), prefix: T.unsafe(nil)); end
851
+
852
+ sig { params(uri: String).returns(String) }
853
+ def clean_uri(uri); end
854
+ def prefix; end
855
+ def prefix=(_arg0); end
856
+ sig { params(objects: T::Array[Spoom::LSP::PrintableSymbol]).void }
857
+ def print_list(objects); end
858
+ sig { params(object: T.nilable(Spoom::LSP::PrintableSymbol)).void }
859
+ def print_object(object); end
860
+ sig { params(objects: T::Array[Spoom::LSP::PrintableSymbol]).void }
861
+ def print_objects(objects); end
862
+ def seen; end
863
+ def seen=(_arg0); end
864
+ end
865
+
866
+ class Spoom::Printer
867
+ abstract!
868
+
869
+ sig { params(out: T.any(IO, StringIO), colors: T::Boolean, indent_level: Integer).void }
870
+ def initialize(out: T.unsafe(nil), colors: T.unsafe(nil), indent_level: T.unsafe(nil)); end
871
+
872
+ sig { params(string: String, color: Symbol).returns(String) }
873
+ def colorize(string, color); end
874
+ sig { void }
875
+ def dedent; end
876
+ sig { void }
877
+ def indent; end
878
+ sig { returns(T.any(IO, StringIO)) }
879
+ def out; end
880
+ def out=(_arg0); end
881
+ sig { params(string: T.nilable(String)).void }
882
+ def print(string); end
883
+ sig { params(string: T.nilable(String), color: Symbol, colors: Symbol).void }
884
+ def print_colored(string, color, *colors); end
885
+ sig { params(string: T.nilable(String)).void }
886
+ def printl(string); end
887
+ sig { void }
888
+ def printn; end
889
+ sig { void }
890
+ def printt; end
891
+ end
892
+
893
+ Spoom::SPOOM_PATH = T.let(T.unsafe(nil), String)
894
+
895
+ module Spoom::Sorbet
896
+ class << self
897
+ sig { params(arg: String, path: String, capture_err: T::Boolean, sorbet_bin: T.nilable(String)).returns([String, T::Boolean]) }
898
+ def srb(*arg, path: T.unsafe(nil), capture_err: T.unsafe(nil), sorbet_bin: T.unsafe(nil)); end
899
+ sig { params(config: Spoom::Sorbet::Config, path: String).returns(T::Array[String]) }
900
+ def srb_files(config, path: T.unsafe(nil)); end
901
+ sig { params(arg: String, path: String, capture_err: T::Boolean, sorbet_bin: T.nilable(String)).returns(T.nilable(T::Hash[String, Integer])) }
902
+ def srb_metrics(*arg, path: T.unsafe(nil), capture_err: T.unsafe(nil), sorbet_bin: T.unsafe(nil)); end
903
+ sig { params(arg: String, path: String, capture_err: T::Boolean, sorbet_bin: T.nilable(String)).returns([String, T::Boolean]) }
904
+ def srb_tc(*arg, path: T.unsafe(nil), capture_err: T.unsafe(nil), sorbet_bin: T.unsafe(nil)); end
905
+ sig { params(arg: String, path: String, capture_err: T::Boolean, sorbet_bin: T.nilable(String)).returns(T.nilable(String)) }
906
+ def srb_version(*arg, path: T.unsafe(nil), capture_err: T.unsafe(nil), sorbet_bin: T.unsafe(nil)); end
907
+ sig { params(gem: String, path: String).returns(T.nilable(String)) }
908
+ def version_from_gemfile_lock(gem: T.unsafe(nil), path: T.unsafe(nil)); end
909
+ end
910
+ end
911
+
912
+ Spoom::Sorbet::BIN_PATH = T.let(T.unsafe(nil), String)
913
+
914
+ Spoom::Sorbet::CONFIG_PATH = T.let(T.unsafe(nil), String)
915
+
916
+ class Spoom::Sorbet::Config
917
+ sig { void }
918
+ def initialize; end
919
+
920
+ def allowed_extensions; end
921
+ sig { returns(Spoom::Sorbet::Config) }
922
+ def copy; end
923
+ def ignore; end
924
+ sig { returns(String) }
925
+ def options_string; end
926
+ sig { returns(T::Array[String]) }
927
+ def paths; end
928
+
929
+ class << self
930
+ sig { params(sorbet_config_path: String).returns(Spoom::Sorbet::Config) }
931
+ def parse_file(sorbet_config_path); end
932
+ sig { params(sorbet_config: String).returns(Spoom::Sorbet::Config) }
933
+ def parse_string(sorbet_config); end
934
+
935
+ private
936
+
937
+ sig { params(line: String).returns(String) }
938
+ def parse_option(line); end
939
+ end
940
+ end
941
+
942
+ module Spoom::Sorbet::Errors
943
+ class << self
944
+ sig { params(errors: T::Array[Spoom::Sorbet::Errors::Error]).returns(T::Array[Spoom::Sorbet::Errors::Error]) }
945
+ def sort_errors_by_code(errors); end
946
+ end
947
+ end
948
+
949
+ class Spoom::Sorbet::Errors::Error
950
+ include(::Comparable)
951
+
952
+ sig { params(file: T.nilable(String), line: T.nilable(Integer), message: T.nilable(String), code: T.nilable(Integer), more: T::Array[String]).void }
953
+ def initialize(file, line, message, code, more = T.unsafe(nil)); end
954
+
955
+ sig { params(other: T.untyped).returns(Integer) }
956
+ def <=>(other); end
957
+ def code; end
958
+ sig { returns(T.nilable(String)) }
959
+ def file; end
960
+ sig { returns(T.nilable(Integer)) }
961
+ def line; end
962
+ def message; end
963
+ sig { returns(T::Array[String]) }
964
+ def more; end
965
+ sig { returns(String) }
966
+ def to_s; end
967
+ end
968
+
969
+ class Spoom::Sorbet::Errors::Parser
970
+ sig { void }
971
+ def initialize; end
972
+
973
+ sig { params(output: String).returns(T::Array[Spoom::Sorbet::Errors::Error]) }
974
+ def parse(output); end
975
+
976
+ private
977
+
978
+ sig { params(line: String).void }
979
+ def append_error(line); end
980
+ sig { void }
981
+ def close_error; end
982
+ sig { params(line: String).returns(T.nilable(Spoom::Sorbet::Errors::Error)) }
983
+ def match_error_line(line); end
984
+ sig { params(error: Spoom::Sorbet::Errors::Error).void }
985
+ def open_error(error); end
986
+
987
+ class << self
988
+ sig { params(output: String).returns(T::Array[Spoom::Sorbet::Errors::Error]) }
989
+ def parse_string(output); end
990
+ end
991
+ end
992
+
993
+ Spoom::Sorbet::Errors::Parser::ERROR_LINE_MATCH_REGEX = T.let(T.unsafe(nil), Regexp)
994
+
995
+ Spoom::Sorbet::Errors::Parser::HEADER = T.let(T.unsafe(nil), Array)
996
+
997
+ Spoom::Sorbet::GEM_PATH = T.let(T.unsafe(nil), String)
998
+
999
+ module Spoom::Sorbet::MetricsParser
1000
+ class << self
1001
+ sig { params(path: String, prefix: String).returns(T::Hash[String, Integer]) }
1002
+ def parse_file(path, prefix = T.unsafe(nil)); end
1003
+ sig { params(obj: T::Hash[String, T.untyped], prefix: String).returns(T::Hash[String, Integer]) }
1004
+ def parse_hash(obj, prefix = T.unsafe(nil)); end
1005
+ sig { params(string: String, prefix: String).returns(T::Hash[String, Integer]) }
1006
+ def parse_string(string, prefix = T.unsafe(nil)); end
1007
+ end
1008
+ end
1009
+
1010
+ Spoom::Sorbet::MetricsParser::DEFAULT_PREFIX = T.let(T.unsafe(nil), String)
1011
+
1012
+ module Spoom::Sorbet::Sigils
1013
+ class << self
1014
+ sig { params(path: T.any(Pathname, String), new_strictness: String).returns(T::Boolean) }
1015
+ def change_sigil_in_file(path, new_strictness); end
1016
+ sig { params(path_list: T::Array[String], new_strictness: String).returns(T::Array[String]) }
1017
+ def change_sigil_in_files(path_list, new_strictness); end
1018
+ sig { params(path: T.any(Pathname, String)).returns(T.nilable(String)) }
1019
+ def file_strictness(path); end
1020
+ sig { params(directory: T.any(Pathname, String), strictness: String, extension: String).returns(T::Array[String]) }
1021
+ def files_with_sigil_strictness(directory, strictness, extension: T.unsafe(nil)); end
1022
+ sig { params(strictness: String).returns(String) }
1023
+ def sigil_string(strictness); end
1024
+ sig { params(content: String).returns(T.nilable(String)) }
1025
+ def strictness_in_content(content); end
1026
+ sig { params(content: String, new_strictness: String).returns(String) }
1027
+ def update_sigil(content, new_strictness); end
1028
+ sig { params(strictness: String).returns(T::Boolean) }
1029
+ def valid_strictness?(strictness); end
1030
+ end
1031
+ end
1032
+
1033
+ Spoom::Sorbet::Sigils::SIGIL_REGEXP = T.let(T.unsafe(nil), Regexp)
1034
+
1035
+ Spoom::Sorbet::Sigils::STRICTNESS_FALSE = T.let(T.unsafe(nil), String)
1036
+
1037
+ Spoom::Sorbet::Sigils::STRICTNESS_IGNORE = T.let(T.unsafe(nil), String)
1038
+
1039
+ Spoom::Sorbet::Sigils::STRICTNESS_INTERNAL = T.let(T.unsafe(nil), String)
1040
+
1041
+ Spoom::Sorbet::Sigils::STRICTNESS_STRICT = T.let(T.unsafe(nil), String)
1042
+
1043
+ Spoom::Sorbet::Sigils::STRICTNESS_STRONG = T.let(T.unsafe(nil), String)
1044
+
1045
+ Spoom::Sorbet::Sigils::STRICTNESS_TRUE = T.let(T.unsafe(nil), String)
1046
+
1047
+ Spoom::Sorbet::Sigils::VALID_STRICTNESS = T.let(T.unsafe(nil), Array)
1048
+
1049
+ class Spoom::Timeline
1050
+ sig { params(from: Time, to: Time, path: String).void }
1051
+ def initialize(from, to, path: T.unsafe(nil)); end
1052
+
1053
+ sig { params(dates: T::Array[Time]).returns(T::Array[String]) }
1054
+ def commits_for_dates(dates); end
1055
+ sig { returns(T::Array[Time]) }
1056
+ def months; end
1057
+ sig { returns(T::Array[String]) }
1058
+ def ticks; end
1059
+ end
1060
+
1061
+ Spoom::VERSION = T.let(T.unsafe(nil), String)