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
@@ -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
@@ -270,9 +270,9 @@ module Steep
270
270
  mixin_constraints(definition, ancestors.included_modules || raise, immediate_self_types: ancestors.self_types).each do |relation, ancestor|
271
271
  checker.check(
272
272
  relation,
273
- self_type: AST::Types::Self.new,
274
- instance_type: AST::Types::Instance.new,
275
- class_type: AST::Types::Class.new,
273
+ self_type: AST::Types::Self.instance,
274
+ instance_type: AST::Types::Instance.instance,
275
+ class_type: AST::Types::Class.instance,
276
276
  constraints: Subtyping::Constraints.empty
277
277
  ).else do
278
278
  raise if ancestor.source.is_a?(Symbol)
@@ -314,16 +314,16 @@ module Steep
314
314
  relation = Subtyping::Relation.new(sub_type: var_type, super_type: parent_type)
315
315
  result1 = checker.check(
316
316
  relation,
317
- self_type: AST::Types::Self.new,
318
- instance_type: AST::Types::Instance.new,
319
- class_type: AST::Types::Class.new,
317
+ self_type: AST::Types::Self.instance,
318
+ instance_type: AST::Types::Instance.instance,
319
+ class_type: AST::Types::Class.instance,
320
320
  constraints: Subtyping::Constraints.empty
321
321
  )
322
322
  result2 = checker.check(
323
323
  relation.flip,
324
- self_type: AST::Types::Self.new,
325
- instance_type: AST::Types::Instance.new,
326
- class_type: AST::Types::Class.new,
324
+ self_type: AST::Types::Self.instance,
325
+ instance_type: AST::Types::Instance.instance,
326
+ class_type: AST::Types::Class.instance,
327
327
  constraints: Subtyping::Constraints.empty
328
328
  )
329
329
 
@@ -362,13 +362,13 @@ module Steep
362
362
  mixin_constraints(definition, ancestors.extended_modules, immediate_self_types: ancestors.self_types).each do |relation, ancestor|
363
363
  checker.check(
364
364
  relation,
365
- self_type: AST::Types::Self.new,
366
- instance_type: AST::Types::Instance.new,
367
- class_type: AST::Types::Class.new,
365
+ self_type: AST::Types::Self.instance ,
366
+ instance_type: AST::Types::Instance.instance,
367
+ class_type: AST::Types::Class.instance,
368
368
  constraints: Subtyping::Constraints.empty
369
369
  ).else do
370
370
  raise if ancestor.source.is_a?(Symbol)
