steep 1.3.0.pre.2 → 1.4.0.dev.1

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 (61) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby-windows.yml +1 -0
  3. data/.github/workflows/ruby.yml +1 -5
  4. data/CHANGELOG.md +6 -0
  5. data/Gemfile +2 -0
  6. data/Gemfile.lock +17 -14
  7. data/Gemfile.steep +2 -2
  8. data/Gemfile.steep.lock +5 -5
  9. data/bin/rbs +21 -0
  10. data/bin/setup +1 -1
  11. data/lib/steep/ast/types/class.rb +9 -3
  12. data/lib/steep/ast/types/factory.rb +9 -2
  13. data/lib/steep/ast/types/instance.rb +8 -3
  14. data/lib/steep/ast/types/intersection.rb +6 -2
  15. data/lib/steep/ast/types/literal.rb +1 -1
  16. data/lib/steep/ast/types/logic.rb +1 -3
  17. data/lib/steep/ast/types/name.rb +11 -5
  18. data/lib/steep/ast/types/proc.rb +5 -5
  19. data/lib/steep/ast/types/record.rb +5 -1
  20. data/lib/steep/ast/types/self.rb +8 -2
  21. data/lib/steep/ast/types/tuple.rb +7 -5
  22. data/lib/steep/ast/types/union.rb +10 -4
  23. data/lib/steep/ast/types/var.rb +1 -1
  24. data/lib/steep/index/rbs_index.rb +13 -6
  25. data/lib/steep/interface/substitution.rb +11 -10
  26. data/lib/steep/project/dsl.rb +12 -4
  27. data/lib/steep/project/options.rb +3 -1
  28. data/lib/steep/signature/validator.rb +13 -13
  29. data/lib/steep/type_inference/logic_type_interpreter.rb +2 -2
  30. data/lib/steep/version.rb +1 -1
  31. data/lib/steep.rb +0 -1
  32. data/rbs_collection.steep.lock.yaml +44 -43
  33. data/sig/steep/ast/builtin.rbs +1 -1
  34. data/sig/steep/ast/types/any.rbs +5 -5
  35. data/sig/steep/ast/types/boolean.rbs +6 -6
  36. data/sig/steep/ast/types/bot.rbs +5 -5
  37. data/sig/steep/ast/types/class.rbs +7 -6
  38. data/sig/steep/ast/types/helper.rbs +2 -2
  39. data/sig/steep/ast/types/instance.rbs +6 -5
  40. data/sig/steep/ast/types/intersection.rbs +12 -9
  41. data/sig/steep/ast/types/literal.rbs +6 -4
  42. data/sig/steep/ast/types/logic.rbs +7 -9
  43. data/sig/steep/ast/types/name.rbs +7 -3
  44. data/sig/steep/ast/types/nil.rbs +6 -6
  45. data/sig/steep/ast/types/proc.rbs +8 -3
  46. data/sig/steep/ast/types/record.rbs +7 -8
  47. data/sig/steep/ast/types/self.rbs +7 -6
  48. data/sig/steep/ast/types/top.rbs +6 -6
  49. data/sig/steep/ast/types/tuple.rbs +5 -4
  50. data/sig/steep/ast/types/union.rbs +8 -8
  51. data/sig/steep/ast/types/var.rbs +16 -11
  52. data/sig/steep/ast/types/void.rbs +5 -5
  53. data/sig/steep/ast/types.rbs +5 -26
  54. data/sig/steep/index/rbs_index.rbs +83 -37
  55. data/sig/steep/interface/substitution.rbs +9 -9
  56. data/sig/steep/project/dsl.rbs +35 -30
  57. data/sig/steep/project/options.rbs +16 -4
  58. data/smoke/diagnostics-rbs/test_expectations.yml +1 -1
  59. data/steep.gemspec +3 -2
  60. metadata +21 -7
  61. data/lib/steep/ast/types.rb +0 -62
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 639a97319d661c777702365209eaf5a6ea2632723a509331a03f6f1ef3926148
4
- data.tar.gz: fb6061b52a09fb97c907abff4f69d6c9267eef1c9a3af52fa87fffda9de5d1f0
3
+ metadata.gz: bdccb93c5fd95bbc2e6af98021d0beadfb7aab30f3b398cb9e8414d5ea0e6f38
4
+ data.tar.gz: 6dfab6ba13555e6a6c37c69950383e1e7608c21bc26eacf1a695de91a5fe6293
5
5
  SHA512:
6
- metadata.gz: 232ec5b779c018aa9824318e003cd60e3ec3691297903337bb414fff87e757daaacfda2d94fb0c751538dcad194763ad6cb5b072156686bd450d5292d490a2e6
7
- data.tar.gz: b322f5568a1fe5cbc0693a01a7be50d9860e056a9f69325e6c55a9322f2d32f7d1d0889d19e45576ca6f3f9afde9649747d9d02a0e251702f94cd27bf5fae27c
6
+ metadata.gz: c09f6cd8780f428305edc405885c4080816470c05815515c8005e368532146b1e99e939699b3ff835d6909a2beeae074e38b79a1c8e2121652d008fc2f759316
7
+ data.tar.gz: a579bca90d0a7cd5a689068e7de97ca2d5ac9d7d40ccd291d2b61df57f519997bbf8c3e376904b4369c256aac75b62a5ee89915940436ded62c68212a4926e50
@@ -14,6 +14,7 @@ jobs:
14
14
  - "2.7"
15
15
  - "3.0"
16
16
  - "3.1"
17
+ - "3.2"
17
18
  task:
18
19
  - test
19
20
  # - test:output Ignored because the order of diagnostics changes somehow
@@ -11,10 +11,10 @@ jobs:
11
11
  strategy:
12
12
  matrix:
13
13
  container_tag:
14
- - "2.6"
15
14
  - "2.7"
16
15
  - "3.0"
17
16
  - "3.1"
17
+ - "3.2"
18
18
  - "master-nightly-focal"
19
19
  task:
20
20
  - test
@@ -25,10 +25,6 @@ jobs:
25
25
  image: rubylang/ruby:${{ matrix.container_tag }}
26
26
  steps:
27
27
  - uses: actions/checkout@v3
28
- - name: Reset bundler
29
- run: |
30
- rm Gemfile.lock Gemfile.steep.lock
31
- if: contains(matrix.container_tag, '2.6')
32
28
  - name: Run test
33
29
  run: |
34
30
  git config --global --add safe.directory /__w/steep/steep
data/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  ## master
4
4
 
