steep 1.4.0.dev.1 → 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.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -2
  3. data/Gemfile.lock +12 -12
  4. data/Gemfile.steep +1 -1
  5. data/Gemfile.steep.lock +15 -12
  6. data/Steepfile +16 -0
  7. data/lib/steep/annotation_parser.rb +40 -20
  8. data/lib/steep/ast/types/factory.rb +56 -10
  9. data/lib/steep/ast/types/name.rb +10 -0
  10. data/lib/steep/diagnostic/ruby.rb +1 -1
  11. data/lib/steep/diagnostic/signature.rb +40 -0
  12. data/lib/steep/index/rbs_index.rb +12 -3
  13. data/lib/steep/index/signature_symbol_provider.rb +1 -1
  14. data/lib/steep/project/target.rb +1 -3
  15. data/lib/steep/server/interaction_worker.rb +37 -20
  16. data/lib/steep/server/lsp_formatter.rb +14 -5
  17. data/lib/steep/services/completion_provider.rb +10 -12
  18. data/lib/steep/services/goto_service.rb +15 -14
  19. data/lib/steep/services/hover_provider/rbs.rb +29 -9
  20. data/lib/steep/services/hover_provider/ruby.rb +16 -10
  21. data/lib/steep/services/signature_service.rb +36 -39
  22. data/lib/steep/signature/validator.rb +28 -6
  23. data/lib/steep/subtyping/check.rb +1 -1
  24. data/lib/steep/type_construction.rb +16 -14
  25. data/lib/steep/type_inference/constant_env.rb +7 -3
  26. data/lib/steep/version.rb +1 -1
  27. data/rbs_collection.steep.lock.yaml +16 -20
  28. data/rbs_collection.steep.yaml +3 -1
  29. data/sample/lib/conference.rb +10 -0
  30. data/sample/sig/conference.rbs +23 -0
  31. data/sig/steep/annotation_parser.rbs +3 -2
  32. data/sig/steep/ast/annotation/collection.rbs +1 -1
  33. data/sig/steep/ast/types/factory.rbs +2 -0
  34. data/sig/steep/ast/types/name.rbs +4 -0
  35. data/sig/steep/diagnostic/signature.rbs +18 -14
  36. data/sig/steep/index/rbs_index.rbs +6 -2
  37. data/sig/steep/project/target.rbs +7 -7
  38. data/sig/steep/server/interaction_worker.rbs +2 -2
  39. data/sig/steep/server/lsp_formatter.rbs +4 -2
  40. data/sig/steep/services/completion_provider.rbs +6 -0
  41. data/sig/steep/services/hover_provider/rbs.rbs +6 -4
  42. data/sig/steep/services/hover_provider/ruby.rbs +8 -4
  43. data/sig/steep/services/signature_service.rbs +27 -3
  44. data/sig/steep/signature/validator.rbs +9 -5
  45. data/sig/steep/type_construction.rbs +1 -1
  46. data/sig/steep/type_inference/constant_env.rbs +2 -0
  47. data/smoke/regexp/a.rb +2 -2
  48. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bdccb93c5fd95bbc2e6af98021d0beadfb7aab30f3b398cb9e8414d5ea0e6f38
4
- data.tar.gz: 6dfab6ba13555e6a6c37c69950383e1e7608c21bc26eacf1a695de91a5fe6293
3
+ metadata.gz: 14e9c57b89791ad6d989bddd6439f1ce792ceccf8e17034a1f2ab56c85f2ca41
4
+ data.tar.gz: dfbe3445dcc72a84a2d4d4e608eb5d74e9da4e1cef03f4979a44e377bf65a917
5
5
  SHA512:
6
- metadata.gz: c09f6cd8780f428305edc405885c4080816470c05815515c8005e368532146b1e99e939699b3ff835d6909a2beeae074e38b79a1c8e2121652d008fc2f759316
7
- data.tar.gz: a579bca90d0a7cd5a689068e7de97ca2d5ac9d7d40ccd291d2b61df57f519997bbf8c3e376904b4369c256aac75b62a5ee89915940436ded62c68212a4926e50
6
+ metadata.gz: c14673012d5db258399c4f5d7bda6e3fb6aaca0dbc5c241efca52f8c4e947a5a4fd1a60a42ce6a45e87642926b6e44f65d6058bb241581e5a143251a158f383f
7
+ data.tar.gz: '0889651d16f198063b243aef34cb300325fb04dcbb7165f0d8c972d7f0f2076d86af77393c8c3f0f216d1a42f6fa8bd2c4cbf78d3e0c106d8c7f883d96099839'
data/Gemfile CHANGED
@@ -3,10 +3,10 @@ source 'https://rubygems.org'
3
3
  # Specify your gem's dependencies in steep.gemspec