371
-
371
+
372
372
  @errors << Diagnostic::Signature::ModuleSelfTypeError.new(
373
373
  name: name,
374
374
  location: ancestor.source&.location || raise,
@@ -390,14 +390,14 @@ module Steep
390
390
  # 4. none of the above (example: T = String, K = Integer)
391
391
 
392
392
  relation = Subtyping::Relation.new(sub_type: type, super_type: instance_type)
393
- if subtyping.check(relation, constraints: Subtyping::Constraints.empty, self_type: AST::Types::Self.new, instance_type: AST::Types::Instance.new, class_type: AST::Types::Class.new).success?
393
+ if subtyping.check(relation, constraints: Subtyping::Constraints.empty, self_type: AST::Types::Self.instance, instance_type: AST::Types::Instance.instance, class_type: AST::Types::Class.instance).success?
394
394
  # 1 or 2. Satisfies the condition, no narrowing because `type` is already more specific than/equals to `instance_type`
395
395
  [
396
396
  [type],
397
397
  []
398
398
  ]
399
399
  else
400
- if subtyping.check(relation.flip, constraints: Subtyping::Constraints.empty, self_type: AST::Types::Self.new, instance_type: AST::Types::Instance.new, class_type: AST::Types::Class.new).success?
400
+ if subtyping.check(relation.flip, constraints: Subtyping::Constraints.empty, self_type: AST::Types::Self.instance, instance_type: AST::Types::Instance.instance, class_type: AST::Types::Class.instance).success?
401
401
  # 3. Satisfied the condition, narrows to `instance_type`, but cannot remove it from *falsy* list
402
402
  [
403
403
  [instance_type],
data/lib/steep/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Steep
2
- VERSION = "1.3.0.pre.2"
2
+ VERSION = "1.4.0.dev.1"
3
3
  end
data/lib/steep.rb CHANGED
@@ -93,7 +93,6 @@ require "steep/type_inference/type_env_builder"
93
93
  require "steep/type_inference/logic_type_interpreter"
94
94
  require "steep/type_inference/multiple_assignment"
95
95
  require "steep/type_inference/method_call"
96
- require "steep/ast/types"
97
96
 
98
97
  require "steep/index/rbs_index"
99
98
  require "steep/index/signature_symbol_provider"
@@ -1,29 +1,18 @@
1
1
  ---
2
2
  sources:
3
- - name: ruby/gem_rbs_collection
3
+ - type: git
4
+ name: ruby/gem_rbs_collection
5
+ revision: 6f9f54a753a78c505e63e7f31a48b3f71f1b510d
4
6
  remote: https://github.com/ruby/gem_rbs_collection.git
5
- revision: main
6
7
  repo_dir: gems
7
8
  path: ".gem_rbs_collection"
8
9
  gems:
9
- - name: set
10
- version: '0'
11
- source:
12
- type: stdlib
13
- - name: rbs
14
- version: 2.8.0.pre.1
15
- source:
16
- type: rubygems
17
- - name: dbm
18
- version: '0'
19
- source:
20
- type: stdlib
21
10
  - name: activesupport
22
11
  version: '6.0'
23
12
  source:
24
13
  type: git
25
14
  name: ruby/gem_rbs_collection
26
- revision: 94fcc911186b127cffdfd7a378b5e0b511196089
15
+ revision: 6f9f54a753a78c505e63e7f31a48b3f71f1b510d
27
16
  remote: https://github.com/ruby/gem_rbs_collection.git
28
17
  repo_dir: gems
29
18
  - name: ast
@@ -31,23 +20,35 @@ gems:
31
20
  source:
32
21
  type: git
33
22
  name: ruby/gem_rbs_collection
34
- revision: 94fcc911186b127cffdfd7a378b5e0b511196089
23
+ revision: 6f9f54a753a78c505e63e7f31a48b3f71f1b510d
35
24
  remote: https://github.com/ruby/gem_rbs_collection.git
36
25
  repo_dir: gems
37
26
  - name: csv
38
27
  version: '0'
39
28
  source:
40
29
  type: stdlib
30
+ - name: date
31
+ version: '0'
32
+ source:
33
+ type: stdlib
34
+ - name: dbm
35
+ version: '0'
36
+ source:
37
+ type: stdlib
41
38
  - name: fileutils
42
39
  version: '0'
43
40
  source:
44
41
  type: stdlib
42
+ - name: forwardable
43
+ version: '0'
44
+ source:
45
+ type: stdlib
45
46
  - name: i18n
46
47
  version: '1.10'
47
48
  source:
48
49
  type: git
49
50
  name: ruby/gem_rbs_collection
50
- revision: 94fcc911186b127cffdfd7a378b5e0b511196089
51
+ revision: 6f9f54a753a78c505e63e7f31a48b3f71f1b510d
51
52
  remote: https://github.com/ruby/gem_rbs_collection.git
52
53
  repo_dir: gems
53
54
  - name: json
@@ -59,7 +60,7 @@ gems:
59
60
  source:
60
61
  type: git
61
62
  name: ruby/gem_rbs_collection
62
- revision: 94fcc911186b127cffdfd7a378b5e0b511196089
63
+ revision: 6f9f54a753a78c505e63e7f31a48b3f71f1b510d
63
64
  remote: https://github.com/ruby/gem_rbs_collection.git
64
65
  repo_dir: gems
65
66
  - name: logger
@@ -70,51 +71,51 @@ gems:
70
71
  version: '0'
71
72
  source:
72
73
  type: stdlib
74
+ - name: monitor
75
+ version: '0'
76
+ source:
77
+ type: stdlib
78
+ - name: mutex_m
79
+ version: '0'
80
+ source:
81
+ type: stdlib
82
+ - name: optparse
83
+ version: '0'
84
+ source:
85
+ type: stdlib
73
86
  - name: parallel
74
87
  version: '1.20'
75
88
  source:
76
89
  type: git
77
90
  name: ruby/gem_rbs_collection
78
- revision: 94fcc911186b127cffdfd7a378b5e0b511196089
91
+ revision: 6f9f54a753a78c505e63e7f31a48b3f71f1b510d
79
92
  remote: https://github.com/ruby/gem_rbs_collection.git
80
93
  repo_dir: gems
94
+ - name: pathname
95
+ version: '0'
96
+ source:
97
+ type: stdlib
81
98
  - name: rainbow
82
99
  version: '3.0'
83
100
  source:
84
101
  type: git
85
102
  name: ruby/gem_rbs_collection
86
- revision: 94fcc911186b127cffdfd7a378b5e0b511196089
103
+ revision: 6f9f54a753a78c505e63e7f31a48b3f71f1b510d
87
104
  remote: https://github.com/ruby/gem_rbs_collection.git
88
105
  repo_dir: gems
89
- - name: securerandom
90
- version: '0'
91
- source:
92
- type: stdlib
93
- - name: strscan
94
- version: '0'
95
- source:
96
- type: stdlib
97
- - name: pathname
98
- version: '0'
99
- source:
100
- type: stdlib
101
- - name: optparse
102
- version: '0'
103
- source:
104
- type: stdlib
105
- - name: tsort
106
- version: '0'
106
+ - name: rbs
107
+ version: 3.0.0.dev.1
107
108
  source:
108
- type: stdlib
109
+ type: rubygems
109
110
  - name: rdoc
110
111
  version: '0'
111
112
  source:
112
113
  type: stdlib
113
- - name: monitor
114
+ - name: securerandom
114
115
  version: '0'
115
116
  source:
116
117
  type: stdlib
117
- - name: date
118
+ - name: set
118
119
  version: '0'
119
120
  source:
120
121
  type: stdlib
@@ -122,7 +123,7 @@ gems:
122
123
  version: '0'
123
124
  source:
124
125
  type: stdlib
125
- - name: mutex_m
126
+ - name: strscan
126
127
  version: '0'
127
128
  source:
128
129
  type: stdlib
@@ -130,7 +131,7 @@ gems:
130
131
  version: '0'
131
132
  source:
132
133
  type: stdlib
133
- - name: forwardable
134
+ - name: tsort
134
135
  version: '0'
135
136
  source:
136
137
  type: stdlib
@@ -59,7 +59,7 @@ module Steep
59
59
 
60
60
  def self.top_type: () -> Types::Top
61
61
 
62
- def self.optional: (Types::t `type`) -> Types::Union
62
+ def self.optional: (Types::t) -> Types::t
63
63
 
64
64
  def self.true_type: () -> Types::Literal
65
65
 
@@ -6,15 +6,15 @@ module Steep
6
6
 
7
7
  def initialize: (?location: untyped?) -> void
8
8
 
9
- def ==: (untyped other) -> untyped
9
+ def ==: (untyped other) -> bool
10
10
 
11
- def hash: () -> untyped
11
+ def hash: () -> Integer
12
12
 
13
13
  alias eql? ==
14
14
 
15
- def subst: (untyped s) -> self
15
+ def subst: (Interface::Substitution s) -> Any
16
16
 
17
- def to_s: () -> "untyped"
17
+ def to_s: () -> String
18
18
 
19
19
  include Helper::NoFreeVariables
20
20
 
@@ -22,7 +22,7 @@ module Steep
22
22
 
23
23
  def level: () -> Array[Integer]
24
24
 
25
- def with_location: (untyped new_location) -> untyped
25
+ def with_location: (untyped new_location) -> Any
26
26
  end
27
27
  end
28
28
  end
@@ -6,15 +6,15 @@ module Steep
6
6
 
7
7
  def initialize: (?location: untyped?) -> void
8
8
 
9
- def ==: (untyped other) -> untyped
9
+ def ==: (untyped other) -> bool
10
10
 
11
- def hash: () -> untyped
11
+ def hash: () -> Integer
12
12
 
13
13
  alias eql? ==
14
14
 
15
- def subst: (untyped s) -> self
15
+ def subst: (Interface::Substitution) -> Boolean
16
16
 
17
- def to_s: () -> "bool"
17
+ def to_s: () -> String
18
18
 
19
19
  include Helper::NoFreeVariables
20
20
 
@@ -22,9 +22,9 @@ module Steep
22
22
 
23
23
  def level: () -> Array[Integer]
24
24
 
25
- def with_location: (untyped new_location) -> untyped
25
+ def with_location: (untyped new_location) -> Boolean
26
26
 
27
- def back_type: () -> untyped
27
+ def back_type: () -> t
28
28
  end
29
29
  end
30
30
  end
@@ -6,15 +6,15 @@ module Steep
6
6
 
7
7
  def initialize: (?location: untyped?) -> void
8
8
 
9
- def ==: (untyped other) -> untyped
9
+ def ==: (untyped other) -> bool
10
10
 
11
- def hash: () -> untyped
11
+ def hash: () -> Integer
12
12
 
13
13
  alias eql? ==
14
14
 
15
- def subst: (untyped s) -> self
15
+ def subst: (Interface::Substitution) -> Bot
16
16
 
17
- def to_s: () -> "bot"
17
+ def to_s: () -> String
18
18
 
19
19
  include Helper::NoFreeVariables
20
20
 
@@ -22,7 +22,7 @@ module Steep
22
22
 
23
23
  def level: () -> Array[Integer]
24
24
 
25
- def with_location: (untyped new_location) -> untyped
25
+ def with_location: (untyped new_location) -> Bot
26
26
  end
27
27
  end
28
28
  end
@@ -6,23 +6,24 @@ module Steep
6
6
 
7
7
  def initialize: (?location: untyped?) -> void
8
8
 
9
- def to_s: () -> "class"
9
+ def to_s: () -> String
10
10
 
11
- def ==: (untyped other) -> untyped
11
+ def ==: (untyped other) -> bool
12
12
 
13
- def hash: () -> untyped
13
+ def hash: () -> Integer
14
14
 
15
15
  alias eql? ==
16
16
 
17
- def subst: (untyped s) -> untyped
17
+ def subst: (Interface::Substitution s) -> t
18
18
 
19
- def free_variables: () -> untyped
19
+ @@fvs: Set[variable]
20
+ def free_variables: () -> Set[variable]
20
21
 
21
22
  include Helper::NoChild
22
23
 
23
24
  def level: () -> Array[Integer]
24
25
 
25
- def with_location: (untyped new_location) -> untyped
26
+ def with_location: (untyped new_location) -> Class
26
27
 
27
28
  self.@instance: Class
28
29
  def self.instance: () -> Class
@@ -7,9 +7,9 @@ module Steep
7
7
  end
8
8
 
9
9
  module NoFreeVariables
10
- @fvs: Set[Symbol]
10
+ @fvs: Set[variable]
11
11
 
12
- def free_variables: () -> Set[Symbol]
12
+ def free_variables: () -> Set[variable]
13
13
  end
14
14
 
15
15
  module NoChild
@@ -6,19 +6,20 @@ module Steep
6
6
 
7
7
  def initialize: (?location: untyped?) -> void
8
8
 
9
- def ==: (untyped other) -> untyped
9
+ def ==: (untyped other) -> bool
10
10
 
11
- def hash: () -> untyped
11
+ def hash: () -> Integer
12
12
 
13
13
  alias eql? ==
14
14
 
15
- def subst: (untyped s) -> untyped
15
+ def subst: (Interface::Substitution s) -> t
16
16
 
17
- def free_variables: () -> untyped
17
+ @@fvs: Set[variable]
18
+ def free_variables: () -> Set[variable]
18
19
 
19
20
  include Helper::NoChild
20
21
 
21
- def to_s: () -> "instance"
22
+ def to_s: () -> String
22
23
 
23
24
  def level: () -> Array[Integer]
24
25
 
@@ -2,33 +2,36 @@ module Steep
2
2
  module AST
3
3
  module Types
4
4
  class Intersection
5
- attr_reader types: untyped
5
+ attr_reader types: Array[t]
6
6
 
7
7
  attr_reader location: untyped
8
8
 
9
- def initialize: (types: untyped, ?location: untyped?) -> void
9
+ def initialize: (types: Array[t], ?location: untyped?) -> void
10
10
 
11
11
  def self.build: (types: Array[t], ?location: untyped?) -> t
12
12
 
13
- def ==: (untyped other) -> untyped
13
+ def ==: (untyped other) -> bool
14
14
 
15
- def hash: () -> untyped
15
+ @hash: Integer
16
+ def hash: () -> Integer
16
17
 
17
18
  alias eql? ==
18
19
 
19
- def subst: (untyped s) -> untyped
20
+ def subst: (Interface::Substitution s) -> t
20
21
 
21
- def to_s: () -> ::String
22
+ def to_s: () -> String
22
23
 
23
- def free_variables: () -> untyped
24
+ @fvs: Set[variable]
25
+ def free_variables: () -> Set[variable]
24
26
 
25
27
  include Helper::ChildrenLevel
26
28
 
27
- def each_child: () ?{ () -> untyped } -> untyped
29
+ def each_child: () { (t) -> void } -> void
30
+ | () -> Enumerator[t, void]
28
31
 
29
32
  def level: () -> Array[Integer]
30
33
 
31
- def with_location: (untyped new_location) -> untyped
34
+ def with_location: (untyped new_location) -> Intersection
32
35
  end
33
36
  end
34
37
  end
@@ -4,9 +4,11 @@ module Steep
4
4
  class Literal
5
5
  attr_reader location: untyped
6
6
 
7
- attr_reader value: untyped
7
+ type value = Integer | String | Symbol | TrueClass | FalseClass
8
8
 
9
- def initialize: (value: untyped, ?location: untyped?) -> void
9
+ attr_reader value: value
10
+
11
+ def initialize: (value: value, ?location: untyped?) -> void
10
12
 
11
13
  def ==: (untyped other) -> bool
12
14
 
@@ -14,7 +16,7 @@ module Steep
14
16
 
15
17
  alias eql? ==
16
18
 
17
- def subst: (Interface::Substitution s) -> self
19
+ def subst: (Interface::Substitution s) -> Literal
18
20
 
19
21
  def to_s: () -> String
20
22
 
@@ -24,7 +26,7 @@ module Steep
24
26
 
25
27
  def level: () -> Array[Integer]
26
28
 
27
- def with_location: (untyped new_location) -> self
29
+ def with_location: (untyped new_location) -> Literal
28
30
 
29
31
  def back_type: () -> AST::Types::Name::Instance
30
32
  end
@@ -2,24 +2,22 @@ module Steep
2
2
  module AST
3
3
  module Types
4
4
  module Logic
5
- type loc = RBS::Location[untyped, untyped]
6
-
7
5
  class Base
8
6
  attr_reader location: untyped
9
7
 
10
- def subst: (untyped s) -> self
8
+ def subst: (Interface::Substitution s) -> self
11
9
 
12
- def free_variables: () -> untyped
10
+ include Helper::NoFreeVariables
13
11
 
14
12
  include Helper::NoChild
15
13
 
16
- def hash: () -> untyped
14
+ def hash: () -> Integer
17
15
 
18
- def ==: (untyped other) -> untyped
16
+ def ==: (untyped other) -> bool
19
17
 
20
18
  alias eql? ==
21
19
 
22
- def to_s: () -> ::String
20
+ def to_s: () -> String
23
21
 
24
22
  def level: () -> Array[Integer]
25
23
  end
@@ -62,7 +60,7 @@ module Steep
62
60
 
63
61
  attr_reader type: t
64
62
 
65
- def initialize: (truthy: TypeInference::TypeEnv, falsy: TypeInference::TypeEnv, type: t, ?location: loc?) -> void
63
+ def initialize: (truthy: TypeInference::TypeEnv, falsy: TypeInference::TypeEnv, type: t, ?location: untyped) -> void
66
64
 
67
65
  def ==: (untyped other) -> bool
68
66
 
@@ -70,7 +68,7 @@ module Steep
70
68
 
71
69
  def hash: () -> Integer
72
70
 
73
- def inspect: () -> ::String
71
+ def inspect: () -> String
74
72
 
75
73
  alias to_s inspect
76
74
  end
@@ -1,6 +1,8 @@
1
1
  module Steep
2
2
  module AST
3
3
  module Types
4
+ # Types with names
5
+ #
4
6
  module Name
5
7
  class Base
6
8
  attr_reader location: untyped
@@ -25,15 +27,17 @@ module Steep
25
27
 
26
28
  alias eql? ==
27
29
 
30
+ @hash: Integer
28
31
  def hash: () -> Integer
29
32
 
30
33
  def to_s: () -> ::String
31
34
 
32
- def with_location: (untyped new_location) -> untyped
35
+ def with_location: (untyped new_location) -> self
33
36
 
34
37
  def subst: (Steep::Interface::Substitution s) -> self
35
38
 
36
- def free_variables: () -> Set[Symbol]
39
+ @fvs: Set[variable]
40
+ def free_variables: () -> Set[variable]
37
41
 
38
42
  def each_child: () { (t) -> void } -> void
39
43
  | () -> Enumerator[t, void]
@@ -52,7 +56,7 @@ module Steep
52
56
 
53
57
  def to_s: () -> ::String
54
58
 
55
- def with_location: (untyped new_location) -> untyped
59
+ def with_location: (untyped new_location) -> Singleton
56
60
 
57
61
  include Helper::NoChild
58
62
  end
@@ -6,15 +6,15 @@ module Steep
6
6
 
7
7
  def initialize: (?location: untyped?) -> void
8
8
 
9
- def ==: (untyped other) -> untyped
9
+ def ==: (untyped other) -> bool
10
10
 
11
- def hash: () -> untyped
11
+ def hash: () -> Integer
12
12
 
13
13
  alias eql? ==
14
14
 
15
- def subst: (untyped s) -> self
15
+ def subst: (Interface::Substitution s) -> Nil
16
16
 
17
- def to_s: () -> "nil"
17
+ def to_s: () -> String
18
18
 
19
19
  include Helper::NoFreeVariables
20
20
 
@@ -22,9 +22,9 @@ module Steep
22
22
 
23
23
  def level: () -> Array[Integer]
24
24
 
25
- def with_location: (untyped new_location) -> untyped
25
+ def with_location: (untyped new_location) -> Nil
26
26
 
27
- def back_type: () -> untyped
27
+ def back_type: () -> Name::Instance
28
28
  end
29
29
  end
30
30
  end
@@ -22,18 +22,23 @@ module Steep
22
22
 
23
23
  def to_s: () -> ::String
24
24
 
25
- def free_variables: () -> Set[Symbol]
25
+ @fvs: Set[variable]
26
+ def free_variables: () -> Set[variable]
26
27
 
27
28
  include Helper::ChildrenLevel
28
29
 
29
30
  def level: () -> Array[Integer]
30
31
 
31
- def closed?: () -> bool
32
-
33
32
  def with_location: (untyped new_location) -> Proc
34
33
 
35
34
  def map_type: () { (AST::Types::t) -> AST::Types::t } -> Proc
36
35
 
36
+ # Returns true if the proc requires exactly one argument
37
+ #
38
+ # * One required argument,
39
+ # * No optional/rest argument, and
40
+ # * No keywords
41
+ #
37
42
  def one_arg?: () -> bool
38
43
 
39
44
  def back_type: () -> AST::Types::t