spoom 1.5.0 → 1.7.2
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.
- checksums.yaml +4 -4
- data/README.md +14 -0
- data/lib/spoom/backtrace_filter/minitest.rb +3 -4
- data/lib/spoom/cli/deadcode.rb +1 -2
- data/lib/spoom/cli/helper.rb +41 -31
- data/lib/spoom/cli/srb/assertions.rb +48 -0
- data/lib/spoom/cli/srb/bump.rb +1 -2
- data/lib/spoom/cli/srb/coverage.rb +1 -1
- data/lib/spoom/cli/srb/metrics.rb +68 -0
- data/lib/spoom/cli/srb/sigs.rb +209 -0
- data/lib/spoom/cli/srb/tc.rb +16 -1
- data/lib/spoom/cli/srb.rb +16 -4
- data/lib/spoom/cli.rb +1 -2
- data/lib/spoom/colors.rb +2 -6
- data/lib/spoom/context/bundle.rb +8 -9
- data/lib/spoom/context/exec.rb +3 -6
- data/lib/spoom/context/file_system.rb +12 -19
- data/lib/spoom/context/git.rb +14 -19
- data/lib/spoom/context/sorbet.rb +14 -27
- data/lib/spoom/context.rb +4 -8
- data/lib/spoom/counters.rb +22 -0
- data/lib/spoom/coverage/d3/base.rb +6 -8
- data/lib/spoom/coverage/d3/circle_map.rb +6 -16
- data/lib/spoom/coverage/d3/pie.rb +14 -19
- data/lib/spoom/coverage/d3/timeline.rb +46 -47
- data/lib/spoom/coverage/d3.rb +2 -4
- data/lib/spoom/coverage/report.rb +41 -79
- data/lib/spoom/coverage/snapshot.rb +8 -14
- data/lib/spoom/coverage.rb +3 -5
- data/lib/spoom/deadcode/definition.rb +12 -14
- data/lib/spoom/deadcode/erb.rb +10 -8
- data/lib/spoom/deadcode/index.rb +21 -25
- data/lib/spoom/deadcode/indexer.rb +5 -6
- data/lib/spoom/deadcode/plugins/action_mailer.rb +2 -3
- data/lib/spoom/deadcode/plugins/action_mailer_preview.rb +2 -3
- data/lib/spoom/deadcode/plugins/actionpack.rb +19 -22
- data/lib/spoom/deadcode/plugins/active_model.rb +2 -3
- data/lib/spoom/deadcode/plugins/active_record.rb +62 -53
- data/lib/spoom/deadcode/plugins/active_support.rb +3 -2
- data/lib/spoom/deadcode/plugins/base.rb +29 -32
- data/lib/spoom/deadcode/plugins/graphql.rb +2 -3
- data/lib/spoom/deadcode/plugins/minitest.rb +4 -4
- data/lib/spoom/deadcode/plugins/namespaces.rb +5 -5
- data/lib/spoom/deadcode/plugins/rails.rb +5 -5
- data/lib/spoom/deadcode/plugins/rubocop.rb +5 -5
- data/lib/spoom/deadcode/plugins/ruby.rb +3 -4
- data/lib/spoom/deadcode/plugins/sorbet.rb +12 -6
- data/lib/spoom/deadcode/plugins/thor.rb +2 -3
- data/lib/spoom/deadcode/plugins.rb +23 -31
- data/lib/spoom/deadcode/remover.rb +58 -79
- data/lib/spoom/deadcode/send.rb +2 -8
- data/lib/spoom/file_collector.rb +11 -19
- data/lib/spoom/file_tree.rb +36 -51
- data/lib/spoom/location.rb +9 -20
- data/lib/spoom/model/builder.rb +54 -17
- data/lib/spoom/model/model.rb +71 -74
- data/lib/spoom/model/namespace_visitor.rb +4 -3
- data/lib/spoom/model/reference.rb +4 -8
- data/lib/spoom/model/references_visitor.rb +50 -30
- data/lib/spoom/parse.rb +4 -4
- data/lib/spoom/poset.rb +22 -24
- data/lib/spoom/printer.rb +10 -13
- data/lib/spoom/rbs.rb +77 -0
- data/lib/spoom/sorbet/config.rb +17 -24
- data/lib/spoom/sorbet/errors.rb +87 -45
- data/lib/spoom/sorbet/lsp/base.rb +10 -16
- data/lib/spoom/sorbet/lsp/errors.rb +8 -16
- data/lib/spoom/sorbet/lsp/structures.rb +65 -91
- data/lib/spoom/sorbet/lsp.rb +20 -22
- data/lib/spoom/sorbet/metrics/code_metrics_visitor.rb +236 -0
- data/lib/spoom/sorbet/metrics/metrics_file_parser.rb +34 -0
- data/lib/spoom/sorbet/metrics.rb +2 -32
- data/lib/spoom/sorbet/sigils.rb +16 -23
- data/lib/spoom/sorbet/translate/rbs_comments_to_sorbet_sigs.rb +242 -0
- data/lib/spoom/sorbet/translate/sorbet_assertions_to_rbs_comments.rb +123 -0
- data/lib/spoom/sorbet/translate/sorbet_sigs_to_rbs_comments.rb +293 -0
- data/lib/spoom/sorbet/translate/strip_sorbet_sigs.rb +23 -0
- data/lib/spoom/sorbet/translate/translator.rb +71 -0
- data/lib/spoom/sorbet/translate.rb +49 -0
- data/lib/spoom/sorbet.rb +6 -12
- data/lib/spoom/source/rewriter.rb +167 -0
- data/lib/spoom/source.rb +4 -0
- data/lib/spoom/timeline.rb +4 -6
- data/lib/spoom/version.rb +1 -1
- data/lib/spoom/visitor.rb +298 -151
- data/lib/spoom.rb +4 -3
- data/rbi/spoom.rbi +3567 -0
- metadata +62 -8
@@ -7,21 +7,18 @@ module Spoom
|
|
7
7
|
module Coverage
|
8
8
|
module D3
|
9
9
|
class Pie < Base
|
10
|
-
extend T::Sig
|
11
10
|
extend T::Helpers
|
12
11
|
|
13
12
|
abstract!
|
14
13
|
|
15
|
-
|
14
|
+
#: (String id, String title, untyped data) -> void
|
16
15
|
def initialize(id, title, data)
|
17
16
|
super(id, data)
|
18
17
|
@title = title
|
19
18
|
end
|
20
19
|
|
21
20
|
class << self
|
22
|
-
|
23
|
-
|
24
|
-
sig { returns(String) }
|
21
|
+
#: -> String
|
25
22
|
def header_style
|
26
23
|
<<~CSS
|
27
24
|
.pie .title {
|
@@ -39,7 +36,7 @@ module Spoom
|
|
39
36
|
CSS
|
40
37
|
end
|
41
38
|
|
42
|
-
|
39
|
+
#: -> String
|
43
40
|
def header_script
|
44
41
|
<<~JS
|
45
42
|
function tooltipPie(d, title, kind, sum) {
|
@@ -52,7 +49,8 @@ module Spoom
|
|
52
49
|
end
|
53
50
|
end
|
54
51
|
|
55
|
-
|
52
|
+
# @override
|
53
|
+
#: -> String
|
56
54
|
def script
|
57
55
|
<<~JS
|
58
56
|
#{tooltip}
|
@@ -121,14 +119,13 @@ module Spoom
|
|
121
119
|
end
|
122
120
|
|
123
121
|
class Sigils < Pie
|
124
|
-
|
125
|
-
|
126
|
-
sig { params(id: String, title: String, snapshot: Snapshot).void }
|
122
|
+
#: (String id, String title, Snapshot snapshot) -> void
|
127
123
|
def initialize(id, title, snapshot)
|
128
124
|
super(id, title, snapshot.sigils_excluding_rbis.select { |_k, v| v })
|
129
125
|
end
|
130
126
|
|
131
|
-
|
127
|
+
# @override
|
128
|
+
#: -> String
|
132
129
|
def tooltip
|
133
130
|
<<~JS
|
134
131
|
function tooltip_#{id}(d) {
|
@@ -139,14 +136,13 @@ module Spoom
|
|
139
136
|
end
|
140
137
|
|
141
138
|
class Calls < Pie
|
142
|
-
|
143
|
-
|
144
|
-
sig { params(id: String, title: String, snapshot: Snapshot).void }
|
139
|
+
#: (String id, String title, Snapshot snapshot) -> void
|
145
140
|
def initialize(id, title, snapshot)
|
146
141
|
super(id, title, { true: snapshot.calls_typed, false: snapshot.calls_untyped })
|
147
142
|
end
|
148
143
|
|
149
|
-
|
144
|
+
# @override
|
145
|
+
#: -> String
|
150
146
|
def tooltip
|
151
147
|
<<~JS
|
152
148
|
function tooltip_#{id}(d) {
|
@@ -157,9 +153,7 @@ module Spoom
|
|
157
153
|
end
|
158
154
|
|
159
155
|
class Sigs < Pie
|
160
|
-
|
161
|
-
|
162
|
-
sig { params(id: String, title: String, snapshot: Snapshot).void }
|
156
|
+
#: (String id, String title, Snapshot snapshot) -> void
|
163
157
|
def initialize(id, title, snapshot)
|
164
158
|
super(
|
165
159
|
id,
|
@@ -168,7 +162,8 @@ module Spoom
|
|
168
162
|
)
|
169
163
|
end
|
170
164
|
|
171
|
-
|
165
|
+
# @override
|
166
|
+
#: -> String
|
172
167
|
def tooltip
|
173
168
|
<<~JS
|
174
169
|
function tooltip_#{id}(d) {
|
@@ -7,21 +7,18 @@ module Spoom
|
|
7
7
|
module Coverage
|
8
8
|
module D3
|
9
9
|
class Timeline < Base
|
10
|
-
extend T::Sig
|
11
10
|
extend T::Helpers
|
12
11
|
|
13
12
|
abstract!
|
14
13
|
|
15
|
-
|
14
|
+
#: (String id, untyped data, Array[String] keys) -> void
|
16
15
|
def initialize(id, data, keys)
|
17
16
|
super(id, data)
|
18
17
|
@keys = keys
|
19
18
|
end
|
20
19
|
|
21
20
|
class << self
|
22
|
-
|
23
|
-
|
24
|
-
sig { returns(String) }
|
21
|
+
#: -> String
|
25
22
|
def header_style
|
26
23
|
<<~CSS
|
27
24
|
.domain {
|
@@ -75,7 +72,7 @@ module Spoom
|
|
75
72
|
CSS
|
76
73
|
end
|
77
74
|
|
78
|
-
|
75
|
+
#: -> String
|
79
76
|
def header_script
|
80
77
|
<<~JS
|
81
78
|
var parseVersion = function(version) {
|
@@ -97,7 +94,8 @@ module Spoom
|
|
97
94
|
end
|
98
95
|
end
|
99
96
|
|
100
|
-
|
97
|
+
# @override
|
98
|
+
#: -> String
|
101
99
|
def script
|
102
100
|
<<~HTML
|
103
101
|
#{tooltip}
|
@@ -125,7 +123,7 @@ module Spoom
|
|
125
123
|
sig { abstract.returns(String) }
|
126
124
|
def plot; end
|
127
125
|
|
128
|
-
|
126
|
+
#: -> String
|
129
127
|
def x_scale
|
130
128
|
<<~HTML
|
131
129
|
var xScale_#{id} = d3.scaleTime()
|
@@ -141,7 +139,7 @@ module Spoom
|
|
141
139
|
HTML
|
142
140
|
end
|
143
141
|
|
144
|
-
|
142
|
+
#: -> String
|
145
143
|
def x_ticks
|
146
144
|
<<~HTML
|
147
145
|
svg_#{id}.append("g")
|
@@ -154,7 +152,7 @@ module Spoom
|
|
154
152
|
HTML
|
155
153
|
end
|
156
154
|
|
157
|
-
|
155
|
+
#: (min: String, max: String, ticks: String) -> String
|
158
156
|
def y_scale(min:, max:, ticks:)
|
159
157
|
<<~HTML
|
160
158
|
var yScale_#{id} = d3.scaleLinear()
|
@@ -170,7 +168,7 @@ module Spoom
|
|
170
168
|
HTML
|
171
169
|
end
|
172
170
|
|
173
|
-
|
171
|
+
#: (ticks: String, format: String, padding: Integer) -> String
|
174
172
|
def y_ticks(ticks:, format:, padding:)
|
175
173
|
<<~HTML
|
176
174
|
svg_#{id}.append("g")
|
@@ -183,7 +181,7 @@ module Spoom
|
|
183
181
|
HTML
|
184
182
|
end
|
185
183
|
|
186
|
-
|
184
|
+
#: (y: String, ?color: String, ?curve: String) -> String
|
187
185
|
def area(y:, color: "#ccc", curve: "curveCatmullRom.alpha(1)")
|
188
186
|
<<~HTML
|
189
187
|
svg_#{id}.append("path")
|
@@ -199,7 +197,7 @@ module Spoom
|
|
199
197
|
HTML
|
200
198
|
end
|
201
199
|
|
202
|
-
|
200
|
+
#: (y: String, ?color: String, ?curve: String) -> String
|
203
201
|
def line(y:, color: "#ccc", curve: "curveCatmullRom.alpha(1)")
|
204
202
|
<<~HTML
|
205
203
|
svg_#{id}.append("path")
|
@@ -213,7 +211,7 @@ module Spoom
|
|
213
211
|
HTML
|
214
212
|
end
|
215
213
|
|
216
|
-
|
214
|
+
#: (y: String) -> String
|
217
215
|
def points(y:)
|
218
216
|
<<~HTML
|
219
217
|
svg_#{id}.selectAll("circle")
|
@@ -230,9 +228,7 @@ module Spoom
|
|
230
228
|
end
|
231
229
|
|
232
230
|
class Versions < Timeline
|
233
|
-
|
234
|
-
|
235
|
-
sig { params(id: String, snapshots: T::Array[Snapshot]).void }
|
231
|
+
#: (String id, Array[Snapshot] snapshots) -> void
|
236
232
|
def initialize(id, snapshots)
|
237
233
|
data = snapshots.map do |snapshot|
|
238
234
|
{
|
@@ -245,7 +241,8 @@ module Spoom
|
|
245
241
|
super(id, data, [])
|
246
242
|
end
|
247
243
|
|
248
|
-
|
244
|
+
# @override
|
245
|
+
#: -> String
|
249
246
|
def tooltip
|
250
247
|
<<~JS
|
251
248
|
function tooltip_#{id}(d) {
|
@@ -259,7 +256,8 @@ module Spoom
|
|
259
256
|
JS
|
260
257
|
end
|
261
258
|
|
262
|
-
|
259
|
+
# @override
|
260
|
+
#: -> String
|
263
261
|
def plot
|
264
262
|
<<~JS
|
265
263
|
#{x_scale}
|
@@ -280,9 +278,7 @@ module Spoom
|
|
280
278
|
end
|
281
279
|
|
282
280
|
class Runtimes < Timeline
|
283
|
-
|
284
|
-
|
285
|
-
sig { params(id: String, snapshots: T::Array[Snapshot]).void }
|
281
|
+
#: (String id, Array[Snapshot] snapshots) -> void
|
286
282
|
def initialize(id, snapshots)
|
287
283
|
data = snapshots.map do |snapshot|
|
288
284
|
{
|
@@ -294,7 +290,8 @@ module Spoom
|
|
294
290
|
super(id, data, [])
|
295
291
|
end
|
296
292
|
|
297
|
-
|
293
|
+
# @override
|
294
|
+
#: -> String
|
298
295
|
def tooltip
|
299
296
|
<<~JS
|
300
297
|
function tooltip_#{id}(d) {
|
@@ -307,7 +304,8 @@ module Spoom
|
|
307
304
|
JS
|
308
305
|
end
|
309
306
|
|
310
|
-
|
307
|
+
# @override
|
308
|
+
#: -> String
|
311
309
|
def plot
|
312
310
|
<<~JS
|
313
311
|
#{x_scale}
|
@@ -327,12 +325,12 @@ module Spoom
|
|
327
325
|
end
|
328
326
|
|
329
327
|
class Stacked < Timeline
|
330
|
-
extend T::Sig
|
331
328
|
extend T::Helpers
|
332
329
|
|
333
330
|
abstract!
|
334
331
|
|
335
|
-
|
332
|
+
# @override
|
333
|
+
#: -> String
|
336
334
|
def script
|
337
335
|
<<~JS
|
338
336
|
#{tooltip}
|
@@ -373,7 +371,8 @@ module Spoom
|
|
373
371
|
JS
|
374
372
|
end
|
375
373
|
|
376
|
-
|
374
|
+
# @override
|
375
|
+
#: -> String
|
377
376
|
def plot
|
378
377
|
<<~JS
|
379
378
|
#{x_scale}
|
@@ -384,7 +383,8 @@ module Spoom
|
|
384
383
|
JS
|
385
384
|
end
|
386
385
|
|
387
|
-
|
386
|
+
# @override
|
387
|
+
#: (y: String, ?color: String, ?curve: String) -> String
|
388
388
|
def line(y:, color: "strictnessColor(d.key)", curve: "curveCatmullRom.alpha(1)")
|
389
389
|
<<~JS
|
390
390
|
var area_#{id} = d3.area()
|
@@ -419,9 +419,7 @@ module Spoom
|
|
419
419
|
end
|
420
420
|
|
421
421
|
class Sigils < Stacked
|
422
|
-
|
423
|
-
|
424
|
-
sig { params(id: String, snapshots: T::Array[Snapshot]).void }
|
422
|
+
#: (String id, Array[Snapshot] snapshots) -> void
|
425
423
|
def initialize(id, snapshots)
|
426
424
|
keys = Snapshot::STRICTNESSES
|
427
425
|
data = snapshots.map do |snapshot|
|
@@ -435,7 +433,8 @@ module Spoom
|
|
435
433
|
super(id, data, keys)
|
436
434
|
end
|
437
435
|
|
438
|
-
|
436
|
+
# @override
|
437
|
+
#: -> String
|
439
438
|
def tooltip
|
440
439
|
<<~JS
|
441
440
|
function tooltip_#{id}(d) {
|
@@ -446,9 +445,7 @@ module Spoom
|
|
446
445
|
end
|
447
446
|
|
448
447
|
class Calls < Stacked
|
449
|
-
|
450
|
-
|
451
|
-
sig { params(id: String, snapshots: T::Array[Snapshot]).void }
|
448
|
+
#: (String id, Array[Snapshot] snapshots) -> void
|
452
449
|
def initialize(id, snapshots)
|
453
450
|
keys = ["false", "true"]
|
454
451
|
data = snapshots.map do |snapshot|
|
@@ -462,7 +459,8 @@ module Spoom
|
|
462
459
|
super(id, data, keys)
|
463
460
|
end
|
464
461
|
|
465
|
-
|
462
|
+
# @override
|
463
|
+
#: -> String
|
466
464
|
def tooltip
|
467
465
|
<<~JS
|
468
466
|
function tooltip_#{id}(d) {
|
@@ -473,9 +471,7 @@ module Spoom
|
|
473
471
|
end
|
474
472
|
|
475
473
|
class Sigs < Stacked
|
476
|
-
|
477
|
-
|
478
|
-
sig { params(id: String, snapshots: T::Array[Snapshot]).void }
|
474
|
+
#: (String id, Array[Snapshot] snapshots) -> void
|
479
475
|
def initialize(id, snapshots)
|
480
476
|
keys = ["false", "true"]
|
481
477
|
data = snapshots.map do |snapshot|
|
@@ -492,7 +488,8 @@ module Spoom
|
|
492
488
|
super(id, data, keys)
|
493
489
|
end
|
494
490
|
|
495
|
-
|
491
|
+
# @override
|
492
|
+
#: -> String
|
496
493
|
def tooltip
|
497
494
|
<<~JS
|
498
495
|
function tooltip_#{id}(d) {
|
@@ -503,9 +500,7 @@ module Spoom
|
|
503
500
|
end
|
504
501
|
|
505
502
|
class RBIs < Stacked
|
506
|
-
|
507
|
-
|
508
|
-
sig { params(id: String, snapshots: T::Array[Snapshot]).void }
|
503
|
+
#: (String id, Array[Snapshot] snapshots) -> void
|
509
504
|
def initialize(id, snapshots)
|
510
505
|
keys = ["rbis", "files"]
|
511
506
|
data = snapshots.map do |snapshot|
|
@@ -519,7 +514,8 @@ module Spoom
|
|
519
514
|
super(id, data, keys)
|
520
515
|
end
|
521
516
|
|
522
|
-
|
517
|
+
# @override
|
518
|
+
#: -> String
|
523
519
|
def tooltip
|
524
520
|
<<~JS
|
525
521
|
function tooltip_#{id}(d) {
|
@@ -533,7 +529,8 @@ module Spoom
|
|
533
529
|
JS
|
534
530
|
end
|
535
531
|
|
536
|
-
|
532
|
+
# @override
|
533
|
+
#: -> String
|
537
534
|
def script
|
538
535
|
<<~JS
|
539
536
|
#{tooltip}
|
@@ -573,7 +570,8 @@ module Spoom
|
|
573
570
|
JS
|
574
571
|
end
|
575
572
|
|
576
|
-
|
573
|
+
# @override
|
574
|
+
#: (y: String, ?color: String, ?curve: String) -> String
|
577
575
|
def line(y:, color: "strictnessColor(d.key)", curve: "curveCatmullRom.alpha(1)")
|
578
576
|
<<~JS
|
579
577
|
var area_#{id} = d3.area()
|
@@ -613,7 +611,8 @@ module Spoom
|
|
613
611
|
JS
|
614
612
|
end
|
615
613
|
|
616
|
-
|
614
|
+
# @override
|
615
|
+
#: -> String
|
617
616
|
def plot
|
618
617
|
<<~JS
|
619
618
|
#{x_scale}
|
data/lib/spoom/coverage/d3.rb
CHANGED
@@ -15,9 +15,7 @@ module Spoom
|
|
15
15
|
COLOR_STRONG = "#064828"
|
16
16
|
|
17
17
|
class << self
|
18
|
-
|
19
|
-
|
20
|
-
sig { returns(String) }
|
18
|
+
#: -> String
|
21
19
|
def header_style
|
22
20
|
<<~CSS
|
23
21
|
svg {
|
@@ -57,7 +55,7 @@ module Spoom
|
|
57
55
|
CSS
|
58
56
|
end
|
59
57
|
|
60
|
-
|
58
|
+
#: (ColorPalette palette) -> String
|
61
59
|
def header_script(palette)
|
62
60
|
<<~JS
|
63
61
|
var parseDate = d3.timeParse("%s");
|