4
4
  gemspec
5
5
 
6
- gem "rbs", "~>3.0.0.dev"
6
+ gem "rbs", "~> 3.0.0"
7
7
 
8
8
  gem "rake"
9
- gem "minitest", "~> 5.16"
9
+ gem "minitest", "~> 5.17"
10
10
  gem "minitest-hooks"
11
11
  group :stackprof, optional: true do
12
12
  gem "stackprof"
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- steep (1.4.0.dev.1)
4
+ steep (1.4.0.dev.2)
5
5
  activesupport (>= 5.1)
6
6
  csv (>= 3.0.9)
7
7
  fileutils (>= 1.1.0)
@@ -21,13 +21,13 @@ PATH
21
21
  GEM
22
22
  remote: https://rubygems.org/
23
23
  specs:
24
- activesupport (7.0.4)
24
+ activesupport (7.0.4.2)
25
25
  concurrent-ruby (~> 1.0, >= 1.0.2)
26
26
  i18n (>= 1.6, < 2)
27
27
  minitest (>= 5.1)
28
28
  tzinfo (~> 2.0)
29
29
  ast (2.4.2)
30
- concurrent-ruby (1.1.10)
30
+ concurrent-ruby (1.2.2)
31
31
  csv (3.2.6)
32
32
  debase (0.2.5.beta2)
33
33
  debase-ruby_core_source (>= 0.10.12)
@@ -37,18 +37,18 @@ GEM
37
37
  i18n (1.12.0)
38
38
  concurrent-ruby (~> 1.0)
39
39
  json (2.6.3)
40
- language_server-protocol (3.17.0.2)
41
- listen (3.7.1)
40
+ language_server-protocol (3.17.0.3)
41
+ listen (3.8.0)
42
42
  rb-fsevent (~> 0.10, >= 0.10.3)
43
43
  rb-inotify (~> 0.9, >= 0.9.10)
44
44
  logger (1.5.3)
45
- minitest (5.16.3)
45
+ minitest (5.17.0)
46
46
  minitest-hooks (1.5.0)
47
47
  minitest (> 5.3)
48
48
  minitest-slow_test (0.2.0)
49
49
  minitest (>= 5.0)
50
50
  parallel (1.22.1)
51
- parser (3.2.0.0)
51
+ parser (3.2.1.0)
52
52
  ast (~> 2.4.1)
53
53
  pathname (0.2.1)
54
54
  rainbow (3.1.1)
@@ -56,15 +56,15 @@ GEM
56
56
  rb-fsevent (0.11.2)
57
57
  rb-inotify (0.10.1)
58
58
  ffi (~> 1.0)
59
- rbs (3.0.0.dev.1)
59
+ rbs (3.0.1)
60
60
  ruby-debug-ide (0.7.3)
61
61
  rake (>= 0.8.1)
62
62
  securerandom (0.2.2)
63
63
  stackprof (0.2.23)
64
- strscan (3.0.5)
64
+ strscan (3.0.6)
65
65
  terminal-table (3.0.2)
66
66
  unicode-display_width (>= 1.1.1, < 3)
67
- tzinfo (2.0.5)
67
+ tzinfo (2.0.6)
68
68
  concurrent-ruby (~> 1.0)
69
69
  unicode-display_width (2.4.2)
70
70
 
@@ -73,11 +73,11 @@ PLATFORMS
73
73
 
74
74
  DEPENDENCIES
75
75
  debase (>= 0.2.5.beta2)
76
- minitest (~> 5.16)
76
+ minitest (~> 5.17)
77
77
  minitest-hooks
78
78
  minitest-slow_test
79
79
  rake
80
- rbs (~> 3.0.0.dev)
80
+ rbs (~> 3.0.0)
81
81
  ruby-debug-ide
82
82
  stackprof
83
83
  steep!
data/Gemfile.steep CHANGED
@@ -1,4 +1,4 @@
1
1
  source "https://rubygems.org"
