steep 1.3.0 → 1.4.0.dev.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/.github/workflows/ruby-windows.yml +1 -0
- data/.github/workflows/ruby.yml +1 -5
- data/Gemfile +3 -1
- data/Gemfile.lock +22 -19
- data/Gemfile.steep +2 -1
- data/Gemfile.steep.lock +18 -14
- data/Steepfile +16 -0
- data/bin/rbs +21 -0
- data/bin/setup +1 -1
- data/lib/steep/annotation_parser.rb +40 -20
- data/lib/steep/ast/types/factory.rb +56 -10
- data/lib/steep/ast/types/name.rb +10 -0
- data/lib/steep/diagnostic/ruby.rb +1 -1
- data/lib/steep/diagnostic/signature.rb +40 -0
- data/lib/steep/index/rbs_index.rb +25 -9
- data/lib/steep/index/signature_symbol_provider.rb +1 -1
- data/lib/steep/project/dsl.rb +12 -4
- data/lib/steep/project/options.rb +3 -1
- data/lib/steep/project/target.rb +1 -3
- data/lib/steep/server/interaction_worker.rb +37 -20
- data/lib/steep/server/lsp_formatter.rb +14 -5
- data/lib/steep/services/completion_provider.rb +10 -12
- data/lib/steep/services/goto_service.rb +15 -14
- data/lib/steep/services/hover_provider/rbs.rb +29 -9
- data/lib/steep/services/hover_provider/ruby.rb +16 -10
- data/lib/steep/services/signature_service.rb +36 -39
- data/lib/steep/signature/validator.rb +28 -6
- data/lib/steep/subtyping/check.rb +1 -1
- data/lib/steep/type_construction.rb +16 -14
- data/lib/steep/type_inference/constant_env.rb +7 -3
- data/lib/steep/version.rb +1 -1
- data/rbs_collection.steep.lock.yaml +48 -51
- data/rbs_collection.steep.yaml +3 -1
- data/sample/lib/conference.rb +10 -0
- data/sample/sig/conference.rbs +23 -0
- data/sig/steep/annotation_parser.rbs +3 -2
- data/sig/steep/ast/annotation/collection.rbs +1 -1
- data/sig/steep/ast/types/factory.rbs +2 -0
- data/sig/steep/ast/types/name.rbs +4 -0
- data/sig/steep/diagnostic/signature.rbs +18 -14
- data/sig/steep/index/rbs_index.rbs +92 -42
- data/sig/steep/project/dsl.rbs +35 -30
- data/sig/steep/project/options.rbs +16 -4
- data/sig/steep/project/target.rbs +7 -7
- data/sig/steep/server/interaction_worker.rbs +2 -2
- data/sig/steep/server/lsp_formatter.rbs +4 -2
- data/sig/steep/services/completion_provider.rbs +6 -0
- data/sig/steep/services/hover_provider/rbs.rbs +6 -4
- data/sig/steep/services/hover_provider/ruby.rbs +8 -4
- data/sig/steep/services/signature_service.rbs +27 -3
- data/sig/steep/signature/validator.rbs +9 -5
- data/sig/steep/type_construction.rbs +1 -1
- data/sig/steep/type_inference/constant_env.rbs +2 -0
- data/smoke/diagnostics-rbs/test_expectations.yml +1 -1
- data/smoke/regexp/a.rb +2 -2
- data/steep.gemspec +2 -1
- metadata +21 -6
@@ -18,7 +18,9 @@ module Steep
|
|
18
18
|
declarations << decl
|
19
19
|
when RBS::AST::Declarations::Interface
|
20
20
|
declarations << decl
|
21
|
-
when RBS::AST::Declarations::
|
21
|
+
when RBS::AST::Declarations::TypeAlias
|
22
|
+
declarations << decl
|
23
|
+
when RBS::AST::Declarations::ClassAlias, RBS::AST::Declarations::ModuleAlias
|
22
24
|
declarations << decl
|
23
25
|
else
|
24
26
|
raise "Unexpected type declaration: #{decl}"
|
@@ -41,7 +43,9 @@ module Steep
|
|
41
43
|
references << ref
|
42
44
|
when RBS::AST::Declarations::Constant, RBS::AST::Declarations::Global
|
43
45
|
references << ref
|
44
|
-
when RBS::AST::Declarations::
|
46
|
+
when RBS::AST::Declarations::TypeAlias
|
47
|
+
references << ref
|
48
|
+
when RBS::AST::Declarations::ClassAlias, RBS::AST::Declarations::ModuleAlias
|
45
49
|
references << ref
|
46
50
|
else
|
47
51
|
raise "Unexpected type reference: #{ref}"
|
@@ -148,7 +152,7 @@ module Steep
|
|
148
152
|
end
|
149
153
|
|
150
154
|
def each_entry(&block)
|
151
|
-
if
|
155
|
+
if block
|
152
156
|
type_index.each_value(&block)
|
153
157
|
method_index.each_value(&block)
|
154
158
|
const_index.each_value(&block)
|
@@ -176,7 +180,7 @@ module Steep
|
|
176
180
|
|
177
181
|
def each_declaration(type_name: nil, method_name: nil, const_name: nil, global_name: nil, &block)
|
178
182
|
if block
|
179
|
-
entry = entry(type_name: type_name, method_name: method_name, const_name: const_name, global_name: global_name)
|
183
|
+
entry = __skip__ = entry(type_name: type_name, method_name: method_name, const_name: const_name, global_name: global_name)
|
180
184
|
entry.declarations.each(&block)
|
181
185
|
else
|
182
186
|
enum_for(:each_declaration, type_name: type_name, method_name: method_name, const_name: const_name, global_name: global_name)
|
@@ -187,9 +191,12 @@ module Steep
|
|
187
191
|
entry(type_name: type_name).add_reference(ref)
|
188
192
|
end
|
189
193
|
|
190
|
-
def each_reference(type_name
|
194
|
+
def each_reference(type_name:, &block)
|
191
195
|
if block
|
192
|
-
|
196
|
+
case
|
197
|
+
when type_name
|
198
|
+
entry(type_name: type_name).references.each(&block)
|
199
|
+
end
|
193
200
|
else
|
194
201
|
enum_for(:each_reference, type_name: type_name)
|
195
202
|
end
|
@@ -205,8 +212,8 @@ module Steep
|
|
205
212
|
def member(type_name, member)
|
206
213
|
case member
|
207
214
|
when RBS::AST::Members::MethodDefinition
|
208
|
-
member.
|
209
|
-
method_type.each_type do |type|
|
215
|
+
member.overloads.each do |overload|
|
216
|
+
overload.method_type.each_type do |type|
|
210
217
|
type_reference type, from: member
|
211
218
|
end
|
212
219
|
end
|
@@ -230,6 +237,8 @@ module Steep
|
|
230
237
|
InstanceMethodName.new(type_name: type_name, method_name: member.name)
|
231
238
|
when :singleton
|
232
239
|
SingletonMethodName.new(type_name: type_name, method_name: member.name)
|
240
|
+
else
|
241
|
+
raise
|
233
242
|
end
|
234
243
|
index.add_method_declaration(method_name, member)
|
235
244
|
end
|
@@ -240,6 +249,8 @@ module Steep
|
|
240
249
|
InstanceMethodName.new(type_name: type_name, method_name: "#{member.name}=".to_sym)
|
241
250
|
when :singleton
|
242
251
|
SingletonMethodName.new(type_name: type_name, method_name: "#{member.name}=".to_sym)
|
252
|
+
else
|
253
|
+
raise
|
243
254
|
end
|
244
255
|
index.add_method_declaration(method_name, member)
|
245
256
|
end
|
@@ -305,6 +316,11 @@ module Steep
|
|
305
316
|
end
|
306
317
|
end
|
307
318
|
|
319
|
+
env.class_alias_decls.each do |name, entry|
|
320
|
+
index.add_type_declaration(name, entry.decl)
|
321
|
+
index.add_type_reference(entry.decl.old_name, entry.decl)
|
322
|
+
end
|
323
|
+
|
308
324
|
env.interface_decls.each do |name, decl|
|
309
325
|
index.add_type_declaration(name, decl.decl)
|
310
326
|
|
@@ -313,7 +329,7 @@ module Steep
|
|
313
329
|
end
|
314
330
|
end
|
315
331
|
|
316
|
-
env.
|
332
|
+
env.type_alias_decls.each do |name, decl|
|
317
333
|
index.add_type_declaration(name, decl.decl)
|
318
334
|
type_reference decl.decl.type, from: decl.decl
|
319
335
|
end
|
data/lib/steep/project/dsl.rb
CHANGED
@@ -172,8 +172,12 @@ module Steep
|
|
172
172
|
yield code_diagnostics_config if block_given?
|
173
173
|
end
|
174
174
|
|
175
|
+
def project!
|
176
|
+
project or raise "TargetDSL doesn't have project (#{name})"
|
177
|
+
end
|
178
|
+
|
175
179
|
def collection_config(path)
|
176
|
-
@collection_config_path = project
|
180
|
+
@collection_config_path = project!.absolute_path(path)
|
177
181
|
end
|
178
182
|
|
179
183
|
def disable_collection
|
@@ -196,7 +200,6 @@ module Steep
|
|
196
200
|
|
197
201
|
def initialize(project:)
|
198
202
|
@project = project
|
199
|
-
@global_signatures = []
|
200
203
|
end
|
201
204
|
|
202
205
|
def self.register_template(name, target)
|
@@ -218,13 +221,18 @@ module Steep
|
|
218
221
|
end
|
219
222
|
|
220
223
|
Steep.logger.tagged "target=#{name}" do
|
221
|
-
target.instance_eval(&block) if
|
224
|
+
target.instance_eval(&block) if block
|
222
225
|
end
|
223
226
|
|
224
227
|
source_pattern = Pattern.new(patterns: target.sources, ignores: target.ignored_sources, ext: ".rb")
|
225
228
|
signature_pattern = Pattern.new(patterns: target.signatures, ext: ".rbs")
|
226
229
|
|
227
|
-
|
230
|
+
|
231
|
+
if config_path = target.collection_config_path
|
232
|
+
lockfile_path = RBS::Collection::Config.to_lockfile_path(config_path)
|
233
|
+
content = YAML.load_file(lockfile_path.to_s)
|
234
|
+
collection_lock = RBS::Collection::Config::Lockfile.from_lockfile(lockfile_path: lockfile_path, data: content)
|
235
|
+
end
|
228
236
|
|
229
237
|
Project::Target.new(
|
230
238
|
name: target.name,
|
@@ -1,7 +1,9 @@
|
|
1
1
|
module Steep
|
2
2
|
class Project
|
3
3
|
class Options
|
4
|
-
PathOptions = Struct.new(:core_root, :stdlib_root, :repo_paths, keyword_init: true) do
|
4
|
+
PathOptions = _ = Struct.new(:core_root, :stdlib_root, :repo_paths, keyword_init: true) do
|
5
|
+
# @implements PathOptions
|
6
|
+
|
5
7
|
def customized_stdlib?
|
6
8
|
stdlib_root != nil
|
7
9
|
end
|
data/lib/steep/project/target.rb
CHANGED
@@ -14,9 +14,6 @@ module Steep
|
|
14
14
|
@source_pattern = source_pattern
|
15
15
|
@signature_pattern = signature_pattern
|
16
16
|
@code_diagnostics_config = code_diagnostics_config
|
17
|
-
|
18
|
-
@source_files = {}
|
19
|
-
@signature_files = {}
|
20
17
|
end
|
21
18
|
|
22
19
|
def possible_source_file?(path)
|
@@ -55,6 +52,7 @@ module Steep
|
|
55
52
|
|
56
53
|
options.libraries.each do |lib|
|
57
54
|
name, version = lib.split(/:/, 2)
|
55
|
+
name or raise
|
58
56
|
loader.add(library: name, version: version)
|
59
57
|
end
|
60
58
|
loader.add_collection(options.collection_lock) if options.collection_lock
|
@@ -128,7 +128,7 @@ module Steep
|
|
128
128
|
)
|
129
129
|
when (targets = project.targets_for_path(job.path)).is_a?(Array)
|
130
130
|
target = targets[0] or return
|
131
|
-
sig_service = service.signature_services[target.name]
|
131
|
+
sig_service = service.signature_services[target.name] #: Services::SignatureService
|
132
132
|
relative_path = job.path
|
133
133
|
buffer = RBS::Buffer.new(name: relative_path, content: sig_service.files[relative_path].content)
|
134
134
|
pos = buffer.loc_to_pos([job.line, job.column])
|
@@ -139,10 +139,12 @@ module Steep
|
|
139
139
|
return
|
140
140
|
end
|
141
141
|
|
142
|
-
|
143
|
-
|
142
|
+
sig = sig_service.files[relative_path].signature
|
143
|
+
sig.is_a?(Array) or raise
|
144
|
+
decls = sig[2]
|
145
|
+
locator = RBS::Locator.new(buffer: sig[0], dirs: sig[1], decls: decls)
|
144
146
|
|
145
|
-
_hd, tail = locator.find2(line: job.line, column: job.column)
|
147
|
+
(_hd, tail = locator.find2(line: job.line, column: job.column)) or return []
|
146
148
|
|
147
149
|
namespace = []
|
148
150
|
tail.each do |t|
|
@@ -160,11 +162,12 @@ module Steep
|
|
160
162
|
|
161
163
|
context.map!(&:absolute!)
|
162
164
|
|
163
|
-
|
165
|
+
class_names = sig_service.latest_env.class_decls.keys + sig_service.latest_env.class_alias_decls.keys
|
166
|
+
class_items = class_names.map { |type_name|
|
164
167
|
format_completion_item_for_rbs(sig_service, type_name, context, job, prefix)
|
165
168
|
}.compact
|
166
169
|
|
167
|
-
alias_items = sig_service.latest_env.
|
170
|
+
alias_items = sig_service.latest_env.type_alias_decls.keys.map { |type_name|
|
168
171
|
format_completion_item_for_rbs(sig_service, type_name, context, job, prefix)
|
169
172
|
}.compact
|
170
173
|
|
@@ -201,21 +204,35 @@ module Steep
|
|
201
204
|
|
202
205
|
case type_name.kind
|
203
206
|
when :class
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
207
|
+
env = sig_service.latest_env #: RBS::Environment
|
208
|
+
class_entry = env.module_class_entry(type_name) or raise
|
209
|
+
|
210
|
+
case class_entry
|
211
|
+
when RBS::Environment::ClassEntry, RBS::Environment::ModuleEntry
|
212
|
+
LanguageServer::Protocol::Interface::CompletionItem.new(
|
213
|
+
label: "#{name}",
|
214
|
+
documentation: format_comment(class_entry.primary.decl.comment),
|
215
|
+
text_edit: LanguageServer::Protocol::Interface::TextEdit.new(
|
216
|
+
range: range,
|
217
|
+
new_text: name
|
218
|
+
),
|
219
|
+
kind: LSP::Constant::CompletionItemKind::CLASS,
|
220
|
+
insert_text_format: LSP::Constant::InsertTextFormat::SNIPPET
|
221
|
+
)
|
222
|
+
when RBS::Environment::ClassAliasEntry, RBS::Environment::ModuleAliasEntry
|
223
|
+
LanguageServer::Protocol::Interface::CompletionItem.new(
|
224
|
+
label: "#{name}",
|
225
|
+
documentation: format_comment(class_entry.decl.comment),
|
226
|
+
text_edit: LanguageServer::Protocol::Interface::TextEdit.new(
|
227
|
+
range: range,
|
228
|
+
new_text: name
|
229
|
+
),
|
230
|
+
kind: LSP::Constant::CompletionItemKind::CLASS,
|
231
|
+
insert_text_format: LSP::Constant::InsertTextFormat::SNIPPET
|
232
|
+
)
|
233
|
+
end
|
217
234
|
when :alias
|
218
|
-
alias_decl = sig_service.latest_env.
|
235
|
+
alias_decl = sig_service.latest_env.type_alias_decls[type_name]&.decl or raise
|
219
236
|
LanguageServer::Protocol::Interface::CompletionItem.new(
|
220
237
|
label: "#{name}",
|
221
238
|
text_edit: LanguageServer::Protocol::Interface::TextEdit.new(
|
@@ -110,19 +110,24 @@ EOM
|
|
110
110
|
end
|
111
111
|
when HoverProvider::Ruby::ConstantContent
|
112
112
|
CommentBuilder.build do |builder|
|
113
|
-
|
113
|
+
case
|
114
|
+
when decl = content.class_decl
|
114
115
|
builder << <<EOM
|
115
116
|
```rbs
|
116
117
|
#{declaration_summary(decl.primary.decl)}
|
117
118
|
```
|
118
119
|
EOM
|
119
|
-
|
120
|
-
|
121
|
-
if content.constant?
|
120
|
+
when decl = content.constant_decl
|
122
121
|
builder << <<EOM
|
123
122
|
```rbs
|
124
123
|
#{content.full_name}: #{content.type}
|
125
124
|
```
|
125
|
+
EOM
|
126
|
+
when decl = content.class_alias
|
127
|
+
builder << <<EOM
|
128
|
+
```rbs
|
129
|
+
#{decl.is_a?(::RBS::Environment::ClassAliasEntry) ? "class" : "module"} #{decl.decl.new_name} = #{decl.decl.old_name}
|
130
|
+
```
|
126
131
|
EOM
|
127
132
|
end
|
128
133
|
|
@@ -245,10 +250,14 @@ EOM
|
|
245
250
|
" : #{decl.self_types.map {|s| name_and_args(s.name, s.args) }.join(", ")}"
|
246
251
|
end
|
247
252
|
"module #{name_and_params(decl.name, decl.type_params)}#{self_type}"
|
248
|
-
when RBS::AST::Declarations::
|
253
|
+
when RBS::AST::Declarations::TypeAlias
|
249
254
|
"type #{decl.name} = #{decl.type}"
|
250
255
|
when RBS::AST::Declarations::Interface
|
251
256
|
"interface #{name_and_params(decl.name, decl.type_params)}"
|
257
|
+
when RBS::AST::Declarations::ClassAlias
|
258
|
+
"class #{decl.new_name} = #{decl.old_name}"
|
259
|
+
when RBS::AST::Declarations::ModuleAlias
|
260
|
+
"module #{decl.new_name} = #{decl.old_name}"
|
252
261
|
end
|
253
262
|
end
|
254
263
|
end
|
@@ -16,25 +16,23 @@ module Steep
|
|
16
16
|
# @implements ConstantItem
|
17
17
|
|
18
18
|
def class?
|
19
|
-
|
20
|
-
decl.primary.decl.is_a?(RBS::AST::Declarations::Class)
|
21
|
-
end
|
19
|
+
env.class_entry(full_name) ? true : false
|
22
20
|
end
|
23
21
|
|
24
22
|
def module?
|
25
|
-
|
26
|
-
decl.primary.decl.is_a?(RBS::AST::Declarations::Module)
|
27
|
-
end
|
23
|
+
env.module_entry(full_name) ? true : false
|
28
24
|
end
|
29
25
|
|
30
26
|
def comments
|
31
|
-
case
|
32
|
-
when
|
33
|
-
|
34
|
-
when
|
35
|
-
|
27
|
+
case entry = env.constant_entry(full_name)
|
28
|
+
when RBS::Environment::ConstantEntry
|
29
|
+
[entry.decl.comment].compact
|
30
|
+
when RBS::Environment::ClassEntry, RBS::Environment::ModuleEntry
|
31
|
+
entry.decls.filter_map {|d| d.decl.comment }
|
32
|
+
when RBS::Environment::ClassAliasEntry, RBS::Environment::ModuleAliasEntry
|
33
|
+
[entry.decl.comment].compact
|
36
34
|
else
|
37
|
-
|
35
|
+
raise
|
38
36
|
end
|
39
37
|
end
|
40
38
|
end
|
@@ -151,15 +151,15 @@ module Steep
|
|
151
151
|
end
|
152
152
|
end
|
153
153
|
end
|
154
|
-
when target_names = type_check.signature_file?(path)
|
154
|
+
when target_names = type_check.signature_file?(path) #: Array[Symbol]
|
155
155
|
target_names.each do |target_name|
|
156
|
-
signature_service = type_check.signature_services[target_name]
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
156
|
+
signature_service = type_check.signature_services[target_name] #: SignatureService
|
157
|
+
|
158
|
+
env = signature_service.latest_env
|
159
|
+
buffer = env.buffers.find {|buf| buf.name.to_s == relative_path.to_s } or raise
|
160
|
+
(dirs, decls = env.signatures[buffer]) or raise
|
161
161
|
|
162
|
-
locator = RBS::Locator.new(decls: decls)
|
162
|
+
locator = RBS::Locator.new(buffer: buffer, dirs: dirs, decls: decls)
|
163
163
|
last, nodes = locator.find2(line: line, column: column)
|
164
164
|
case nodes[0]
|
165
165
|
when RBS::AST::Declarations::Class, RBS::AST::Declarations::Module
|
@@ -222,16 +222,17 @@ module Steep
|
|
222
222
|
|
223
223
|
def constant_definition_in_rbs(name, locations:)
|
224
224
|
type_check.signature_services.each_value do |signature|
|
225
|
-
env = signature.latest_env
|
225
|
+
env = signature.latest_env #: RBS::Environment
|
226
226
|
|
227
|
-
|
227
|
+
case entry = env.constant_entry(name)
|
228
|
+
when RBS::Environment::ConstantEntry
|
229
|
+
locations << entry.decl.location&.[](:name)
|
230
|
+
when RBS::Environment::ClassEntry, RBS::Environment::ModuleEntry
|
228
231
|
entry.decls.each do |d|
|
229
|
-
locations << d.decl.location[:name
|
232
|
+
locations << d.decl.location&.[](:name)
|
230
233
|
end
|
231
|
-
|
232
|
-
|
233
|
-
if entry = env.constant_decls[name]
|
234
|
-
locations << entry.decl.location[:name]
|
234
|
+
when RBS::Environment::ClassAliasEntry, RBS::Environment::ModuleAliasEntry
|
235
|
+
locations << entry.decl.location&.[](:new_name)
|
235
236
|
end
|
236
237
|
end
|
237
238
|
|
@@ -19,18 +19,17 @@ module Steep
|
|
19
19
|
def content_for(target:, path:, line:, column:)
|
20
20
|
service = self.service.signature_services[target.name]
|
21
21
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
return if decls.nil?
|
22
|
+
env = service.latest_env
|
23
|
+
buffer = env.buffers.find {|buf| buf.name.to_s == path.to_s } or return
|
24
|
+
(dirs, decls = env.signatures[buffer]) or raise
|
27
25
|
|
28
|
-
|
26
|
+
locator = ::RBS::Locator.new(buffer: buffer, dirs: dirs, decls: decls)
|
27
|
+
loc_key, path = locator.find2(line: line, column: column) || return
|
29
28
|
head, *_tail = path
|
30
29
|
|
31
30
|
case head
|
32
31
|
when ::RBS::Types::Alias
|
33
|
-
alias_decl = service.latest_env.
|
32
|
+
alias_decl = service.latest_env.type_alias_decls[head.name]&.decl or raise
|
34
33
|
|
35
34
|
TypeAliasContent.new(
|
36
35
|
location: head.location || raise,
|
@@ -38,9 +37,16 @@ module Steep
|
|
38
37
|
)
|
39
38
|
when ::RBS::Types::ClassInstance, ::RBS::Types::ClassSingleton
|
40
39
|
if loc_key == :name
|
41
|
-
env = service.latest_env
|
42
|
-
class_decl = env.class_decls[head.name]&.decls&.[](0)&.decl or raise
|
43
40
|
location = head.location&.[](:name) or raise
|
41
|
+
|
42
|
+
class_entry = service.latest_env.module_class_entry(head.name) or raise
|
43
|
+
case class_entry
|
44
|
+
when ::RBS::Environment::ClassEntry, ::RBS::Environment::ModuleEntry
|
45
|
+
class_decl = class_entry.primary.decl
|
46
|
+
when ::RBS::Environment::ClassAliasEntry, ::RBS::Environment::ModuleAliasEntry
|
47
|
+
class_decl = class_entry.decl
|
48
|
+
end
|
49
|
+
|
44
50
|
ClassContent.new(
|
45
51
|
location: location,
|
46
52
|
decl: class_decl
|
@@ -55,6 +61,20 @@ module Steep
|
|
55
61
|
location: location,
|
56
62
|
decl: interface_decl
|
57
63
|
)
|
64
|
+
when ::RBS::AST::Declarations::ClassAlias, ::RBS::AST::Declarations::ModuleAlias
|
65
|
+
if loc_key == :old_name
|
66
|
+
location = head.location&.[](:old_name) or raise
|
67
|
+
|
68
|
+
class_entry = service.latest_env.module_class_entry(head.old_name) or raise
|
69
|
+
case class_entry
|
70
|
+
when ::RBS::Environment::ClassEntry, ::RBS::Environment::ModuleEntry
|
71
|
+
class_decl = class_entry.primary.decl
|
72
|
+
when ::RBS::Environment::ClassAliasEntry, ::RBS::Environment::ModuleAliasEntry
|
73
|
+
class_decl = class_entry.decl
|
74
|
+
end
|
75
|
+
|
76
|
+
ClassContent.new(location: location, decl: class_decl)
|
77
|
+
end
|
58
78
|
end
|
59
79
|
end
|
60
80
|
end
|
@@ -14,6 +14,8 @@ module Steep
|
|
14
14
|
case
|
15
15
|
when decl = class_decl
|
16
16
|
decl.decls.map {|d| d.decl.comment }
|
17
|
+
when decl = class_alias
|
18
|
+
[decl.decl.comment]
|
17
19
|
when decl = constant_decl
|
18
20
|
[decl.decl.comment]
|
19
21
|
else
|
@@ -22,27 +24,31 @@ module Steep
|
|
22
24
|
end
|
23
25
|
|
24
26
|
def class_decl
|
25
|
-
|
27
|
+
case decl
|
28
|
+
when ::RBS::Environment::ClassEntry, ::RBS::Environment::ModuleEntry
|
26
29
|
decl
|
27
30
|
end
|
28
31
|
end
|
29
32
|
|
30
|
-
def
|
31
|
-
|
33
|
+
def class_alias
|
34
|
+
case decl
|
35
|
+
when ::RBS::Environment::ClassAliasEntry, ::RBS::Environment::ModuleAliasEntry
|
32
36
|
decl
|
33
37
|
end
|
34
38
|
end
|
35
39
|
|
36
|
-
def
|
37
|
-
if decl.is_a?(::RBS::Environment::
|
40
|
+
def constant_decl
|
41
|
+
if decl.is_a?(::RBS::Environment::ConstantEntry)
|
38
42
|
decl
|
39
43
|
end
|
40
44
|
end
|
41
45
|
|
46
|
+
def constant?
|
47
|
+
constant_decl ? true : false
|
48
|
+
end
|
49
|
+
|
42
50
|
def class_or_module?
|
43
|
-
|
44
|
-
decl
|
45
|
-
end
|
51
|
+
(class_decl || class_alias) ? true : false
|
46
52
|
end
|
47
53
|
end
|
48
54
|
|
@@ -169,13 +175,13 @@ module Steep
|
|
169
175
|
const_name = typing.source_index.reference(constant_node: node)
|
170
176
|
|
171
177
|
if const_name
|
172
|
-
|
178
|
+
entry = context.env.constant_entry(const_name) or return
|
173
179
|
|
174
180
|
return ConstantContent.new(
|
175
181
|
location: node.location.name,
|
176
182
|
full_name: const_name,
|
177
183
|
type: type,
|
178
|
-
decl:
|
184
|
+
decl: entry
|
179
185
|
)
|
180
186
|
end
|
181
187
|
when :assertion
|