steep 1.8.0.dev.2 → 1.8.0.pre.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/CHANGELOG.md +39 -0
- data/bin/mem_graph.rb +67 -0
- data/bin/mem_prof.rb +102 -0
- data/bin/stackprof_test.rb +19 -0
- data/bin/steep-check.rb +251 -0
- data/lib/steep/annotation_parser.rb +1 -1
- data/lib/steep/ast/builtin.rb +5 -5
- data/lib/steep/ast/node/type_application.rb +7 -6
- data/lib/steep/ast/types/any.rb +1 -9
- data/lib/steep/ast/types/boolean.rb +8 -16
- data/lib/steep/ast/types/bot.rb +2 -10
- data/lib/steep/ast/types/class.rb +1 -13
- data/lib/steep/ast/types/factory.rb +101 -85
- data/lib/steep/ast/types/instance.rb +1 -13
- data/lib/steep/ast/types/intersection.rb +8 -15
- data/lib/steep/ast/types/literal.rb +2 -8
- data/lib/steep/ast/types/logic.rb +3 -24
- data/lib/steep/ast/types/name.rb +5 -16
- data/lib/steep/ast/types/nil.rb +3 -12
- data/lib/steep/ast/types/proc.rb +4 -13
- data/lib/steep/ast/types/record.rb +22 -13
- data/lib/steep/ast/types/self.rb +1 -13
- data/lib/steep/ast/types/shared_instance.rb +11 -0
- data/lib/steep/ast/types/top.rb +1 -9
- data/lib/steep/ast/types/tuple.rb +4 -10
- data/lib/steep/ast/types/union.rb +10 -15
- data/lib/steep/ast/types/var.rb +4 -13
- data/lib/steep/ast/types/void.rb +2 -10
- data/lib/steep/diagnostic/ruby.rb +4 -4
- data/lib/steep/drivers/check.rb +11 -14
- data/lib/steep/drivers/checkfile.rb +8 -10
- data/lib/steep/drivers/stats.rb +17 -13
- data/lib/steep/drivers/utils/driver_helper.rb +24 -3
- data/lib/steep/drivers/watch.rb +3 -3
- data/lib/steep/interface/builder.rb +162 -138
- data/lib/steep/interface/method_type.rb +12 -20
- data/lib/steep/interface/shape.rb +66 -10
- data/lib/steep/interface/substitution.rb +2 -0
- data/lib/steep/interface/type_param.rb +20 -7
- data/lib/steep/located_value.rb +20 -0
- data/lib/steep/server/change_buffer.rb +5 -7
- data/lib/steep/server/custom_methods.rb +61 -0
- data/lib/steep/server/delay_queue.rb +8 -1
- data/lib/steep/server/interaction_worker.rb +10 -5
- data/lib/steep/server/lsp_formatter.rb +8 -6
- data/lib/steep/server/master.rb +193 -140
- data/lib/steep/server/type_check_worker.rb +18 -19
- data/lib/steep/server/work_done_progress.rb +64 -0
- data/lib/steep/services/completion_provider.rb +24 -22
- data/lib/steep/services/goto_service.rb +3 -2
- data/lib/steep/services/hover_provider/ruby.rb +7 -6
- data/lib/steep/services/signature_help_provider.rb +7 -6
- data/lib/steep/services/signature_service.rb +1 -1
- data/lib/steep/services/type_check_service.rb +3 -3
- data/lib/steep/signature/validator.rb +17 -20
- data/lib/steep/subtyping/check.rb +105 -55
- data/lib/steep/subtyping/constraints.rb +11 -15
- data/lib/steep/type_construction.rb +101 -101
- data/lib/steep/type_inference/block_params.rb +6 -6
- data/lib/steep/type_inference/logic_type_interpreter.rb +11 -7
- data/lib/steep/type_inference/method_call.rb +3 -3
- data/lib/steep/type_inference/method_params.rb +1 -1
- data/lib/steep/type_inference/send_args.rb +1 -1
- data/lib/steep/typing.rb +158 -102
- data/lib/steep/version.rb +1 -1
- data/lib/steep.rb +28 -3
- data/steep.gemspec +2 -2
- metadata +15 -8
- data/lib/steep/type_inference/context_array.rb +0 -112
@@ -36,22 +36,22 @@ module Steep
|
|
36
36
|
method = node.children[1]
|
37
37
|
case method
|
38
38
|
when :is_a?, :kind_of?, :instance_of?
|
39
|
-
AST::Types::Logic::ReceiverIsArg.
|
39
|
+
AST::Types::Logic::ReceiverIsArg.instance
|
40
40
|
when :nil?
|
41
|
-
AST::Types::Logic::ReceiverIsNil.
|
41
|
+
AST::Types::Logic::ReceiverIsNil.instance
|
42
42
|
when :!
|
43
|
-
AST::Types::Logic::Not.
|
43
|
+
AST::Types::Logic::Not.instance
|
44
44
|
when :===
|
45
|
-
AST::Types::Logic::ArgIsReceiver.
|
45
|
+
AST::Types::Logic::ArgIsReceiver.instance
|
46
46
|
end
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
50
|
TRUE = AST::Types::Literal.new(value: true)
|
51
51
|
FALSE = AST::Types::Literal.new(value: false)
|
52
|
-
BOOL = AST::Types::Boolean.
|
53
|
-
BOT = AST::Types::Bot.
|
54
|
-
UNTYPED = AST::Types::Any.
|
52
|
+
BOOL = AST::Types::Boolean.instance
|
53
|
+
BOT = AST::Types::Bot.instance
|
54
|
+
UNTYPED = AST::Types::Any.instance
|
55
55
|
|
56
56
|
def eval(env:, node:)
|
57
57
|
evaluate_node(env: env, node: node)
|
@@ -77,6 +77,10 @@ module Steep
|
|
77
77
|
]
|
78
78
|
end
|
79
79
|
|
80
|
+
if type.is_a?(AST::Types::Var)
|
81
|
+
type = config.upper_bound(type.name) || type
|
82
|
+
end
|
83
|
+
|
80
84
|
case node.type
|
81
85
|
when :lvar
|
82
86
|
name = node.children[0]
|
@@ -165,7 +165,7 @@ module Steep
|
|
165
165
|
|
166
166
|
class Untyped < Base
|
167
167
|
def initialize(node:, context:, method_name:)
|
168
|
-
super(node: node, context: context, method_name: method_name, receiver_type: AST::Types::Any.
|
168
|
+
super(node: node, context: context, method_name: method_name, receiver_type: AST::Types::Any.instance, return_type: AST::Types::Any.instance)
|
169
169
|
end
|
170
170
|
end
|
171
171
|
|
@@ -173,7 +173,7 @@ module Steep
|
|
173
173
|
attr_reader :error
|
174
174
|
|
175
175
|
def initialize(node:, context:, method_name:, receiver_type:, error:)
|
176
|
-
super(node: node, context: context, method_name: method_name, receiver_type: receiver_type, return_type: AST::Types::Any.
|
176
|
+
super(node: node, context: context, method_name: method_name, receiver_type: receiver_type, return_type: AST::Types::Any.instance)
|
177
177
|
@error = error
|
178
178
|
end
|
179
179
|
end
|
@@ -182,7 +182,7 @@ module Steep
|
|
182
182
|
attr_reader :errors
|
183
183
|
attr_reader :method_decls
|
184
184
|
|
185
|
-
def initialize(node:, context:, method_name:, receiver_type:, errors:, method_decls: Set[], return_type: AST::Types::Any.
|
185
|
+
def initialize(node:, context:, method_name:, receiver_type:, errors:, method_decls: Set[], return_type: AST::Types::Any.instance)
|
186
186
|
super(node: node, context: context, method_name: method_name, receiver_type: receiver_type, return_type: return_type)
|
187
187
|
@method_decls = method_decls
|
188
188
|
@errors = errors
|
@@ -114,7 +114,7 @@ module Steep
|
|
114
114
|
proc_type = AST::Types::Proc.new(type: type, block: nil, self_type: self_type)
|
115
115
|
|
116
116
|
if optional?
|
117
|
-
AST::Types::Union.build(types: [proc_type, AST::Builtin.nil_type]
|
117
|
+
AST::Types::Union.build(types: [proc_type, AST::Builtin.nil_type])
|
118
118
|
else
|
119
119
|
proc_type
|
120
120
|
end
|
@@ -656,7 +656,7 @@ module Steep
|
|
656
656
|
errors << ts
|
657
657
|
when Array
|
658
658
|
pairs = keys.zip(ts) #: Array[[Symbol, AST::Types::t]]
|
659
|
-
record = AST::Types::Record.new(elements: Hash[pairs])
|
659
|
+
record = AST::Types::Record.new(elements: Hash[pairs], required_keys: Set.new(keys))
|
660
660
|
yield KeywordArgs::ArgTypePairs.new(pairs: [[a.node, record]])
|
661
661
|
end
|
662
662
|
else
|
data/lib/steep/typing.rb
CHANGED
@@ -11,6 +11,147 @@ module Steep
|
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
+
class CursorContext
|
15
|
+
attr_reader :index
|
16
|
+
|
17
|
+
attr_reader :data
|
18
|
+
|
19
|
+
def initialize(index)
|
20
|
+
@index = index
|
21
|
+
end
|
22
|
+
|
23
|
+
def set(range, context = nil)
|
24
|
+
if range.is_a?(CursorContext)
|
25
|
+
range, context = range.data
|
26
|
+
range or return
|
27
|
+
context or return
|
28
|
+
end
|
29
|
+
|
30
|
+
context or raise
|
31
|
+
return unless index
|
32
|
+
|
33
|
+
if current_range = self.range
|
34
|
+
if range.begin <= index && index <= range.end
|
35
|
+
if current_range.begin <= range.begin && range.end <= current_range.end
|
36
|
+
@data = [range, context]
|
37
|
+
end
|
38
|
+
end
|
39
|
+
else
|
40
|
+
@data = [range, context]
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def set_node_context(node, context)
|
45
|
+
begin_pos = node.loc.expression.begin_pos
|
46
|
+
end_pos = node.loc.expression.end_pos
|
47
|
+
|
48
|
+
set(begin_pos..end_pos, context)
|
49
|
+
end
|
50
|
+
|
51
|
+
def set_body_context(node, context)
|
52
|
+
case node.type
|
53
|
+
when :class
|
54
|
+
name_node, super_node, _ = node.children
|
55
|
+
begin_pos = if super_node
|
56
|
+
super_node.loc.expression.end_pos
|
57
|
+
else
|
58
|
+
name_node.loc.expression.end_pos
|
59
|
+
end
|
60
|
+
end_pos = node.loc.end.begin_pos # steep:ignore NoMethod
|
61
|
+
|
62
|
+
set(begin_pos..end_pos, context)
|
63
|
+
|
64
|
+
when :module
|
65
|
+
name_node = node.children[0]
|
66
|
+
begin_pos = name_node.loc.expression.end_pos
|
67
|
+
end_pos = node.loc.end.begin_pos # steep:ignore NoMethod
|
68
|
+
set(begin_pos..end_pos, context)
|
69
|
+
|
70
|
+
when :sclass
|
71
|
+
name_node = node.children[0]
|
72
|
+
begin_pos = name_node.loc.expression.end_pos
|
73
|
+
end_pos = node.loc.end.begin_pos # steep:ignore NoMethod
|
74
|
+
set(begin_pos..end_pos, context)
|
75
|
+
|
76
|
+
when :def, :defs
|
77
|
+
if node.children.last
|
78
|
+
args_node =
|
79
|
+
case node.type
|
80
|
+
when :def
|
81
|
+
node.children[1]
|
82
|
+
when :defs
|
83
|
+
node.children[2]
|
84
|
+
end
|
85
|
+
|
86
|
+
body_begin_pos =
|
87
|
+
case
|
88
|
+
when node.loc.assignment # steep:ignore NoMethod
|
89
|
+
# endless def
|
90
|
+
node.loc.assignment.end_pos # steep:ignore NoMethod
|
91
|
+
when args_node.loc.expression
|
92
|
+
# with args
|
93
|
+
args_node.loc.expression.end_pos
|
94
|
+
else
|
95
|
+
# without args
|
96
|
+
node.loc.name.end_pos # steep:ignore NoMethod
|
97
|
+
end
|
98
|
+
|
99
|
+
body_end_pos =
|
100
|
+
if node.loc.end # steep:ignore NoMethod
|
101
|
+
node.loc.end.begin_pos # steep:ignore NoMethod
|
102
|
+
else
|
103
|
+
node.loc.expression.end_pos
|
104
|
+
end
|
105
|
+
|
106
|
+
set(body_begin_pos..body_end_pos, context)
|
107
|
+
end
|
108
|
+
|
109
|
+
when :block, :numblock
|
110
|
+
range = block_range(node)
|
111
|
+
set(range, context)
|
112
|
+
|
113
|
+
when :for
|
114
|
+
_, collection, _ = node.children
|
115
|
+
|
116
|
+
begin_pos = collection.loc.expression.end_pos
|
117
|
+
end_pos = node.loc.end.begin_pos # steep:ignore NoMethod
|
118
|
+
|
119
|
+
set(begin_pos..end_pos, context)
|
120
|
+
else
|
121
|
+
raise "Unexpected node for insert_context: #{node.type}"
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
def block_range(node)
|
126
|
+
case node.type
|
127
|
+
when :block
|
128
|
+
send_node, args_node, _ = node.children
|
129
|
+
begin_pos = if send_node.type != :lambda && args_node.loc.expression
|
130
|
+
args_node.loc.expression.end_pos
|
131
|
+
else
|
132
|
+
node.loc.begin.end_pos # steep:ignore NoMethod
|
133
|
+
end
|
134
|
+
end_pos = node.loc.end.begin_pos # steep:ignore NoMethod
|
135
|
+
when :numblock
|
136
|
+
send_node, _ = node.children
|
137
|
+
begin_pos = node.loc.begin.end_pos # steep:ignore NoMethod
|
138
|
+
end_pos = node.loc.end.begin_pos # steep:ignore NoMethod
|
139
|
+
end
|
140
|
+
|
141
|
+
begin_pos..end_pos
|
142
|
+
end
|
143
|
+
|
144
|
+
def range
|
145
|
+
range, _ = data
|
146
|
+
range
|
147
|
+
end
|
148
|
+
|
149
|
+
def context
|
150
|
+
_, context = data
|
151
|
+
context
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
14
155
|
attr_reader :source
|
15
156
|
attr_reader :errors
|
16
157
|
attr_reader :typing
|
@@ -22,8 +163,9 @@ module Steep
|
|
22
163
|
attr_reader :root_context
|
23
164
|
attr_reader :method_calls
|
24
165
|
attr_reader :source_index
|
166
|
+
attr_reader :cursor_context
|
25
167
|
|
26
|
-
def initialize(source:, root_context:, parent: nil, parent_last_update: parent&.last_update,
|
168
|
+
def initialize(source:, root_context:, parent: nil, parent_last_update: parent&.last_update, source_index: nil, cursor:)
|
27
169
|
@source = source
|
28
170
|
|
29
171
|
@parent = parent
|
@@ -34,9 +176,13 @@ module Steep
|
|
34
176
|
@errors = []
|
35
177
|
(@typing = {}).compare_by_identity
|
36
178
|
@root_context = root_context
|
37
|
-
@contexts = contexts || TypeInference::ContextArray.from_source(source: source, context: root_context)
|
38
179
|
(@method_calls = {}).compare_by_identity
|
39
180
|
|
181
|
+
@cursor_context = CursorContext.new(cursor)
|
182
|
+
if root_context
|
183
|
+
cursor_context.set(0..source.buffer.content&.size || 0, root_context)
|
184
|
+
end
|
185
|
+
|
40
186
|
@source_index = source_index || Index::SourceIndex.new(source: source)
|
41
187
|
end
|
42
188
|
|
@@ -57,11 +203,6 @@ module Steep
|
|
57
203
|
call
|
58
204
|
end
|
59
205
|
|
60
|
-
def add_context(range, context:)
|
61
|
-
contexts.insert_context(range, context: context)
|
62
|
-
@last_update += 1
|
63
|
-
end
|
64
|
-
|
65
206
|
def has_type?(node)
|
66
207
|
typing.key?(node)
|
67
208
|
end
|
@@ -96,13 +237,6 @@ module Steep
|
|
96
237
|
end
|
97
238
|
end
|
98
239
|
|
99
|
-
def add_context_for_node(node, context:)
|
100
|
-
begin_pos = node.loc.expression.begin_pos
|
101
|
-
end_pos = node.loc.expression.end_pos
|
102
|
-
|
103
|
-
add_context(begin_pos..end_pos, context: context)
|
104
|
-
end
|
105
|
-
|
106
240
|
def block_range(node)
|
107
241
|
case node.type
|
108
242
|
when :block
|
@@ -122,85 +256,6 @@ module Steep
|
|
122
256
|
begin_pos..end_pos
|
123
257
|
end
|
124
258
|
|
125
|
-
def add_context_for_body(node, context:)
|
126
|
-
case node.type
|
127
|
-
when :class
|
128
|
-
name_node, super_node, _ = node.children
|
129
|
-
begin_pos = if super_node
|
130
|
-
super_node.loc.expression.end_pos
|
131
|
-
else
|
132
|
-
name_node.loc.expression.end_pos
|
133
|
-
end
|
134
|
-
end_pos = node.loc.end.begin_pos # steep:ignore NoMethod
|
135
|
-
|
136
|
-
add_context(begin_pos..end_pos, context: context)
|
137
|
-
|
138
|
-
when :module
|
139
|
-
name_node = node.children[0]
|
140
|
-
begin_pos = name_node.loc.expression.end_pos
|
141
|
-
end_pos = node.loc.end.begin_pos # steep:ignore NoMethod
|
142
|
-
add_context(begin_pos..end_pos, context: context)
|
143
|
-
|
144
|
-
when :sclass
|
145
|
-
name_node = node.children[0]
|
146
|
-
begin_pos = name_node.loc.expression.end_pos
|
147
|
-
end_pos = node.loc.end.begin_pos # steep:ignore NoMethod
|
148
|
-
add_context(begin_pos..end_pos, context: context)
|
149
|
-
|
150
|
-
when :def, :defs
|
151
|
-
if node.children.last
|
152
|
-
args_node =
|
153
|
-
case node.type
|
154
|
-
when :def
|
155
|
-
node.children[1]
|
156
|
-
when :defs
|
157
|
-
node.children[2]
|
158
|
-
end
|
159
|
-
|
160
|
-
body_begin_pos =
|
161
|
-
case
|
162
|
-
when node.loc.assignment # steep:ignore NoMethod
|
163
|
-
# endless def
|
164
|
-
node.loc.assignment.end_pos # steep:ignore NoMethod
|
165
|
-
when args_node.loc.expression
|
166
|
-
# with args
|
167
|
-
args_node.loc.expression.end_pos
|
168
|
-
else
|
169
|
-
# without args
|
170
|
-
node.loc.name.end_pos # steep:ignore NoMethod
|
171
|
-
end
|
172
|
-
|
173
|
-
body_end_pos =
|
174
|
-
if node.loc.end # steep:ignore NoMethod
|
175
|
-
node.loc.end.begin_pos # steep:ignore NoMethod
|
176
|
-
else
|
177
|
-
node.loc.expression.end_pos
|
178
|
-
end
|
179
|
-
|
180
|
-
add_context(body_begin_pos..body_end_pos, context: context)
|
181
|
-
end
|
182
|
-
|
183
|
-
when :block, :numblock
|
184
|
-
range = block_range(node)
|
185
|
-
add_context(range, context: context)
|
186
|
-
|
187
|
-
when :for
|
188
|
-
_, collection, _ = node.children
|
189
|
-
|
190
|
-
begin_pos = collection.loc.expression.end_pos
|
191
|
-
end_pos = node.loc.end.begin_pos # steep:ignore NoMethod
|
192
|
-
|
193
|
-
add_context(begin_pos..end_pos, context: context)
|
194
|
-
else
|
195
|
-
raise "Unexpected node for insert_context: #{node.type}"
|
196
|
-
end
|
197
|
-
end
|
198
|
-
|
199
|
-
def context_at(line:, column:)
|
200
|
-
contexts.at(line: line, column: column) ||
|
201
|
-
(parent ? parent.context_at(line: line, column: column) : root_context)
|
202
|
-
end
|
203
|
-
|
204
259
|
def dump(io)
|
205
260
|
# steep:ignore:start
|
206
261
|
io.puts "Typing: "
|
@@ -223,13 +278,14 @@ module Steep
|
|
223
278
|
"#{line}:#{col}:#{src}"
|
224
279
|
end
|
225
280
|
|
226
|
-
def new_child(
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
281
|
+
def new_child()
|
282
|
+
child = self.class.new(
|
283
|
+
source: source,
|
284
|
+
parent: self,
|
285
|
+
root_context: root_context,
|
286
|
+
source_index: source_index.new_child,
|
287
|
+
cursor: cursor_context.index
|
288
|
+
)
|
233
289
|
@should_update = true
|
234
290
|
|
235
291
|
if block_given?
|
@@ -251,14 +307,14 @@ module Steep
|
|
251
307
|
parent.add_typing(node, type, nil)
|
252
308
|
end
|
253
309
|
|
254
|
-
parent.contexts.merge(contexts)
|
255
|
-
|
256
310
|
parent.method_calls.merge!(method_calls)
|
257
311
|
|
258
312
|
errors.each do |error|
|
259
313
|
parent.add_error error
|
260
314
|
end
|
261
315
|
|
316
|
+
parent.cursor_context.set(cursor_context)
|
317
|
+
|
262
318
|
parent.source_index.merge!(source_index)
|
263
319
|
end
|
264
320
|
end
|
data/lib/steep/version.rb
CHANGED
data/lib/steep.rb
CHANGED
@@ -15,6 +15,8 @@ require "stringio"
|
|
15
15
|
require 'uri'
|
16
16
|
require "yaml"
|
17
17
|
require "securerandom"
|
18
|
+
require "base64"
|
19
|
+
require "time"
|
18
20
|
|
19
21
|
require "concurrent/utility/processor_counter"
|
20
22
|
require "terminal-table"
|
@@ -22,11 +24,12 @@ require "terminal-table"
|
|
22
24
|
require "rbs"
|
23
25
|
|
24
26
|
require "steep/path_helper"
|
25
|
-
|
27
|
+
require "steep/located_value"
|
26
28
|
require "steep/thread_waiter"
|
27
29
|
require "steep/equatable"
|
28
30
|
require "steep/method_name"
|
29
31
|
require "steep/node_helper"
|
32
|
+
require "steep/ast/types/shared_instance"
|
30
33
|
require "steep/ast/types/helper"
|
31
34
|
require "steep/ast/types/any"
|
32
35
|
require "steep/ast/types/instance"
|
@@ -83,7 +86,6 @@ require "steep/annotation_parser"
|
|
83
86
|
require "steep/typing"
|
84
87
|
require "steep/type_construction"
|
85
88
|
require "steep/type_inference/context"
|
86
|
-
require "steep/type_inference/context_array"
|
87
89
|
require "steep/type_inference/send_args"
|
88
90
|
require "steep/type_inference/block_params"
|
89
91
|
require "steep/type_inference/method_params"
|
@@ -113,6 +115,8 @@ require "steep/services/stats_calculator"
|
|
113
115
|
require "steep/services/file_loader"
|
114
116
|
require "steep/services/goto_service"
|
115
117
|
|
118
|
+
require "steep/server/custom_methods"
|
119
|
+
require "steep/server/work_done_progress"
|
116
120
|
require "steep/server/delay_queue"
|
117
121
|
require "steep/server/lsp_formatter"
|
118
122
|
require "steep/server/change_buffer"
|
@@ -160,7 +164,16 @@ module Steep
|
|
160
164
|
end
|
161
165
|
|
162
166
|
def self.new_logger(output, prev_level)
|
163
|
-
|
167
|
+
logger = Logger.new(output)
|
168
|
+
logger.formatter = proc do |severity, datetime, progname, msg|
|
169
|
+
# @type var severity: String
|
170
|
+
# @type var datetime: Time
|
171
|
+
# @type var progname: untyped
|
172
|
+
# @type var msg: untyped
|
173
|
+
# @type block: String
|
174
|
+
"#{datetime.strftime('%Y-%m-%d %H:%M:%S.%L')}: #{severity}: #{msg}\n"
|
175
|
+
end
|
176
|
+
ActiveSupport::TaggedLogging.new(logger).tap do |logger|
|
164
177
|
logger.push_tags "Steep #{VERSION}"
|
165
178
|
logger.level = prev_level || Logger::ERROR
|
166
179
|
end
|
@@ -339,3 +352,15 @@ module GCCounter
|
|
339
352
|
end
|
340
353
|
end
|
341
354
|
end
|
355
|
+
|
356
|
+
|
357
|
+
|
358
|
+
|
359
|
+
# klasses = [Set]
|
360
|
+
# klasses.each do |klass|
|
361
|
+
# # steep:ignore:start
|
362
|
+
# def klass.new(...)
|
363
|
+
# super
|
364
|
+
# end
|
365
|
+
# # steep:ignore:end
|
366
|
+
# end
|
data/steep.gemspec
CHANGED
@@ -29,14 +29,14 @@ Gem::Specification.new do |spec|
|
|
29
29
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
30
30
|
spec.require_paths = ["lib"]
|
31
31
|
|
32
|
-
spec.required_ruby_version = '>= 3.
|
32
|
+
spec.required_ruby_version = '>= 3.1.0'
|
33
33
|
|
34
34
|
spec.add_runtime_dependency "parser", ">= 3.1"
|
35
35
|
spec.add_runtime_dependency "activesupport", ">= 5.1"
|
36
36
|
spec.add_runtime_dependency "rainbow", ">= 2.2.2", "< 4.0"
|
37
37
|
spec.add_runtime_dependency "listen", "~> 3.0"
|
38
38
|
spec.add_runtime_dependency "language_server-protocol", ">= 3.15", "< 4.0"
|
39
|
-
spec.add_runtime_dependency "rbs", "
|
39
|
+
spec.add_runtime_dependency "rbs", "~> 3.6.0.pre"
|
40
40
|
spec.add_runtime_dependency "concurrent-ruby", ">= 1.1.10"
|
41
41
|
spec.add_runtime_dependency "terminal-table", ">= 2", "< 4"
|
42
42
|
spec.add_runtime_dependency "securerandom", ">= 0.1"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: steep
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.8.0.
|
4
|
+
version: 1.8.0.pre.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Soutaro Matsumoto
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-09-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: parser
|
@@ -96,16 +96,16 @@ dependencies:
|
|
96
96
|
name: rbs
|
97
97
|
requirement: !ruby/object:Gem::Requirement
|
98
98
|
requirements:
|
99
|
-
- - "
|
99
|
+
- - "~>"
|
100
100
|
- !ruby/object:Gem::Version
|
101
|
-
version: 3.
|
101
|
+
version: 3.6.0.pre
|
102
102
|
type: :runtime
|
103
103
|
prerelease: false
|
104
104
|
version_requirements: !ruby/object:Gem::Requirement
|
105
105
|
requirements:
|
106
|
-
- - "
|
106
|
+
- - "~>"
|
107
107
|
- !ruby/object:Gem::Version
|
108
|
-
version: 3.
|
108
|
+
version: 3.6.0.pre
|
109
109
|
- !ruby/object:Gem::Dependency
|
110
110
|
name: concurrent-ruby
|
111
111
|
requirement: !ruby/object:Gem::Requirement
|
@@ -240,11 +240,15 @@ files:
|
|
240
240
|
- Rakefile
|
241
241
|
- Steepfile
|
242
242
|
- bin/console
|
243
|
+
- bin/mem_graph.rb
|
244
|
+
- bin/mem_prof.rb
|
243
245
|
- bin/output_rebaseline.rb
|
244
246
|
- bin/output_test.rb
|
245
247
|
- bin/rbs
|
246
248
|
- bin/setup
|
249
|
+
- bin/stackprof_test.rb
|
247
250
|
- bin/steep
|
251
|
+
- bin/steep-check.rb
|
248
252
|
- bin/steep-prof
|
249
253
|
- doc/narrowing.md
|
250
254
|
- doc/shape.md
|
@@ -276,6 +280,7 @@ files:
|
|
276
280
|
- lib/steep/ast/types/proc.rb
|
277
281
|
- lib/steep/ast/types/record.rb
|
278
282
|
- lib/steep/ast/types/self.rb
|
283
|
+
- lib/steep/ast/types/shared_instance.rb
|
279
284
|
- lib/steep/ast/types/top.rb
|
280
285
|
- lib/steep/ast/types/tuple.rb
|
281
286
|
- lib/steep/ast/types/union.rb
|
@@ -314,6 +319,7 @@ files:
|
|
314
319
|
- lib/steep/interface/shape.rb
|
315
320
|
- lib/steep/interface/substitution.rb
|
316
321
|
- lib/steep/interface/type_param.rb
|
322
|
+
- lib/steep/located_value.rb
|
317
323
|
- lib/steep/method_name.rb
|
318
324
|
- lib/steep/module_helper.rb
|
319
325
|
- lib/steep/node_helper.rb
|
@@ -327,11 +333,13 @@ files:
|
|
327
333
|
- lib/steep/range_extension.rb
|
328
334
|
- lib/steep/server/base_worker.rb
|
329
335
|
- lib/steep/server/change_buffer.rb
|
336
|
+
- lib/steep/server/custom_methods.rb
|
330
337
|
- lib/steep/server/delay_queue.rb
|
331
338
|
- lib/steep/server/interaction_worker.rb
|
332
339
|
- lib/steep/server/lsp_formatter.rb
|
333
340
|
- lib/steep/server/master.rb
|
334
341
|
- lib/steep/server/type_check_worker.rb
|
342
|
+
- lib/steep/server/work_done_progress.rb
|
335
343
|
- lib/steep/server/worker_process.rb
|
336
344
|
- lib/steep/services/completion_provider.rb
|
337
345
|
- lib/steep/services/content_change.rb
|
@@ -362,7 +370,6 @@ files:
|
|
362
370
|
- lib/steep/type_inference/case_when.rb
|
363
371
|
- lib/steep/type_inference/constant_env.rb
|
364
372
|
- lib/steep/type_inference/context.rb
|
365
|
-
- lib/steep/type_inference/context_array.rb
|
366
373
|
- lib/steep/type_inference/logic_type_interpreter.rb
|
367
374
|
- lib/steep/type_inference/method_call.rb
|
368
375
|
- lib/steep/type_inference/method_params.rb
|
@@ -394,7 +401,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
394
401
|
requirements:
|
395
402
|
- - ">="
|
396
403
|
- !ruby/object:Gem::Version
|
397
|
-
version: 3.
|
404
|
+
version: 3.1.0
|
398
405
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
399
406
|
requirements:
|
400
407
|
- - ">="
|