2
2
 
3
- gem 'steep', '~> 1.3.0'
3
+ gem 'steep', '~> 1.4.0.dev'
4
4
  gem "rbs", "~> 3.0.0.dev"
data/Gemfile.steep.lock CHANGED
@@ -8,28 +8,29 @@ GEM
8
8
  tzinfo (~> 2.0)
9
9
  ast (2.4.2)
10
10
  concurrent-ruby (1.1.10)
11
- csv (3.2.5)
11
+ csv (3.2.6)
12
12
  ffi (1.15.5)
13
- fileutils (1.6.0)
13
+ fileutils (1.7.0)
14
14
  i18n (1.12.0)
15
15
  concurrent-ruby (~> 1.0)
16
- json (2.6.2)
17
- language_server-protocol (3.17.0.1)
16
+ json (2.6.3)
17
+ language_server-protocol (3.17.0.2)
18
18
  listen (3.7.1)
19
19
  rb-fsevent (~> 0.10, >= 0.10.3)
20
20
  rb-inotify (~> 0.9, >= 0.9.10)
21
- logger (1.5.1)
22
- minitest (5.16.3)
21
+ logger (1.5.3)
22
+ minitest (5.17.0)
23
23
  parallel (1.22.1)
24
- parser (3.1.2.1)
24
+ parser (3.2.0.0)
25
25
  ast (~> 2.4.1)
26
+ pathname (0.2.1)
26
27
  rainbow (3.1.1)
27
28
  rb-fsevent (0.11.2)
28
29
  rb-inotify (0.10.1)
29
30
  ffi (~> 1.0)
30
31
  rbs (3.0.0.dev.1)
31
- securerandom (0.2.0)
32
- steep (1.3.0)
32
+ securerandom (0.2.2)
33
+ steep (1.4.0.dev.1)
33
34
  activesupport (>= 5.1)
34
35
  csv (>= 3.0.9)
35
36
  fileutils (>= 1.1.0)
@@ -39,24 +40,26 @@ GEM
39
40
  logger (>= 1.3.0)
40
41
  parallel (>= 1.0.0)
41
42
  parser (>= 3.1)
43
+ pathname (>= 0.2.1)
42
44
  rainbow (>= 2.2.2, < 4.0)
43
45
  rbs (>= 2.8.0)
44
46
  securerandom (>= 0.1)
45
47
  strscan (>= 1.0.0)
46
48
  terminal-table (>= 2, < 4)
47
- strscan (3.0.4)
49
+ strscan (3.0.5)
48
50
  terminal-table (3.0.2)
49
51
  unicode-display_width (>= 1.1.1, < 3)
50
52
  tzinfo (2.0.5)
51
53
  concurrent-ruby (~> 1.0)
52
- unicode-display_width (2.3.0)
54
+ unicode-display_width (2.4.2)
53
55
 
54
56
  PLATFORMS
55
57
  arm64-darwin-21
58
+ arm64-darwin-22
56
59
 
57
60
  DEPENDENCIES
58
61
  rbs (~> 3.0.0.dev)
59
- steep (~> 1.3.0)
62
+ steep (~> 1.4.0.dev)
60
63
 
61
64
  BUNDLED WITH
62
65
  2.3.15
data/Steepfile CHANGED
@@ -10,7 +10,23 @@ target :app do
10
10
  hash[D::Ruby::MethodDefinitionMissing] = :hint
11
11
  end
12
12
 