5
+ ## 1.3.0 (2022-11-25)
6
+
7
+ ### Type checker core
8
+
9
+ * Type check types ([#676](https://github.com/soutaro/steep/pull/676))
10
+
5
11
  ## 1.3.0.pre.2 (2022-11-23)
6
12
 
7
13
  ### Type checker core
data/Gemfile CHANGED
@@ -3,6 +3,8 @@ 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"
7
+
6
8
  gem "rake"
7
9
  gem "minitest", "~> 5.16"
8
10
  gem "minitest-hooks"
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- steep (1.3.0.pre.2)
4
+ steep (1.4.0.dev.1)
5
5
  activesupport (>= 5.1)
6
6
  csv (>= 3.0.9)
7
7
  fileutils (>= 1.1.0)
@@ -11,8 +11,9 @@ PATH
11
11
  logger (>= 1.3.0)
12
12
  parallel (>= 1.0.0)
13
13
  parser (>= 3.1)
14
+ pathname (>= 0.2.1)
14
15
  rainbow (>= 2.2.2, < 4.0)
15
- rbs (>= 2.8.0.pre)
16
+ rbs (>= 2.8.0)
16
17
  securerandom (>= 0.1)
17
18
  strscan (>= 1.0.0)
18
19
  terminal-table (>= 2, < 4)
@@ -27,44 +28,45 @@ GEM
27
28
  tzinfo (~> 2.0)
28
29
  ast (2.4.2)
29
30
  concurrent-ruby (1.1.10)
30
- csv (3.2.5)
31
+ csv (3.2.6)
31
32
  debase (0.2.5.beta2)
32
33
  debase-ruby_core_source (>= 0.10.12)
33
- debase-ruby_core_source (0.10.16)
34
+ debase-ruby_core_source (3.2.0)
34
35
  ffi (1.15.5)
35
- fileutils (1.6.0)
36
+ fileutils (1.7.0)
36
37
  i18n (1.12.0)
37
38
  concurrent-ruby (~> 1.0)
38
- json (2.6.2)
39
- language_server-protocol (3.17.0.1)
39
+ json (2.6.3)
40
+ language_server-protocol (3.17.0.2)
40
41
  listen (3.7.1)
41
42
  rb-fsevent (~> 0.10, >= 0.10.3)
42
43
  rb-inotify (~> 0.9, >= 0.9.10)
43
- logger (1.5.1)
44
+ logger (1.5.3)
44
45
  minitest (5.16.3)
45
46
  minitest-hooks (1.5.0)
46
47
  minitest (> 5.3)
47
48
  minitest-slow_test (0.2.0)
48
49
  minitest (>= 5.0)
49
50
  parallel (1.22.1)
50
- parser (3.1.2.1)
51
+ parser (3.2.0.0)
51
52
  ast (~> 2.4.1)
53
+ pathname (0.2.1)
52
54
  rainbow (3.1.1)
53
55
  rake (13.0.6)
54
56
  rb-fsevent (0.11.2)
55
57
  rb-inotify (0.10.1)
56
58
  ffi (~> 1.0)
57
- rbs (2.8.0.pre.1)
59
+ rbs (3.0.0.dev.1)
58
60
  ruby-debug-ide (0.7.3)
59
61
  rake (>= 0.8.1)
60
- securerandom (0.2.0)
61
- stackprof (0.2.22)
62
- strscan (3.0.4)
62
+ securerandom (0.2.2)
63
+ stackprof (0.2.23)
64
+ strscan (3.0.5)
63
65
  terminal-table (3.0.2)
64
66
  unicode-display_width (>= 1.1.1, < 3)
65
67
  tzinfo (2.0.5)
66
68
  concurrent-ruby (~> 1.0)
67
- unicode-display_width (2.3.0)
69
+ unicode-display_width (2.4.2)
68
70
 
69
71
  PLATFORMS
70
72
  ruby
@@ -75,6 +77,7 @@ DEPENDENCIES
75
77
  minitest-hooks
76
78
  minitest-slow_test
77
79
  rake
80
+ rbs (~> 3.0.0.dev)
78
81
  ruby-debug-ide
79
82
  stackprof
80
83
  steep!
data/Gemfile.steep CHANGED
@@ -1,4 +1,4 @@
1
1
  source "https://rubygems.org"
2
2
 
3
- gem 'steep', '~> 1.2.0'
4
- gem "rbs", '~> 2.8.0.pre'
3
+ gem 'steep', '~> 1.3.0'
4
+ gem "rbs", "~> 3.0.0.dev"
data/Gemfile.steep.lock CHANGED
@@ -27,9 +27,9 @@ GEM
27
27
  rb-fsevent (0.11.2)
28
28
  rb-inotify (0.10.1)
29
29
  ffi (~> 1.0)
30
- rbs (2.8.0.pre.1)
30
+ rbs (3.0.0.dev.1)
31
31
  securerandom (0.2.0)
32
- steep (1.2.1)
32
+ steep (1.3.0)
33
33
  activesupport (>= 5.1)
34
34
  csv (>= 3.0.9)
35
35
  fileutils (>= 1.1.0)
@@ -40,7 +40,7 @@ GEM
40
40
  parallel (>= 1.0.0)
41
41
  parser (>= 3.1)
42
42
  rainbow (>= 2.2.2, < 4.0)
43
- rbs (>= 2.7.0)
43
+ rbs (>= 2.8.0)
44
44
  securerandom (>= 0.1)
45
45
  strscan (>= 1.0.0)
46
46
  terminal-table (>= 2, < 4)
@@ -55,8 +55,8 @@ PLATFORMS
55
55
  arm64-darwin-21
56
56
 
57
57
  DEPENDENCIES
58
- rbs (~> 2.8.0.pre)
59
- steep (~> 1.2.0)
58
+ rbs (~> 3.0.0.dev)
59
+ steep (~> 1.3.0)
60
60
 
61
61
  BUNDLED WITH
62
62
  2.3.15
data/bin/rbs ADDED
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env bash
2
+
3
+ BINSTUB_DIR=$(cd $(dirname $0); pwd)
4
+ GEMFILE=$(readlink -f ${BINSTUB_DIR}/../Gemfile.steep)
5
+ COLLECTION=$(readlink -f ${BINSTUB_DIR}/../rbs_collection.steep.yaml)
6
+ ROOT_DIR=$(readlink -f ${BINSTUB_DIR}/..)
7
+
8
+ RBS="bundle exec --gemfile=${GEMFILE} rbs --collection=${COLLECTION}"
9
+
10
+ if type "rbenv" > /dev/null 2>&1; then
11
+ RBS="rbenv exec ${RBS}"
12
+ else
13
+ if type "rvm" > /dev/null 2>&1; then
14
+ if [ -e ${ROOT_DIR}/.ruby-version ]; then
15
+ RBS="rvm ${ROOT_DIR} do ${RBS}"
16
+ fi
17
+ fi
18
+ fi
19
+
20
+ exec $RBS $@
21
+
data/bin/setup CHANGED
@@ -6,4 +6,4 @@ set -vx
6
6
  bundle install
7
7
 
8
8
  bundle install --gemfile=Gemfile.steep
9
- bundle exec --gemfile=Gemfile.steep rbs --collection=rbs_collection.steep.yaml collection install
9
+ bin/rbs collection install
@@ -27,11 +27,17 @@ module Steep
27
27
  alias eql? ==
28
28
 
29
29
  def subst(s)
30
- s.module_type or raise "Unexpected substitution: #{inspect}"
30
+ if s.module_type
31
+ s.module_type
32
+ else
33
+ self
34
+ end
31
35
  end
32
36
 
33
- def free_variables()
34
- @fvs = Set.new([self])
37
+ @@fvs = Set[instance]
38
+
39
+ def free_variables
40
+ @@fvs
35
41
  end
36
42
 
37
43
  include Helper::NoChild
@@ -204,7 +204,7 @@ module Steep
204
204
  when Logic::Base
205
205
  RBS::Types::Bases::Bool.new(location: type.location)
206
206
  else
207
- raise "Unexpected type given: #{type} (#{type.class})"
207
+ __skip__ = raise "Unexpected type given: #{type} (#{type.class})"
208
208
  end
209
209
  end
210
210
 
@@ -248,7 +248,14 @@ module Steep
248
248
  RBS::AST::TypeParam.new(
249
249
  name: type_param.name,
250
250
  variance: type_param.variance,
251
- upper_bound: type_param.upper_bound&.yield_self {|u| type_1(u) },
251
+ upper_bound: type_param.upper_bound&.yield_self {|u|
252
+ case u_ = type_1(u)
253
+ when RBS::Types::ClassInstance, RBS::Types::ClassSingleton, RBS::Types::Interface
254
+ u_
255
+ else
256
+ raise "`#{u_}` cannot be type parameter upper bound"
257
+ end
258
+ },
252
259
  location: type_param.location
253
260
  ).unchecked!(type_param.unchecked)
254
261
  end
@@ -23,11 +23,16 @@ module Steep
23
23
  alias eql? ==
24
24
 
25
25
  def subst(s)
26
- s.instance_type or raise "Unexpected substitution: #{inspect}"
26
+ if s.instance_type
27
+ s.instance_type
28
+ else
29
+ self
30
+ end
27
31
  end
28
32
 
29
- def free_variables()
30
- @fvs = Set.new([self])
33
+ @@fvs = Set[instance]
34
+ def free_variables
35
+ @@fvs
31
36
  end
32
37
 
33
38
  include Helper::NoChild
@@ -35,7 +35,7 @@ module Steep
35
35
  when 0
36
36
  AST::Types::Top.new(location: location)
37
37
  when 1
38
- tys.first
38
+ tys.first || raise
39
39
  else
40
40
  new(types: dups.to_a, location: location)
41
41
  end
@@ -73,7 +73,11 @@ module Steep
73
73
  include Helper::ChildrenLevel
74
74
 
75
75
  def each_child(&block)
76
- types.each(&block)
76
+ if block
77
+ types.each(&block)
78
+ else
79
+ types.each
80
+ end
77
81
  end
78
82
 
79
83
  def level
@@ -54,7 +54,7 @@ module Steep
54
54
  when false
55
55
  Builtin::FalseClass
56
56
  else
57
- raise "Unexpected literal type: #{value.inspect}"
57
+ raise "Unexpected literal type: #{(_ = value).inspect}"
58
58
  end
59
59
 
60
60
  Name::Instance.new(name: klass.module_name, args: [], location: location)
@@ -9,9 +9,7 @@ module Steep
9
9
  self
10
10
  end
11
11
 
12
- def free_variables
13
- @fvs ||= Set[]
14
- end
12
+ include Helper::NoFreeVariables
15
13
 
16
14
  include Helper::NoChild
17
15
 
@@ -51,14 +51,16 @@ module Steep
51
51
  end
52
52
 
53
53
  def with_location(new_location)
54
- self.class.new(name: name, args: args, location: new_location)
54
+ _ = self.class.new(name: name, args: args, location: new_location)
55
55
  end
56
56
 
57
57
  def subst(s)
58
58
  if free_variables.intersect?(s.domain)
59
- self.class.new(location: location,
60
- name: name,
61
- args: args.map {|a| a.subst(s) })
59
+ _ = self.class.new(
60
+ location: location,
61
+ name: name,
62
+ args: args.map {|a| a.subst(s) }
63
+ )
62
64
  else
63
65
  self
64
66
  end
@@ -73,7 +75,11 @@ module Steep
73
75
  end
74
76
 
75
77
  def each_child(&block)
76
- args.each(&block)
78
+ if block
79
+ args.each(&block)
80
+ else
81
+ args.each
82
+ end
77
83
  end
78
84
 
79
85
  include Helper::ChildrenLevel
@@ -68,10 +68,6 @@ module Steep
68
68
  [0] + level_of_children(children)
69
69
  end
70
70
 
71
- def closed?
72
- type.closed? && (block.nil? || block.closed?) && (self_type ? self_type.closed? : false)
73
- end
74
-
75
71
  def with_location(new_location)
76
72
  self.class.new(location: new_location, block: block, type: type, self_type: self_type)
77
73
  end
@@ -103,7 +99,11 @@ module Steep
103
99
  end
104
100
 
105
101
  def block_required?
106
- block && !block.optional?
102
+ if block
103
+ !block.optional?
104
+ else
105
+ false
106
+ end
107
107
  end
108
108
 
109
109
  def each_child(&block)
@@ -43,7 +43,11 @@ module Steep
43
43
  include Helper::ChildrenLevel
44
44
 
45
45
  def each_child(&block)
46
- elements.each_value(&block)
46
+ if block
47
+ elements.each_value(&block)
48
+ else
49
+ elements.each_value
50
+ end
47
51
  end
48
52
 
49
53
  def level
@@ -29,11 +29,17 @@ module Steep
29
29
  include Helper::NoChild
30
30
 
31
31
  def subst(s)
32
- s.self_type or raise "Unexpected substitution: #{inspect}"
32
+ if s.self_type
33
+ s.self_type
34
+ else
35
+ self
36
+ end
33
37
  end
34
38
 
39
+ @@fvs = Set[instance]
40
+
35
41
  def free_variables
36
- @fvs ||= Set.new([self])
42
+ @@fvs
37
43
  end
38
44
 
39
45
  def level
@@ -31,17 +31,19 @@ module Steep
31
31
  end
32
32
 
33
33
  def free_variables()
34
- @fvs ||= Set.new.tap do |set|
35
- types.each do |type|
36
- set.merge(type.free_variables)
37
- end
34
+ @fvs ||= each_child.with_object(Set[]) do |type, set| #$ Set[variable]
35
+ set.merge(type.free_variables)
38
36
  end
39
37
  end
40
38
 
41
39
  include Helper::ChildrenLevel
42
40
 
43
41
  def each_child(&block)
44
- types.each(&block)
42
+ if block
43
+ types.each(&block)
44
+ else
45
+ types.each
46
+ end
45
47
  end
46
48
 
47
49
  def level
@@ -12,7 +12,9 @@ module Steep
12
12
 
13
13
  def self.build(types:, location: nil)
14
14
  return AST::Types::Bot.new if types.empty?
15
- return types.first if types.size == 1
15
+ if types.size == 1
16
+ return types.first || raise
17
+ end
16
18
 
17
19
  types.flat_map do |type|
18
20
  if type.is_a?(Union)
@@ -36,7 +38,7 @@ module Steep
36
38
  when 0
37
39
  AST::Types::Bot.new
38
40
  when 1
39
- tys.first
41
+ tys.first || raise
40
42
  else
41
43
  new(types: tys, location: location)
42
44
  end
@@ -49,7 +51,7 @@ module Steep
49
51
  end
50
52
 
51
53
  def hash
52
- @hash ||= types.inject(self.class.hash) {|c, type| type.hash ^ c }
54
+ @hash ||= types.inject(self.class.hash) {|c, type| type.hash ^ c } #$ Integer
53
55
  end
54
56
 
55
57
  alias eql? ==
@@ -71,7 +73,11 @@ module Steep
71
73
  end
72
74
 
73
75
  def each_child(&block)
74
- types.each(&block)
76
+ if block
77
+ types.each(&block)
78
+ else
79
+ types.each
80
+ end
75
81
  end
76
82
 
77
83
  include Helper::ChildrenLevel
@@ -22,7 +22,7 @@ module Steep
22
22
  alias eql? ==
23
23
 
24
24
  def self.fresh_name(name)
25
- @mutex ||= Mutex.new
25
+ @mutex ||= Thread::Mutex.new
26
26
 
27
27
  @mutex.synchronize do
28
28
  @max ||= 0
@@ -148,7 +148,7 @@ module Steep
148
148
  end
149
149
 
150
150
  def each_entry(&block)
151
- if block_given?
151
+ if block
152
152
  type_index.each_value(&block)
153
153
  method_index.each_value(&block)
154
154
  const_index.each_value(&block)
@@ -176,7 +176,7 @@ module Steep
176
176
 
177
177
  def each_declaration(type_name: nil, method_name: nil, const_name: nil, global_name: nil, &block)
178
178
  if block
179
- entry = entry(type_name: type_name, method_name: method_name, const_name: const_name, global_name: global_name)
179
+ entry = __skip__ = entry(type_name: type_name, method_name: method_name, const_name: const_name, global_name: global_name)
180
180
  entry.declarations.each(&block)
181
181
  else
182
182
  enum_for(:each_declaration, type_name: type_name, method_name: method_name, const_name: const_name, global_name: global_name)
@@ -187,9 +187,12 @@ module Steep
187
187
  entry(type_name: type_name).add_reference(ref)
188
188
  end
189
189
 
190
- def each_reference(type_name: nil, &block)
190
+ def each_reference(type_name:, &block)
191
191
  if block
192
- entry(type_name: type_name).references.each(&block)
192
+ case
193
+ when type_name
194
+ entry(type_name: type_name).references.each(&block)
195
+ end
193
196
  else
194
197
  enum_for(:each_reference, type_name: type_name)
195
198
  end
@@ -205,8 +208,8 @@ module Steep
205
208
  def member(type_name, member)
206
209
  case member
207
210
  when RBS::AST::Members::MethodDefinition
208
- member.types.each do |method_type|
209
- method_type.each_type do |type|
211
+ member.overloads.each do |overload|
212
+ overload.method_type.each_type do |type|
210
213
  type_reference type, from: member
211
214
  end
212
215
  end
@@ -230,6 +233,8 @@ module Steep
230
233
  InstanceMethodName.new(type_name: type_name, method_name: member.name)
231
234
  when :singleton
232
235
  SingletonMethodName.new(type_name: type_name, method_name: member.name)
236
+ else
237
+ raise
233
238
  end
234
239
  index.add_method_declaration(method_name, member)
235
240
  end
@@ -240,6 +245,8 @@ module Steep
240
245
  InstanceMethodName.new(type_name: type_name, method_name: "#{member.name}=".to_sym)
241
246
  when :singleton
242
247
  SingletonMethodName.new(type_name: type_name, method_name: "#{member.name}=".to_sym)
248
+ else
249
+ raise
243
250
  end
244
251
  index.add_method_declaration(method_name, member)
245
252
  end
@@ -6,7 +6,7 @@ module Steep
6
6
  attr_reader :types_size
7
7
 
8
8
  def initialize(vars_size:, types_size:)
9
- @var_size = vars_size
9
+ @vars_size = vars_size
10
10
  @types_size = types_size
11
11
 
12
12
  super "Invalid substitution: vars.size=#{vars_size}, types.size=#{types_size}"
@@ -43,15 +43,15 @@ module Steep
43
43
  set = Set.new
44
44
 
45
45
  set.merge(dictionary.keys)
46
- set << AST::Types::Instance.instance unless instance_type.is_a?(AST::Types::Instance)
47
- set << AST::Types::Class.instance unless instance_type.is_a?(AST::Types::Class)
48
- set << AST::Types::Instance.instance unless instance_type.is_a?(AST::Types::Self)
46
+ set << AST::Types::Self.instance if self_type
47
+ set << AST::Types::Class.instance if module_type
48
+ set << AST::Types::Instance.instance if instance_type
49
49
 
50
50
  set
51
51
  end
52
52
 
53
53
  def to_s
54
- a = []
54
+ a = [] #: Array[String]
55
55
 
56
56
  dictionary.each do |x, ty|
57
57
  a << "#{x} -> #{ty}"
@@ -87,12 +87,13 @@ module Steep
87
87
  end
88
88
  end
89
89
 
90
- def self.build(vars, types = nil, instance_type: AST::Types::Instance.instance, module_type: AST::Types::Class.instance, self_type: AST::Types::Self.instance)
90
+ def self.build(vars, types = nil, instance_type: nil, module_type: nil, self_type: nil)
91
91
  types ||= vars.map {|var| AST::Types::Var.fresh(var) }
92
92
 
93
93
  raise InvalidSubstitutionError.new(vars_size: vars.size, types_size: types.size) unless vars.size == types.size
94
94
 
95
- dic = vars.zip(types).each.with_object({}) do |(var, type), d|
95
+ dic = vars.zip(types).each.with_object({}) do |(var, type), d| #$ Hash[Symbol, AST::Types::t]
96
+ type or raise
96
97
  d[var] = type
97
98
  end
98
99
 
@@ -130,9 +131,9 @@ module Steep
130
131
  end
131
132
  end
132
133
 
133
- @instance_type = instance_type.subst(s)
134
- @module_type = module_type.subst(s)
135
- @self_type = self_type.subst(s)
134
+ @instance_type = instance_type.subst(s) if instance_type
135
+ @module_type = module_type.subst(s) if module_type
136
+ @self_type = self_type.subst(s) if self_type
136
137
 
137
138
  self
138
139
  end
@@ -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.absolute_path(path)
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 block_given?
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
- collection_lock = target.collection_config_path&.then { |p| RBS::Collection::Config.lockfile_of(p) }
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,