spoom 1.8.4 → 1.8.6
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/Gemfile +3 -0
- data/README.md +292 -168
- data/lib/spoom/backtrace_filter/minitest.rb +1 -1
- data/lib/spoom/cli/srb/sigs.rb +5 -0
- data/lib/spoom/cli/srb/tc.rb +1 -1
- data/lib/spoom/cli.rb +1 -1
- data/lib/spoom/coverage/report.rb +6 -6
- data/lib/spoom/deadcode/erb.rb +27 -16
- data/lib/spoom/deadcode/index.rb +6 -1
- data/lib/spoom/deadcode/plugins/active_support.rb +1 -1
- data/lib/spoom/deadcode/remover.rb +60 -0
- data/lib/spoom/sorbet/errors.rb +1 -1
- data/lib/spoom/sorbet/lsp/structures.rb +1 -1
- data/lib/spoom/sorbet/metrics/code_metrics_visitor.rb +7 -0
- data/lib/spoom/sorbet/translate/rbs_comments_to_sorbet_sigs/base_translator.rb +16 -3
- data/lib/spoom/sorbet/translate/rbs_comments_to_sorbet_sigs/options.rb +10 -0
- data/lib/spoom/sorbet/translate/rbs_comments_to_sorbet_sigs.rb +5 -2
- data/lib/spoom/sorbet/translate.rb +5 -2
- data/lib/spoom/version.rb +1 -1
- data/rbi/spoom.rbi +26 -5
- metadata +3 -45
data/lib/spoom/cli/srb/sigs.rb
CHANGED
|
@@ -26,6 +26,10 @@ module Spoom
|
|
|
26
26
|
option :translate_generics, type: :boolean, desc: "Translate generics", default: false
|
|
27
27
|
option :translate_helpers, type: :boolean, desc: "Translate helpers", default: false
|
|
28
28
|
option :translate_abstract_methods, type: :boolean, desc: "Translate abstract methods", default: false
|
|
29
|
+
option :erase_generic_types,
|
|
30
|
+
type: :boolean,
|
|
31
|
+
desc: "Drop generic types when translating from RBS to RBI",
|
|
32
|
+
default: false
|
|
29
33
|
def translate(*paths)
|
|
30
34
|
from = options[:from]
|
|
31
35
|
to = options[:to]
|
|
@@ -70,6 +74,7 @@ module Spoom
|
|
|
70
74
|
contents,
|
|
71
75
|
file: file,
|
|
72
76
|
max_line_length: max_line_length,
|
|
77
|
+
erase_generic_types: options[:erase_generic_types],
|
|
73
78
|
)
|
|
74
79
|
end
|
|
75
80
|
end
|
data/lib/spoom/cli/srb/tc.rb
CHANGED
data/lib/spoom/cli.rb
CHANGED
|
@@ -79,7 +79,7 @@ module Spoom
|
|
|
79
79
|
|
|
80
80
|
SORT_CODE = "code"
|
|
81
81
|
SORT_LOC = "loc"
|
|
82
|
-
SORT_ENUM = [SORT_CODE, SORT_LOC]
|
|
82
|
+
SORT_ENUM = [SORT_CODE, SORT_LOC].freeze
|
|
83
83
|
|
|
84
84
|
desc "tc", "Run Sorbet and parses its output"
|
|
85
85
|
option :limit, type: :numeric, aliases: :l, desc: "Limit displayed errors"
|
|
@@ -26,14 +26,14 @@ module Spoom
|
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
#: -> Binding
|
|
29
|
-
def get_binding
|
|
29
|
+
def get_binding
|
|
30
30
|
binding
|
|
31
31
|
end
|
|
32
32
|
end
|
|
33
33
|
|
|
34
34
|
# @abstract
|
|
35
35
|
class Page < Template
|
|
36
|
-
TEMPLATE = "#{Spoom::SPOOM_PATH}/templates/page.erb" #: String
|
|
36
|
+
TEMPLATE = "#{Spoom::SPOOM_PATH}/templates/page.erb".freeze #: String
|
|
37
37
|
|
|
38
38
|
#: String
|
|
39
39
|
attr_reader :title
|
|
@@ -80,7 +80,7 @@ module Spoom
|
|
|
80
80
|
|
|
81
81
|
module Cards
|
|
82
82
|
class Card < Template
|
|
83
|
-
TEMPLATE = "#{Spoom::SPOOM_PATH}/templates/card.erb" #: String
|
|
83
|
+
TEMPLATE = "#{Spoom::SPOOM_PATH}/templates/card.erb".freeze #: String
|
|
84
84
|
|
|
85
85
|
#: String?
|
|
86
86
|
attr_reader :title, :body
|
|
@@ -96,7 +96,7 @@ module Spoom
|
|
|
96
96
|
# @abstract
|
|
97
97
|
class Erb < Card
|
|
98
98
|
#: -> void
|
|
99
|
-
def initialize; end
|
|
99
|
+
def initialize; end
|
|
100
100
|
|
|
101
101
|
# @override
|
|
102
102
|
#: -> String
|
|
@@ -110,7 +110,7 @@ module Spoom
|
|
|
110
110
|
end
|
|
111
111
|
|
|
112
112
|
class Snapshot < Card
|
|
113
|
-
TEMPLATE = "#{Spoom::SPOOM_PATH}/templates/card_snapshot.erb" #: String
|
|
113
|
+
TEMPLATE = "#{Spoom::SPOOM_PATH}/templates/card_snapshot.erb".freeze #: String
|
|
114
114
|
|
|
115
115
|
#: Coverage::Snapshot
|
|
116
116
|
attr_reader :snapshot
|
|
@@ -208,7 +208,7 @@ module Spoom
|
|
|
208
208
|
|
|
209
209
|
class SorbetIntro < Erb
|
|
210
210
|
#: (?sorbet_intro_commit: String?, ?sorbet_intro_date: Time?) -> void
|
|
211
|
-
def initialize(sorbet_intro_commit: nil, sorbet_intro_date: nil)
|
|
211
|
+
def initialize(sorbet_intro_commit: nil, sorbet_intro_date: nil)
|
|
212
212
|
@sorbet_intro_commit = sorbet_intro_commit
|
|
213
213
|
@sorbet_intro_date = sorbet_intro_date
|
|
214
214
|
end
|
data/lib/spoom/deadcode/erb.rb
CHANGED
|
@@ -40,6 +40,15 @@ module Spoom
|
|
|
40
40
|
super
|
|
41
41
|
end
|
|
42
42
|
|
|
43
|
+
#: -> String
|
|
44
|
+
def wrapped_src
|
|
45
|
+
<<~RUBY
|
|
46
|
+
def __spoom_deadcode_erb_template__
|
|
47
|
+
#{src}
|
|
48
|
+
end
|
|
49
|
+
RUBY
|
|
50
|
+
end
|
|
51
|
+
|
|
43
52
|
private
|
|
44
53
|
|
|
45
54
|
# @override
|
|
@@ -50,32 +59,34 @@ module Spoom
|
|
|
50
59
|
if text == "\n"
|
|
51
60
|
@newline_pending += 1
|
|
52
61
|
else
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
62
|
+
with_buffer do
|
|
63
|
+
src << ".safe_append='"
|
|
64
|
+
src << "\n" * @newline_pending if @newline_pending > 0
|
|
65
|
+
src << text.gsub(/['\\]/, '\\\\\&') << @text_end
|
|
66
|
+
end
|
|
58
67
|
@newline_pending = 0
|
|
59
68
|
end
|
|
60
69
|
end
|
|
61
70
|
|
|
62
|
-
BLOCK_EXPR =
|
|
71
|
+
BLOCK_EXPR = /((\s|\))do|\{)(\s*\|[^|]*\|)?\s*\Z/
|
|
63
72
|
|
|
64
73
|
# @override
|
|
65
74
|
#: (untyped indicator, untyped code) -> void
|
|
66
75
|
def add_expression(indicator, code)
|
|
67
76
|
flush_newline_if_pending(src)
|
|
68
77
|
|
|
69
|
-
|
|
70
|
-
"
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
78
|
+
with_buffer do
|
|
79
|
+
src << if (indicator == "==") || @escape
|
|
80
|
+
".safe_expr_append="
|
|
81
|
+
else
|
|
82
|
+
".append="
|
|
83
|
+
end
|
|
74
84
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
85
|
+
if BLOCK_EXPR.match?(code)
|
|
86
|
+
src << " " << code
|
|
87
|
+
else
|
|
88
|
+
src << "(" << code << ")"
|
|
89
|
+
end
|
|
79
90
|
end
|
|
80
91
|
end
|
|
81
92
|
|
|
@@ -96,7 +107,7 @@ module Spoom
|
|
|
96
107
|
#: (untyped src) -> void
|
|
97
108
|
def flush_newline_if_pending(src)
|
|
98
109
|
if @newline_pending > 0
|
|
99
|
-
|
|
110
|
+
with_buffer { src << ".safe_append='#{"\n" * @newline_pending}" << @text_end }
|
|
100
111
|
@newline_pending = 0
|
|
101
112
|
end
|
|
102
113
|
end
|
data/lib/spoom/deadcode/index.rb
CHANGED
|
@@ -44,7 +44,7 @@ module Spoom
|
|
|
44
44
|
|
|
45
45
|
#: (String erb, file: String, ?plugins: Array[Plugins::Base]) -> void
|
|
46
46
|
def index_erb(erb, file:, plugins: [])
|
|
47
|
-
index_ruby(Deadcode::ERB.new(erb).
|
|
47
|
+
index_ruby(Deadcode::ERB.new(erb).wrapped_src, file: file, plugins: plugins)
|
|
48
48
|
end
|
|
49
49
|
|
|
50
50
|
#: (String rb, file: String, ?plugins: Array[Plugins::Base]) -> void
|
|
@@ -55,6 +55,11 @@ module Spoom
|
|
|
55
55
|
model_builder = Model::Builder.new(@model, file)
|
|
56
56
|
model_builder.visit(node)
|
|
57
57
|
|
|
58
|
+
# Ignore the special synthetic method generated by the ERB engine
|
|
59
|
+
if (spoom_erb_wrapper = @model.symbols["__spoom_deadcode_erb_template__"])
|
|
60
|
+
@ignored.merge(spoom_erb_wrapper.definitions)
|
|
61
|
+
end
|
|
62
|
+
|
|
58
63
|
# Index references
|
|
59
64
|
refs_visitor = Model::ReferencesVisitor.new(file)
|
|
60
65
|
refs_visitor.visit(node)
|
|
@@ -117,6 +117,7 @@ module Spoom
|
|
|
117
117
|
Prism::ConstantPathAndWriteNode, Prism::ConstantPathOrWriteNode
|
|
118
118
|
# Nesting node is an assign, it means only one constant is assigned on the line
|
|
119
119
|
# so we can remove the whole assign
|
|
120
|
+
remove_constant_visibility_call(context)
|
|
120
121
|
delete_node_and_comments_and_sigs(context)
|
|
121
122
|
return
|
|
122
123
|
end
|
|
@@ -127,6 +128,7 @@ module Spoom
|
|
|
127
128
|
if parent_node.is_a?(Prism::ConstantWriteNode)
|
|
128
129
|
# Nesting node is an assign, it means only one constant is assigned on the line
|
|
129
130
|
# so we can remove the whole assign
|
|
131
|
+
remove_constant_visibility_call(parent_context)
|
|
130
132
|
delete_node_and_comments_and_sigs(parent_context)
|
|
131
133
|
return
|
|
132
134
|
elsif parent_node.is_a?(Prism::MultiWriteNode) && parent_node.lefts.size == 1
|
|
@@ -190,6 +192,64 @@ module Spoom
|
|
|
190
192
|
end
|
|
191
193
|
end
|
|
192
194
|
|
|
195
|
+
# A dead constant is often followed by a `private_constant`/`public_constant` call naming it.
|
|
196
|
+
# That call references the now-removed constant (a load-time `NameError` if left behind), so
|
|
197
|
+
# remove the reference too: delete the whole call when the constant is its only argument, or
|
|
198
|
+
# drop just that symbol when the call lists several constants.
|
|
199
|
+
#: (NodeContext context) -> void
|
|
200
|
+
def remove_constant_visibility_call(context)
|
|
201
|
+
node = context.node
|
|
202
|
+
return unless node.is_a?(Prism::ConstantWriteNode)
|
|
203
|
+
|
|
204
|
+
name = node.name
|
|
205
|
+
call = context.next_nodes.find { |sibling| constant_visibility_call?(sibling, name) }
|
|
206
|
+
return unless call.is_a?(Prism::CallNode)
|
|
207
|
+
|
|
208
|
+
call_context = NodeContext.new(@old_source, @node_context.comments, call, context.nesting)
|
|
209
|
+
arguments = call.arguments&.arguments #: Array[Prism::Node]?
|
|
210
|
+
if arguments && arguments.size > 1
|
|
211
|
+
delete_symbol_argument(call_context, name)
|
|
212
|
+
else
|
|
213
|
+
delete_node_and_comments_and_sigs(call_context)
|
|
214
|
+
end
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
# Whether `node` is a bare `private_constant`/`public_constant` call listing `name`.
|
|
218
|
+
#: (Prism::Node node, Symbol name) -> bool
|
|
219
|
+
def constant_visibility_call?(node, name)
|
|
220
|
+
return false unless node.is_a?(Prism::CallNode)
|
|
221
|
+
return false unless node.receiver.nil?
|
|
222
|
+
return false unless node.name == :private_constant || node.name == :public_constant
|
|
223
|
+
|
|
224
|
+
arguments = node.arguments&.arguments
|
|
225
|
+
return false unless arguments
|
|
226
|
+
|
|
227
|
+
arguments.any? { |argument| argument.is_a?(Prism::SymbolNode) && argument.value == name.to_s }
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
# Drop the `:name` symbol from a `private_constant`/`public_constant` call that lists several
|
|
231
|
+
# constants, keeping the call and the other names intact.
|
|
232
|
+
#: (NodeContext context, Symbol name) -> void
|
|
233
|
+
def delete_symbol_argument(context, name)
|
|
234
|
+
arguments = T.cast(context.node, Prism::CallNode).arguments&.arguments
|
|
235
|
+
return unless arguments
|
|
236
|
+
|
|
237
|
+
index = arguments.index { |argument| argument.is_a?(Prism::SymbolNode) && argument.value == name.to_s }
|
|
238
|
+
return unless index
|
|
239
|
+
|
|
240
|
+
argument = arguments.fetch(index)
|
|
241
|
+
prev_argument = arguments[index - 1] if index.positive?
|
|
242
|
+
next_argument = arguments[index + 1]
|
|
243
|
+
|
|
244
|
+
if prev_argument && next_argument
|
|
245
|
+
replace_chars(prev_argument.location.end_offset, next_argument.location.start_offset, ", ")
|
|
246
|
+
elsif prev_argument
|
|
247
|
+
delete_chars(prev_argument.location.end_offset, argument.location.end_offset)
|
|
248
|
+
elsif next_argument
|
|
249
|
+
delete_chars(argument.location.start_offset, next_argument.location.start_offset)
|
|
250
|
+
end
|
|
251
|
+
end
|
|
252
|
+
|
|
193
253
|
#: (NodeContext context) -> void
|
|
194
254
|
def delete_attr_accessor(context)
|
|
195
255
|
args_context = context.parent_context
|
data/lib/spoom/sorbet/errors.rb
CHANGED
|
@@ -53,7 +53,7 @@ module Spoom
|
|
|
53
53
|
"Check out the README to learn how to build Sorbet in release mode.",
|
|
54
54
|
"To forcibly silence this error, either pass --silence-dev-message,",
|
|
55
55
|
"or set SORBET_SILENCE_DEV_MESSAGE=1 in your shell environment.",
|
|
56
|
-
] #: Array[String]
|
|
56
|
+
].freeze #: Array[String]
|
|
57
57
|
|
|
58
58
|
class << self
|
|
59
59
|
# Used when only Sorbet errors are needed and leading stderr warnings can be ignored.
|
|
@@ -73,6 +73,13 @@ module Spoom
|
|
|
73
73
|
# @override
|
|
74
74
|
#: (Prism::ClassNode) -> void
|
|
75
75
|
def visit_class_node(node)
|
|
76
|
+
case node.superclass&.slice
|
|
77
|
+
when /^(::)?T::Struct$/
|
|
78
|
+
@counters.increment("t_structs")
|
|
79
|
+
when /^(::)?T::Enum$/
|
|
80
|
+
@counters.increment("t_enums")
|
|
81
|
+
end
|
|
82
|
+
|
|
76
83
|
visit_scope(node) do
|
|
77
84
|
super
|
|
78
85
|
end
|
|
@@ -26,7 +26,8 @@ module Spoom
|
|
|
26
26
|
|
|
27
27
|
@overloads_strategy = options.overloads_strategy #: Symbol
|
|
28
28
|
@translate_abstract_methods = options.translate_abstract_methods #: bool
|
|
29
|
-
@
|
|
29
|
+
@options = options #: Options
|
|
30
|
+
@type_translator = RBI::RBS::TypeTranslator.new(options: options.rbi_options) #: RBI::RBS::TypeTranslator
|
|
30
31
|
end
|
|
31
32
|
|
|
32
33
|
# @override
|
|
@@ -163,7 +164,7 @@ module Spoom
|
|
|
163
164
|
next
|
|
164
165
|
end
|
|
165
166
|
|
|
166
|
-
translator = RBI::RBS::MethodTypeTranslator.new(rbi_node)
|
|
167
|
+
translator = RBI::RBS::MethodTypeTranslator.new(rbi_node, options: @options.rbi_options)
|
|
167
168
|
|
|
168
169
|
begin
|
|
169
170
|
translator.visit(method_type)
|
|
@@ -273,6 +274,18 @@ module Spoom
|
|
|
273
274
|
rewrite_type_params_signature(signature, type_params:)
|
|
274
275
|
next if type_params.empty?
|
|
275
276
|
|
|
277
|
+
if @options.erase_generic_types
|
|
278
|
+
type_params.each do |type_param|
|
|
279
|
+
insert_type_member(
|
|
280
|
+
"#{type_param.name} = ::T.type_alias { ::T.anything }",
|
|
281
|
+
parent_node: node,
|
|
282
|
+
insert_pos:,
|
|
283
|
+
)
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
next
|
|
287
|
+
end
|
|
288
|
+
|
|
276
289
|
unless already_extends?(node, /^(::)?T::Generic$/)
|
|
277
290
|
extend_with("T::Generic", into: node, at: insert_pos)
|
|
278
291
|
end
|
|
@@ -462,7 +475,7 @@ module Spoom
|
|
|
462
475
|
)
|
|
463
476
|
|
|
464
477
|
@rewriter << Source::Delete.new(from, to)
|
|
465
|
-
content = "#{indent}#{alias_name} = T.type_alias { #{sorbet_type.to_rbi} }\n"
|
|
478
|
+
content = "#{indent}#{alias_name} = ::T.type_alias { #{sorbet_type.to_rbi} }\n"
|
|
466
479
|
content = pad_out_line_count(of: content, to_height_of: type_alias)
|
|
467
480
|
@rewriter << Source::Insert.new(insert_pos, content)
|
|
468
481
|
rescue ::RBS::ParsingError, ::RBI::Error
|
|
@@ -44,6 +44,12 @@ module Spoom
|
|
|
44
44
|
|
|
45
45
|
ALLOWED_OVERLOAD_STRATEGIES = [:translate_all, :translate_last, :raise].freeze
|
|
46
46
|
|
|
47
|
+
#: bool
|
|
48
|
+
attr_reader :erase_generic_types
|
|
49
|
+
|
|
50
|
+
#: RBI::RBS::MethodTypeTranslator::Options
|
|
51
|
+
attr_reader :rbi_options
|
|
52
|
+
|
|
47
53
|
#: BaseRBIFormat
|
|
48
54
|
attr_reader :output_format
|
|
49
55
|
|
|
@@ -52,11 +58,13 @@ module Spoom
|
|
|
52
58
|
|
|
53
59
|
#: (
|
|
54
60
|
#| ?overloads_strategy: Symbol,
|
|
61
|
+
#| ?erase_generic_types: bool,
|
|
55
62
|
#| ?output_format: BaseRBIFormat,
|
|
56
63
|
#| ?translate_abstract_methods: bool,
|
|
57
64
|
#| ) -> void
|
|
58
65
|
def initialize(
|
|
59
66
|
overloads_strategy: :translate_all,
|
|
67
|
+
erase_generic_types: false,
|
|
60
68
|
output_format: HumanReadableRBIFormat.default,
|
|
61
69
|
translate_abstract_methods: true
|
|
62
70
|
)
|
|
@@ -66,6 +74,8 @@ module Spoom
|
|
|
66
74
|
end
|
|
67
75
|
|
|
68
76
|
@overloads_strategy = overloads_strategy
|
|
77
|
+
@erase_generic_types = erase_generic_types
|
|
78
|
+
@rbi_options = RBI::RBS::MethodTypeTranslator::Options.new(erase_generic_types:) #: RBI::RBS::MethodTypeTranslator::Options
|
|
69
79
|
@output_format = output_format
|
|
70
80
|
@translate_abstract_methods = translate_abstract_methods
|
|
71
81
|
|
|
@@ -28,17 +28,20 @@ module Spoom
|
|
|
28
28
|
#| String ruby_contents,
|
|
29
29
|
#| file: String,
|
|
30
30
|
#| ?max_line_length: Integer?,
|
|
31
|
-
#| ?overloads_strategy: Symbol
|
|
31
|
+
#| ?overloads_strategy: Symbol,
|
|
32
|
+
#| ?erase_generic_types: bool) -> String
|
|
32
33
|
def rewrite_if_needed(
|
|
33
34
|
ruby_contents,
|
|
34
35
|
file:,
|
|
35
36
|
max_line_length: nil,
|
|
36
|
-
overloads_strategy: :translate_all
|
|
37
|
+
overloads_strategy: :translate_all,
|
|
38
|
+
erase_generic_types: false
|
|
37
39
|
)
|
|
38
40
|
return ruby_contents unless contains_rbs_syntax?(ruby_contents)
|
|
39
41
|
|
|
40
42
|
options = Options.new(
|
|
41
43
|
overloads_strategy:,
|
|
44
|
+
erase_generic_types:,
|
|
42
45
|
output_format: HumanReadableRBIFormat.new(
|
|
43
46
|
max_line_length:,
|
|
44
47
|
),
|
|
@@ -59,13 +59,16 @@ module Spoom
|
|
|
59
59
|
|
|
60
60
|
# Converts all the RBS comments in the given Ruby code to `sig` nodes.
|
|
61
61
|
# It also handles type members and class annotations.
|
|
62
|
-
#: (String ruby_contents, file: String, ?max_line_length: Integer?,
|
|
63
|
-
|
|
62
|
+
#: (String ruby_contents, file: String, ?max_line_length: Integer?,
|
|
63
|
+
#| ?overloads_strategy: Symbol, ?erase_generic_types: bool) -> String
|
|
64
|
+
def rbs_comments_to_sorbet_sigs(ruby_contents, file:, max_line_length: nil, overloads_strategy: :translate_all,
|
|
65
|
+
erase_generic_types: false)
|
|
64
66
|
RBSCommentsToSorbetSigs.rewrite_if_needed(
|
|
65
67
|
ruby_contents,
|
|
66
68
|
file: file,
|
|
67
69
|
max_line_length: max_line_length,
|
|
68
70
|
overloads_strategy: overloads_strategy,
|
|
71
|
+
erase_generic_types: erase_generic_types,
|
|
69
72
|
)
|
|
70
73
|
end
|
|
71
74
|
|
data/lib/spoom/version.rb
CHANGED
data/rbi/spoom.rbi
CHANGED
|
@@ -1024,6 +1024,9 @@ class Spoom::Deadcode::ERB < ::Erubi::Engine
|
|
|
1024
1024
|
sig { params(input: T.untyped, properties: T.untyped).void }
|
|
1025
1025
|
def initialize(input, properties = T.unsafe(nil)); end
|
|
1026
1026
|
|
|
1027
|
+
sig { returns(::String) }
|
|
1028
|
+
def wrapped_src; end
|
|
1029
|
+
|
|
1027
1030
|
private
|
|
1028
1031
|
|
|
1029
1032
|
sig { override.params(code: T.untyped).void }
|
|
@@ -1497,6 +1500,9 @@ class Spoom::Deadcode::Remover::NodeRemover
|
|
|
1497
1500
|
|
|
1498
1501
|
private
|
|
1499
1502
|
|
|
1503
|
+
sig { params(node: ::Prism::Node, name: ::Symbol).returns(T::Boolean) }
|
|
1504
|
+
def constant_visibility_call?(node, name); end
|
|
1505
|
+
|
|
1500
1506
|
sig { params(context: ::Spoom::Deadcode::Remover::NodeContext).void }
|
|
1501
1507
|
def delete_attr_accessor(context); end
|
|
1502
1508
|
|
|
@@ -1512,6 +1518,9 @@ class Spoom::Deadcode::Remover::NodeRemover
|
|
|
1512
1518
|
sig { params(context: ::Spoom::Deadcode::Remover::NodeContext).void }
|
|
1513
1519
|
def delete_node_and_comments_and_sigs(context); end
|
|
1514
1520
|
|
|
1521
|
+
sig { params(context: ::Spoom::Deadcode::Remover::NodeContext, name: ::Symbol).void }
|
|
1522
|
+
def delete_symbol_argument(context, name); end
|
|
1523
|
+
|
|
1515
1524
|
sig do
|
|
1516
1525
|
params(
|
|
1517
1526
|
node: ::Prism::Node,
|
|
@@ -1524,6 +1533,9 @@ class Spoom::Deadcode::Remover::NodeRemover
|
|
|
1524
1533
|
sig { params(def_node: ::Prism::DefNode).returns(T.nilable(::Spoom::Deadcode::Remover::NodeContext)) }
|
|
1525
1534
|
def modifier_call_context(def_node); end
|
|
1526
1535
|
|
|
1536
|
+
sig { params(context: ::Spoom::Deadcode::Remover::NodeContext).void }
|
|
1537
|
+
def remove_constant_visibility_call(context); end
|
|
1538
|
+
|
|
1527
1539
|
sig { params(start_char: ::Integer, end_char: ::Integer, replacement: ::String).void }
|
|
1528
1540
|
def replace_chars(start_char, end_char, replacement); end
|
|
1529
1541
|
|
|
@@ -2926,10 +2938,11 @@ module Spoom::Sorbet::Translate
|
|
|
2926
2938
|
ruby_contents: ::String,
|
|
2927
2939
|
file: ::String,
|
|
2928
2940
|
max_line_length: T.nilable(::Integer),
|
|
2929
|
-
overloads_strategy: ::Symbol
|
|
2941
|
+
overloads_strategy: ::Symbol,
|
|
2942
|
+
erase_generic_types: T::Boolean
|
|
2930
2943
|
).returns(::String)
|
|
2931
2944
|
end
|
|
2932
|
-
def rbs_comments_to_sorbet_sigs(ruby_contents, file:, max_line_length: T.unsafe(nil), overloads_strategy: T.unsafe(nil)); end
|
|
2945
|
+
def rbs_comments_to_sorbet_sigs(ruby_contents, file:, max_line_length: T.unsafe(nil), overloads_strategy: T.unsafe(nil), erase_generic_types: T.unsafe(nil)); end
|
|
2933
2946
|
|
|
2934
2947
|
sig do
|
|
2935
2948
|
params(
|
|
@@ -3008,10 +3021,11 @@ module Spoom::Sorbet::Translate::RBSCommentsToSorbetSigs
|
|
|
3008
3021
|
ruby_contents: ::String,
|
|
3009
3022
|
file: ::String,
|
|
3010
3023
|
max_line_length: T.nilable(::Integer),
|
|
3011
|
-
overloads_strategy: ::Symbol
|
|
3024
|
+
overloads_strategy: ::Symbol,
|
|
3025
|
+
erase_generic_types: T::Boolean
|
|
3012
3026
|
).returns(::String)
|
|
3013
3027
|
end
|
|
3014
|
-
def rewrite_if_needed(ruby_contents, file:, max_line_length: T.unsafe(nil), overloads_strategy: T.unsafe(nil)); end
|
|
3028
|
+
def rewrite_if_needed(ruby_contents, file:, max_line_length: T.unsafe(nil), overloads_strategy: T.unsafe(nil), erase_generic_types: T.unsafe(nil)); end
|
|
3015
3029
|
end
|
|
3016
3030
|
end
|
|
3017
3031
|
|
|
@@ -3238,11 +3252,15 @@ class Spoom::Sorbet::Translate::RBSCommentsToSorbetSigs::Options
|
|
|
3238
3252
|
sig do
|
|
3239
3253
|
params(
|
|
3240
3254
|
overloads_strategy: ::Symbol,
|
|
3255
|
+
erase_generic_types: T::Boolean,
|
|
3241
3256
|
output_format: ::Spoom::Sorbet::Translate::RBSCommentsToSorbetSigs::BaseRBIFormat,
|
|
3242
3257
|
translate_abstract_methods: T::Boolean
|
|
3243
3258
|
).void
|
|
3244
3259
|
end
|
|
3245
|
-
def initialize(overloads_strategy: T.unsafe(nil), output_format: T.unsafe(nil), translate_abstract_methods: T.unsafe(nil)); end
|
|
3260
|
+
def initialize(overloads_strategy: T.unsafe(nil), erase_generic_types: T.unsafe(nil), output_format: T.unsafe(nil), translate_abstract_methods: T.unsafe(nil)); end
|
|
3261
|
+
|
|
3262
|
+
sig { returns(T::Boolean) }
|
|
3263
|
+
def erase_generic_types; end
|
|
3246
3264
|
|
|
3247
3265
|
sig { returns(::Spoom::Sorbet::Translate::RBSCommentsToSorbetSigs::BaseRBIFormat) }
|
|
3248
3266
|
def output_format; end
|
|
@@ -3250,6 +3268,9 @@ class Spoom::Sorbet::Translate::RBSCommentsToSorbetSigs::Options
|
|
|
3250
3268
|
sig { returns(::Symbol) }
|
|
3251
3269
|
def overloads_strategy; end
|
|
3252
3270
|
|
|
3271
|
+
sig { returns(::RBI::RBS::MethodTypeTranslator::Options) }
|
|
3272
|
+
def rbi_options; end
|
|
3273
|
+
|
|
3253
3274
|
sig { returns(T::Boolean) }
|
|
3254
3275
|
def translate_abstract_methods; end
|
|
3255
3276
|
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: spoom
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.8.
|
|
4
|
+
version: 1.8.6
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Alexandre Terrasa
|
|
@@ -9,48 +9,6 @@ bindir: exe
|
|
|
9
9
|
cert_chain: []
|
|
10
10
|
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
11
|
dependencies:
|
|
12
|
-
- !ruby/object:Gem::Dependency
|
|
13
|
-
name: bundler
|
|
14
|
-
requirement: !ruby/object:Gem::Requirement
|
|
15
|
-
requirements:
|
|
16
|
-
- - ">="
|
|
17
|
-
- !ruby/object:Gem::Version
|
|
18
|
-
version: 2.2.10
|
|
19
|
-
type: :development
|
|
20
|
-
prerelease: false
|
|
21
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
-
requirements:
|
|
23
|
-
- - ">="
|
|
24
|
-
- !ruby/object:Gem::Version
|
|
25
|
-
version: 2.2.10
|
|
26
|
-
- !ruby/object:Gem::Dependency
|
|
27
|
-
name: minitest-reporters
|
|
28
|
-
requirement: !ruby/object:Gem::Requirement
|
|
29
|
-
requirements:
|
|
30
|
-
- - ">="
|
|
31
|
-
- !ruby/object:Gem::Version
|
|
32
|
-
version: '0'
|
|
33
|
-
type: :development
|
|
34
|
-
prerelease: false
|
|
35
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
-
requirements:
|
|
37
|
-
- - ">="
|
|
38
|
-
- !ruby/object:Gem::Version
|
|
39
|
-
version: '0'
|
|
40
|
-
- !ruby/object:Gem::Dependency
|
|
41
|
-
name: rake
|
|
42
|
-
requirement: !ruby/object:Gem::Requirement
|
|
43
|
-
requirements:
|
|
44
|
-
- - "~>"
|
|
45
|
-
- !ruby/object:Gem::Version
|
|
46
|
-
version: 13.4.2
|
|
47
|
-
type: :development
|
|
48
|
-
prerelease: false
|
|
49
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
50
|
-
requirements:
|
|
51
|
-
- - "~>"
|
|
52
|
-
- !ruby/object:Gem::Version
|
|
53
|
-
version: 13.4.2
|
|
54
12
|
- !ruby/object:Gem::Dependency
|
|
55
13
|
name: erubi
|
|
56
14
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -85,14 +43,14 @@ dependencies:
|
|
|
85
43
|
requirements:
|
|
86
44
|
- - ">="
|
|
87
45
|
- !ruby/object:Gem::Version
|
|
88
|
-
version: 0.
|
|
46
|
+
version: 0.4.1
|
|
89
47
|
type: :runtime
|
|
90
48
|
prerelease: false
|
|
91
49
|
version_requirements: !ruby/object:Gem::Requirement
|
|
92
50
|
requirements:
|
|
93
51
|
- - ">="
|
|
94
52
|
- !ruby/object:Gem::Version
|
|
95
|
-
version: 0.
|
|
53
|
+
version: 0.4.1
|
|
96
54
|
- !ruby/object:Gem::Dependency
|
|
97
55
|
name: rbs
|
|
98
56
|
requirement: !ruby/object:Gem::Requirement
|