13
+ FileUtils.mkpath("tmp")
14
+ tmp_rbs_dir = File.join("tmp", "rbs-sig")
15
+
16
+ definition = Bundler::Definition.build(Pathname("Gemfile"), Pathname("Gemfile.lock"), nil)
17
+ rbs_dep = definition.dependencies.find {|dep| dep.name == "rbs" }
18
+ if (source = rbs_dep.source).is_a?(Bundler::Source::Path)
19
+ unless Pathname(tmp_rbs_dir).exist?
20
+ FileUtils.ln_s(Pathname.pwd + source.path + "sig", tmp_rbs_dir, force: true)
21
+ end
22
+ signature tmp_rbs_dir
23
+ else
24
+ FileUtils.rm_f(tmp_rbs_dir)
25
+ library "rbs"
26
+ end
27
+
13
28
  library(
29
+ "rdoc",
14
30
  "set",
15
31
  "pathname",
16
32
  "monitor",
@@ -20,16 +20,19 @@ module Steep
20
20
  attr_reader :source
21
21
  attr_reader :location
22
22
 
23
- def initialize(source:, location:, exn: nil)
23
+ def initialize(source:, location:, exn: nil, message: nil)
24
24
  @source = source
25
25
  @location = location
26
26
 
27
- message = case exn
28
- when RBS::ParsingError
29
- Diagnostic::Signature::SyntaxError.parser_syntax_error_message(exn)
30
- when Exception
31
- exn.message
32
- end
27
+ if exn
28
+ message =
29
+ case exn
30
+ when RBS::ParsingError
31
+ Diagnostic::Signature::SyntaxError.parser_syntax_error_message(exn)
32
+ else
33
+ exn.message
34
+ end
35
+ end
33
36
 
34
37
  super message
35
38
  end
@@ -41,8 +44,25 @@ module Steep
41
44
  PARAM = /[A-Z][A-Za-z0-9_]*/
42
45
  TYPE_PARAMS = /(\[(?<params>#{PARAM}(,\s*#{PARAM})*)\])?/
43
46
 
44
- def parse_type(string)
45
- factory.type(RBS::Parser.parse_type(string))
47
+ def parse_type(match, name = :type, location:)
48
+ string = match[name] or raise
49
+ st, en = match.offset(name)
50
+ st or raise
51
+ en or raise
52
+ loc = RBS::Location.new(location.buffer, location.start_pos + st, location.start_pos + en)
53
+
54
+ type =
55
+ begin
56
+ RBS::Parser.parse_type(string)
57
+ rescue RBS::ParsingError => exn
58
+ raise SyntaxError.new(source: string, location: loc, exn: exn)
59
+ end or raise
60
+
61
+ unless (type.location || raise).source == string.strip
62
+ raise SyntaxError.new(source: string, location: loc, message: "Failed to parse a type in annotation")
63
+ end
64
+
65
+ factory.type(type)
46
66
  end
47
67
 
48
68
  def keyword_subject_type(keyword, name)
@@ -59,10 +79,9 @@ module Steep
59
79
  Regexp.last_match.yield_self do |match|
60
80
  match or raise
61
81
  name = match[:name] or raise
62
- type = match[:type] or raise
63
82
 
64
83
  AST::Annotation::VarType.new(name: name.to_sym,
65
- type: parse_type(type),
84
+ type: parse_type(match, location: location),
66
85
  location: location)
67
86
  end
68
87
 
@@ -72,7 +91,7 @@ module Steep
72
91
  name = match[:name] or raise
73
92
  type = match[:type] or raise
74
93
 
75
- method_type = factory.method_type(RBS::Parser.parse_method_type(type), method_decls: Set[])
94
+ method_type = factory.method_type(RBS::Parser.parse_method_type(type) || raise, method_decls: Set[])
76
95
 
77
96
  AST::Annotation::MethodType.new(name: name.to_sym,
78
97
  type: method_type,
@@ -83,7 +102,7 @@ module Steep
83
102
  Regexp.last_match.yield_self do |match|
84
103
  match or raise
85
104
  name = match[:name] or raise
86
- type = parse_type(match[:type] || raise)
105
+ type = parse_type(match, location: location)
87
106
 
88
107
  AST::Annotation::ConstType.new(name: TypeName(name), type: type, location: location)
89
108
  end
@@ -92,7 +111,7 @@ module Steep
92
111
  Regexp.last_match.yield_self do |match|
93
112
  match or raise
94
113
  name = match[:name] or raise
95
- type = parse_type(match[:type] || raise)
114
+ type = parse_type(match, location: location)
96
115
 
97
116
  AST::Annotation::IvarType.new(name: name.to_sym,
98
117
  type: type,
@@ -102,42 +121,43 @@ module Steep
102
121
  when keyword_and_type("return")
103
122
  Regexp.last_match.yield_self do |match|
104
123
  match or raise
105
- type = parse_type(match[:type] || raise)
124
+ type = parse_type(match, location: location)
106
125
  AST::Annotation::ReturnType.new(type: type, location: location)
107
126
  end
108
127
 
109
128
  when keyword_and_type("block")
110
129
  Regexp.last_match.yield_self do |match|
111
130
  match or raise
112
- type = parse_type(match[:type] || raise)
131
+ type = parse_type(match, location: location)
113
132
  AST::Annotation::BlockType.new(type: type, location: location)
114
133
  end
115
134
 
116
135
  when keyword_and_type("self")
117
136
  Regexp.last_match.yield_self do |match|
118
137
  match or raise
119
- type = parse_type(match[:type] || raise)
138
+ type = parse_type(match, location: location)
120
139
  AST::Annotation::SelfType.new(type: type, location: location)
121
140
  end
122
141
 
123
142
  when keyword_and_type("instance")
124
143
  Regexp.last_match.yield_self do |match|
125
144
  match or raise
126
- type = parse_type(match[:type] || raise)
145
+ type = parse_type(match, location: location)
127
146
  AST::Annotation::InstanceType.new(type: type, location: location)
128
147
  end
129
148
 
130
149
  when keyword_and_type("module")
131
150
  Regexp.last_match.yield_self do |match|
132
151
  match or raise
133
- type = parse_type(match[:type] || raise)
152
+ type = parse_type(match, location: location)
134
153
  AST::Annotation::ModuleType.new(type: type, location: location)
135
154
  end
136
155
 
137
156
  when keyword_and_type("break")
138
157
  Regexp.last_match.yield_self do |match|
139
158
  match or raise
140
- type = parse_type(match[:type] || raise)
159
+ type = parse_type(match, location: location)
160
+
141
161
  AST::Annotation::BreakType.new(type: type, location: location)
142
162
  end
143
163
 
@@ -370,19 +370,11 @@ module Steep
370
370
  end
371
371
 
372
372
  def module_name?(type_name)
373
- if entry = env.class_decls[type_name]
374
- entry.is_a?(RBS::Environment::ModuleEntry)
375
- else
376
- false
377
- end
373
+ env.module_entry(type_name) ? true : false
378
374
  end
379
375
 
380
376
  def class_name?(type_name)
381
- if entry = env.class_decls[type_name]
382
- entry.is_a?(RBS::Environment::ClassEntry)
383
- else
384
- false
385
- end
377
+ env.class_entry(type_name) ? true : false
386
378
  end
387
379
 
388
380
  def env
@@ -434,6 +426,60 @@ module Steep
434
426
  nil
435
427
  end
436
428
  end
429
+
430
+ def normalize_type(type)
431
+ case type
432
+ when AST::Types::Name::Instance
433
+ AST::Types::Name::Instance.new(
434
+ name: env.normalize_module_name(type.name),
435
+ args: type.args.map {|ty| normalize_type(ty) },
436
+ location: type.location
437
+ )
438
+ when AST::Types::Name::Singleton
439
+ AST::Types::Name::Singleton.new(
440
+ name: env.normalize_module_name(type.name),
441
+ location: type.location
442
+ )
443
+ when AST::Types::Any, AST::Types::Boolean, AST::Types::Bot, AST::Types::Nil,
444
+ AST::Types::Top, AST::Types::Void, AST::Types::Literal, AST::Types::Class, AST::Types::Instance,
445
+ AST::Types::Self, AST::Types::Var, AST::Types::Logic::Base
446
+ type
447
+ when AST::Types::Intersection
448
+ AST::Types::Intersection.build(
449
+ types: type.types.map {|type| normalize_type(type) },
450
+ location: type.location
451
+ )
452
+ when AST::Types::Union
453
+ AST::Types::Union.build(
454
+ types: type.types.map {|type| normalize_type(type) },
455
+ location: type.location
456
+ )
457
+ when AST::Types::Record
458
+ AST::Types::Record.new(
459
+ elements: type.elements.transform_values {|type| normalize_type(type) },
460
+ location: type.location
461
+ )
462
+ when AST::Types::Tuple
463
+ AST::Types::Tuple.new(
464
+ types: type.types.map {|type| normalize_type(type) },
465
+ location: type.location
466
+ )
467
+ when AST::Types::Proc
468
+ type.map_type {|type| normalize_type(type) }
469
+ when AST::Types::Name::Alias
470
+ AST::Types::Name::Alias.new(
471
+ name: type.name,
472
+ args: type.args.map {|ty| normalize_type(ty) },
473
+ location: type.location
474
+ )
475
+ when AST::Types::Name::Interface
476
+ AST::Types::Name::Interface.new(
477
+ name: type.name,
478
+ args: type.args.map {|ty| normalize_type(ty) },
479
+ location: type.location
480
+ )
481
+ end
482
+ end
437
483
  end
438
484
  end
439
485
  end
@@ -20,6 +20,10 @@ module Steep
20
20
  def level
21
21
  [0]
22
22
  end
23
+
24
+ def map_type(&block)
25
+ self
26
+ end
23
27
  end
24
28
 
25
29
  class Applying < Base
@@ -87,6 +91,12 @@ module Steep
87
91
  def level
88
92
  [0] + level_of_children(args)
89
93
  end
94
+
95
+ def map_type(&block)
96
+ args = self.args.map(&block)
97
+
98
+ _ = self.class.new(name: self.name, args: self.args, location: self.location)
99
+ end
90
100
  end
91
101
 
92
102
  class Singleton < Base
@@ -783,7 +783,7 @@ module Steep
783
783
  end
784
784
 
785
785
  def header_line
786
- "Assertion cannot hold: no relationship between infered type (`#{node_type.to_s}`) and asserted type (`#{assertion_type.to_s}`)"
786
+ "Assertion cannot hold: no relationship between inferred type (`#{node_type.to_s}`) and asserted type (`#{assertion_type.to_s}`)"
787
787
  end
788
788
  end
789
789
 
@@ -381,6 +381,42 @@ module Steep
381
381
  end
382
382
  end
383
383
 
384
+ class InconsistentClassModuleAliasError < Base
385
+ attr_reader :decl
386
+
387
+ def initialize(decl:)
388
+ @decl = decl
389
+ super(location: decl.location&.[](:old_name))
390
+ end
391
+
392
+ def header_line
393
+ expected_kind =
394
+ case decl
395
+ when RBS::AST::Declarations::ModuleAlias
396
+ "module"
397
+ when RBS::AST::Declarations::ClassAlias
398
+ "class"
399
+ else
400
+ raise
401
+ end
402
+
403
+ "A #{expected_kind} `#{decl.new_name}` cannot be an alias of `#{decl.old_name}`"
404
+ end
405
+ end
406
+
407
+ class CyclicClassAliasDefinitionError < Base
408
+ attr_reader :decl
409
+
410
+ def initialize(decl:)
411
+ @decl = decl
412
+ super(location: decl.location&.[](:new_name))
413
+ end
414
+
415
+ def header_line
416
+ "#{decl.new_name} is a cyclic definition"
417
+ end
418
+ end
419
+
384
420
  def self.from_rbs_error(error, factory:)
385
421
  case error
386
422
  when RBS::ParsingError
@@ -475,6 +511,10 @@ module Steep
475
511
  )
476
512
  when RBS::InheritModuleError
477
513
  Diagnostic::Signature::InheritModuleError.new(error.super_decl)
514
+ when RBS::InconsistentClassModuleAliasError
515
+ Diagnostic::Signature::InconsistentClassModuleAliasError.new(decl: error.alias_entry.decl)
516
+ when RBS::CyclicClassAliasDefinitionError
517
+ Diagnostic::Signature::CyclicClassAliasDefinitionError.new(decl: error.alias_entry.decl)
478
518
  else
479
519
  raise error
480
520
  end
@@ -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::Alias
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::Alias
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}"
@@ -312,6 +316,11 @@ module Steep
312
316
  end
313
317
  end
314
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
+
315
324
  env.interface_decls.each do |name, decl|
316
325
  index.add_type_declaration(name, decl.decl)
317
326
 
@@ -320,7 +329,7 @@ module Steep
320
329
  end
321
330
  end
322
331
 
323
- env.alias_decls.each do |name, decl|
332
+ env.type_alias_decls.each do |name, decl|
324
333
  index.add_type_declaration(name, decl.decl)
325
334
  type_reference decl.decl.type, from: decl.decl
326
335
  end
@@ -84,7 +84,7 @@ module Steep
84
84
  kind: LSP::Constant::SymbolKind::INTERFACE,
85
85
  container_name: container_name
86
86
  )
87
- when RBS::AST::Declarations::Alias
87
+ when RBS::AST::Declarations::TypeAlias
88
88
  symbols << SymbolInformation.new(
89
89
  name: name,
90
90
  location: decl.location,
@@ -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