packwerk 1.0.1 → 1.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (118) hide show
  1. checksums.yaml +4 -4
  2. data/.github/pull_request_template.md +8 -7
  3. data/.github/workflows/ci.yml +14 -5
  4. data/.ruby-version +1 -1
  5. data/Gemfile +2 -1
  6. data/Gemfile.lock +130 -110
  7. data/README.md +8 -1
  8. data/USAGE.md +23 -2
  9. data/dev.yml +1 -1
  10. data/exe/packwerk +1 -1
  11. data/gemfiles/Gemfile-rails-6-0 +22 -0
  12. data/lib/packwerk.rb +4 -2
  13. data/lib/packwerk/application_load_paths.rb +68 -0
  14. data/lib/packwerk/application_validator.rb +94 -74
  15. data/lib/packwerk/association_inspector.rb +24 -9
  16. data/lib/packwerk/cache_deprecated_references.rb +55 -0
  17. data/lib/packwerk/checker.rb +3 -0
  18. data/lib/packwerk/checking_deprecated_references.rb +5 -2
  19. data/lib/packwerk/cli.rb +56 -55
  20. data/lib/packwerk/commands/detect_stale_violations_command.rb +60 -0
  21. data/lib/packwerk/commands/offense_progress_marker.rb +24 -0
  22. data/lib/packwerk/commands/result.rb +13 -0
  23. data/lib/packwerk/commands/update_deprecations_command.rb +81 -0
  24. data/lib/packwerk/configuration.rb +5 -37
  25. data/lib/packwerk/const_node_inspector.rb +28 -17
  26. data/lib/packwerk/dependency_checker.rb +13 -5
  27. data/lib/packwerk/deprecated_references.rb +23 -0
  28. data/lib/packwerk/detect_stale_deprecated_references.rb +14 -0
  29. data/lib/packwerk/file_processor.rb +4 -4
  30. data/lib/packwerk/formatters/offenses_formatter.rb +48 -0
  31. data/lib/packwerk/formatters/progress_formatter.rb +6 -2
  32. data/lib/packwerk/inflector.rb +17 -8
  33. data/lib/packwerk/node.rb +61 -38
  34. data/lib/packwerk/node_processor.rb +4 -4
  35. data/lib/packwerk/node_processor_factory.rb +39 -0
  36. data/lib/packwerk/node_visitor.rb +1 -1
  37. data/lib/packwerk/offense.rb +4 -6
  38. data/lib/packwerk/output_style.rb +20 -0
  39. data/lib/packwerk/output_styles/coloured.rb +29 -0
  40. data/lib/packwerk/output_styles/plain.rb +26 -0
  41. data/lib/packwerk/package_set.rb +9 -3
  42. data/lib/packwerk/parsed_constant_definitions.rb +4 -4
  43. data/lib/packwerk/parsers/erb.rb +4 -0
  44. data/lib/packwerk/parsers/factory.rb +10 -1
  45. data/lib/packwerk/privacy_checker.rb +23 -5
  46. data/lib/packwerk/run_context.rb +69 -46
  47. data/lib/packwerk/sanity_checker.rb +1 -1
  48. data/lib/packwerk/spring_command.rb +1 -1
  49. data/lib/packwerk/updating_deprecated_references.rb +2 -39
  50. data/lib/packwerk/version.rb +1 -1
  51. data/library.yml +1 -1
  52. data/packwerk.gemspec +1 -1
  53. data/service.yml +2 -2
  54. data/shipit.rubygems.yml +5 -1
  55. data/sorbet/rbi/gems/{actioncable@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi → actioncable@7.0.0.alpha-d612542336d9a61381311c95a27d801bb4094779.rbi} +56 -36
  56. data/sorbet/rbi/gems/{actionmailbox@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi → actionmailbox@7.0.0.alpha-d612542336d9a61381311c95a27d801bb4094779.rbi} +25 -28
  57. data/sorbet/rbi/gems/{actionmailer@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi → actionmailer@7.0.0.alpha-d612542336d9a61381311c95a27d801bb4094779.rbi} +43 -24
  58. data/sorbet/rbi/gems/{actionpack@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi → actionpack@7.0.0.alpha-d612542336d9a61381311c95a27d801bb4094779.rbi} +382 -284
  59. data/sorbet/rbi/gems/{actiontext@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi → actiontext@7.0.0.alpha-d612542336d9a61381311c95a27d801bb4094779.rbi} +76 -40
  60. data/sorbet/rbi/gems/{actionview@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi → actionview@7.0.0.alpha-d612542336d9a61381311c95a27d801bb4094779.rbi} +206 -195
  61. data/sorbet/rbi/gems/{activejob@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi → activejob@7.0.0.alpha-d612542336d9a61381311c95a27d801bb4094779.rbi} +64 -75
  62. data/sorbet/rbi/gems/{activemodel@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi → activemodel@7.0.0.alpha-d612542336d9a61381311c95a27d801bb4094779.rbi} +103 -56
  63. data/sorbet/rbi/gems/{activerecord@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi → activerecord@7.0.0.alpha-d612542336d9a61381311c95a27d801bb4094779.rbi} +1250 -898
  64. data/sorbet/rbi/gems/{activestorage@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi → activestorage@7.0.0.alpha-d612542336d9a61381311c95a27d801bb4094779.rbi} +92 -120
  65. data/sorbet/rbi/gems/{activesupport@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi → activesupport@7.0.0.alpha-d612542336d9a61381311c95a27d801bb4094779.rbi} +292 -193
  66. data/sorbet/rbi/gems/{ast@2.4.1.rbi → ast@2.4.2.rbi} +2 -1
  67. data/sorbet/rbi/gems/{better_html@1.0.15.rbi → better_html@1.0.16.rbi} +2 -2
  68. data/sorbet/rbi/gems/{concurrent-ruby@1.1.6.rbi → concurrent-ruby@1.1.8.rbi} +12 -9
  69. data/sorbet/rbi/gems/{erubi@1.9.0.rbi → erubi@1.10.0.rbi} +3 -1
  70. data/sorbet/rbi/gems/{i18n@1.8.2.rbi → i18n@1.8.10.rbi} +19 -52
  71. data/sorbet/rbi/gems/{loofah@2.5.0.rbi → loofah@2.9.0.rbi} +3 -1
  72. data/sorbet/rbi/gems/marcel@1.0.0.rbi +70 -0
  73. data/sorbet/rbi/gems/{mini_mime@1.0.2.rbi → mini_mime@1.0.3.rbi} +6 -6
  74. data/sorbet/rbi/gems/{mini_portile2@2.4.0.rbi → minitest-focus@1.2.1.rbi} +2 -2
  75. data/sorbet/rbi/gems/{minitest@5.14.0.rbi → minitest@5.14.4.rbi} +31 -29
  76. data/sorbet/rbi/gems/{mocha@1.11.2.rbi → mocha@1.12.0.rbi} +25 -36
  77. data/sorbet/rbi/gems/{nio4r@2.5.2.rbi → nio4r@2.5.7.rbi} +21 -20
  78. data/sorbet/rbi/gems/{nokogiri@1.10.9.rbi → nokogiri@1.11.2.rbi} +193 -154
  79. data/sorbet/rbi/gems/{parallel@1.19.1.rbi → parallel@1.20.1.rbi} +1 -1
  80. data/sorbet/rbi/gems/parlour@6.0.0.rbi +1272 -0
  81. data/sorbet/rbi/gems/{parser@2.7.1.4.rbi → parser@3.0.0.0.rbi} +287 -174
  82. data/sorbet/rbi/gems/{pry@0.13.1.rbi → pry@0.14.0.rbi} +1 -1
  83. data/sorbet/rbi/gems/racc@1.5.2.rbi +57 -0
  84. data/sorbet/rbi/gems/{rack@2.2.2.rbi → rack@2.2.3.rbi} +23 -35
  85. data/sorbet/rbi/gems/{rails@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi → rails@7.0.0.alpha-d612542336d9a61381311c95a27d801bb4094779.rbi} +1 -1
  86. data/sorbet/rbi/gems/{railties@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi → railties@7.0.0.alpha-d612542336d9a61381311c95a27d801bb4094779.rbi} +132 -121
  87. data/sorbet/rbi/gems/{rake@13.0.1.rbi → rake@13.0.3.rbi} +16 -20
  88. data/sorbet/rbi/gems/regexp_parser@2.1.1.rbi +8 -0
  89. data/sorbet/rbi/gems/rubocop-ast@1.4.1.rbi +8 -0
  90. data/sorbet/rbi/gems/{rubocop-performance@1.5.2.rbi → rubocop-performance@1.10.2.rbi} +1 -1
  91. data/sorbet/rbi/gems/{rubocop-shopify@1.0.2.rbi → rubocop-shopify@2.0.1.rbi} +1 -1
  92. data/sorbet/rbi/gems/{rubocop-sorbet@0.3.7.rbi → rubocop-sorbet@0.6.1.rbi} +1 -1
  93. data/sorbet/rbi/gems/{rubocop@0.82.0.rbi → rubocop@1.12.0.rbi} +1 -1
  94. data/sorbet/rbi/gems/{ruby-progressbar@1.10.1.rbi → ruby-progressbar@1.11.0.rbi} +1 -1
  95. data/sorbet/rbi/gems/spoom@1.1.0.rbi +1061 -0
  96. data/sorbet/rbi/gems/{spring@2.1.0.rbi → spring@2.1.1.rbi} +7 -7
  97. data/sorbet/rbi/gems/{sprockets-rails@3.2.1.rbi → sprockets-rails@3.2.2.rbi} +88 -68
  98. data/sorbet/rbi/gems/{sprockets@4.0.0.rbi → sprockets@4.0.2.rbi} +8 -7
  99. data/sorbet/rbi/gems/{tapioca@0.4.5.rbi → tapioca@0.4.19.rbi} +109 -24
  100. data/sorbet/rbi/gems/{thor@1.0.1.rbi → thor@1.1.0.rbi} +16 -15
  101. data/sorbet/rbi/gems/{tzinfo@2.0.2.rbi → tzinfo@2.0.4.rbi} +21 -2
  102. data/sorbet/rbi/gems/{unicode-display_width@1.7.0.rbi → unicode-display_width@2.0.0.rbi} +1 -1
  103. data/sorbet/rbi/gems/{websocket-driver@0.7.1.rbi → websocket-driver@0.7.3.rbi} +29 -29
  104. data/sorbet/rbi/gems/{websocket-extensions@0.1.4.rbi → websocket-extensions@0.1.5.rbi} +2 -2
  105. data/sorbet/rbi/gems/zeitwerk@2.4.2.rbi +177 -0
  106. metadata +66 -58
  107. data/lib/packwerk/output_styles.rb +0 -41
  108. data/sorbet/rbi/gems/jaro_winkler@1.5.4.rbi +0 -8
  109. data/sorbet/rbi/gems/marcel@0.3.3.rbi +0 -30
  110. data/sorbet/rbi/gems/mimemagic@0.3.5.rbi +0 -47
  111. data/sorbet/rbi/gems/parlour@4.0.1.rbi +0 -561
  112. data/sorbet/rbi/gems/spoom@1.0.4.rbi +0 -418
  113. data/sorbet/rbi/gems/zeitwerk@2.3.0.rbi +0 -8
  114. data/static/packwerk-check-demo.png +0 -0
  115. data/static/packwerk_check.gif +0 -0
  116. data/static/packwerk_check_violation.gif +0 -0
  117. data/static/packwerk_update.gif +0 -0
  118. data/static/packwerk_validate.gif +0 -0
@@ -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
@@ -0,0 +1,8 @@
1
+ # DO NOT EDIT MANUALLY
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
+
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
@@ -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)