steep 1.3.0.pre.2 → 1.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) 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 +12 -0
  5. data/Gemfile.lock +20 -18
  6. data/Gemfile.steep +1 -2
  7. data/Gemfile.steep.lock +4 -5
  8. data/bin/rbs +21 -0
  9. data/bin/setup +1 -1
  10. data/lib/steep/ast/types/class.rb +9 -3
  11. data/lib/steep/ast/types/factory.rb +9 -2
  12. data/lib/steep/ast/types/instance.rb +8 -3
  13. data/lib/steep/ast/types/intersection.rb +6 -2
  14. data/lib/steep/ast/types/literal.rb +1 -1
  15. data/lib/steep/ast/types/logic.rb +1 -3
  16. data/lib/steep/ast/types/name.rb +11 -5
  17. data/lib/steep/ast/types/proc.rb +5 -5
  18. data/lib/steep/ast/types/record.rb +5 -1
  19. data/lib/steep/ast/types/self.rb +8 -2
  20. data/lib/steep/ast/types/tuple.rb +7 -5
  21. data/lib/steep/ast/types/union.rb +10 -4
  22. data/lib/steep/ast/types/var.rb +1 -1
  23. data/lib/steep/interface/substitution.rb +11 -10
  24. data/lib/steep/signature/validator.rb +13 -13
  25. data/lib/steep/type_inference/logic_type_interpreter.rb +2 -2
  26. data/lib/steep/version.rb +1 -1
  27. data/lib/steep.rb +0 -1
  28. data/rbs_collection.steep.lock.yaml +20 -12
  29. data/sig/steep/ast/builtin.rbs +1 -1
  30. data/sig/steep/ast/types/any.rbs +5 -5
  31. data/sig/steep/ast/types/boolean.rbs +6 -6
  32. data/sig/steep/ast/types/bot.rbs +5 -5
  33. data/sig/steep/ast/types/class.rbs +7 -6
  34. data/sig/steep/ast/types/helper.rbs +2 -2
  35. data/sig/steep/ast/types/instance.rbs +6 -5
  36. data/sig/steep/ast/types/intersection.rbs +12 -9
  37. data/sig/steep/ast/types/literal.rbs +6 -4
  38. data/sig/steep/ast/types/logic.rbs +7 -9
  39. data/sig/steep/ast/types/name.rbs +7 -3
  40. data/sig/steep/ast/types/nil.rbs +6 -6
  41. data/sig/steep/ast/types/proc.rbs +8 -3
  42. data/sig/steep/ast/types/record.rbs +7 -8
  43. data/sig/steep/ast/types/self.rbs +7 -6
  44. data/sig/steep/ast/types/top.rbs +6 -6
  45. data/sig/steep/ast/types/tuple.rbs +5 -4
  46. data/sig/steep/ast/types/union.rbs +8 -8
  47. data/sig/steep/ast/types/var.rbs +16 -11
  48. data/sig/steep/ast/types/void.rbs +5 -5
  49. data/sig/steep/ast/types.rbs +5 -26
  50. data/sig/steep/interface/substitution.rbs +9 -9
  51. data/steep.gemspec +3 -2
  52. metadata +25 -11
  53. data/lib/steep/ast/types.rb +0 -62
@@ -1,36 +1,41 @@
1
1
  module Steep
2
2
  module AST
3
3
  module Types
4
+ # Type variables
4
5
  class Var
5
- attr_reader name: untyped
6
+ attr_reader name: Symbol
6
7
 
7
8
  attr_reader location: untyped
8
9
 
9
- def initialize: (name: untyped, ?location: untyped?) -> void
10
+ def initialize: (name: Symbol, ?location: untyped?) -> void
10
11
 
11
- def ==: (untyped other) -> untyped
12
+ def ==: (untyped other) -> bool
12
13
 
13
- def hash: () -> untyped
14
+ def hash: () -> Integer
14
15
 
15
16
  alias eql? ==
16
17
 
17
- def self.fresh_name: (untyped name) -> untyped
18
+ self.@mutex: Thread::Mutex
19
+ self.@max: Integer
20
+
21
+ def self.fresh_name: (Symbol name) -> Symbol
18
22
 
19
23
  def self.fresh: (Symbol name, ?location: untyped?) -> Var
20
24
 
21
- def to_s: () -> untyped
25
+ def to_s: () -> String
22
26
 
23
- def subst: (untyped s) -> (untyped | self)
27
+ def subst: (Interface::Substitution s) -> t
24
28
 
25
- def free_variables: () -> untyped
29
+ @fvs: Set[variable]
30
+ def free_variables: () -> Set[variable]
26
31
 
27
32
  include Helper::NoChild
28
33
 
29
34
  def level: () -> Array[Integer]
30
-
31
- def update: (?name: untyped, ?location: untyped) -> untyped
32
35
 
33
- def with_location: (untyped new_location) -> untyped
36
+ def update: (?name: Symbol, ?location: untyped) -> Var
37
+
38
+ def with_location: (untyped new_location) -> Var
34
39
  end
35
40
  end
36
41
  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) -> Void
16
16
 
17
- def to_s: () -> "void"
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) -> Void
26
26
  end
27
27
  end
28
28
  end
@@ -5,33 +5,12 @@ module Steep
5
5
  | Class | Instance | Self
6
6
  | Intersection | Record | Tuple | Union
7
7
  | Name::Alias | Name::Instance | Name::Interface | Name::Singleton
8
- | Proc | Var | Logic::Base
8
+ | Proc | Var
9
+ | Logic::Not | Logic::ReceiverIsNil | Logic::ReceiverIsNotNil | Logic::ReceiverIsArg | Logic::ArgIsReceiver | Logic::ArgEqualsReceiver | Logic::Env
9
10
 
10
- class Masked
11
- attr_reader location: untyped
12
-
13
- attr_reader type: untyped
14
-
15
- attr_reader mask: untyped
16
-
17
- def initialize: (type: untyped, mask: untyped, location: untyped) -> void
18
-
19
- def ==: (untyped other) -> untyped
20
-
21
- alias eql? ==
22
-
23
- def hash: () -> untyped
24
-
25
- def to_json: (*untyped a) -> untyped
26
-
27
- def to_s: (?::Integer level) -> ::String
28
-
29
- def free_variables: () -> untyped
30
-
31
- def each_type: () { (untyped) -> untyped } -> untyped
32
-
33
- def sub: (untyped s) -> untyped
34
- end
11
+ # Variables and special types that is subject for substitution
12
+ #
13
+ type variable = Symbol | Class | Instance | Self
35
14
  end
36
15
  end
37
16
  end
@@ -2,28 +2,28 @@ module Steep
2
2
  module Interface
3
3
  class Substitution
4
4
  class InvalidSubstitutionError < StandardError
5
- attr_reader vars_size: untyped
5
+ attr_reader vars_size: Integer
6
6
 
7
- attr_reader types_size: untyped
7
+ attr_reader types_size: Integer
8
8
 
9
- def initialize: (vars_size: untyped, types_size: untyped) -> void
9
+ def initialize: (vars_size: Integer, types_size: Integer) -> void
10
10
  end
11
11
 
12
12
  attr_reader dictionary: Hash[Symbol, AST::Types::t]
13
13
 
14
- attr_reader instance_type: AST::Types::t
14
+ attr_reader instance_type: AST::Types::t?
15
15
 
16
- attr_reader module_type: AST::Types::t
16
+ attr_reader module_type: AST::Types::t?
17
17
 
18
- attr_reader self_type: AST::Types::t
18
+ attr_reader self_type: AST::Types::t?
19
19
 
20
- def initialize: (dictionary: Hash[Symbol, AST::Types::t], instance_type: AST::Types::t, module_type: AST::Types::t, self_type: AST::Types::t) -> void
20
+ def initialize: (dictionary: Hash[Symbol, AST::Types::t], instance_type: AST::Types::t?, module_type: AST::Types::t?, self_type: AST::Types::t?) -> void
21
21
 
22
22
  def self.empty: () -> instance
23
23
 
24
24
  def empty?: () -> bool
25
25
 
26
- def domain: () -> Set[AST::Types::t | Symbol]
26
+ def domain: () -> Set[AST::Types::variable]
27
27
 
28
28
  def to_s: () -> ::String
29
29
 
@@ -31,7 +31,7 @@ module Steep
31
31
 
32
32
  def key?: (Symbol var) -> bool
33
33
 
34
- def self.build: (Array[Symbol] vars, ?Array[AST::Types::t]? types, ?instance_type: AST::Types::t, ?module_type: AST::Types::t, ?self_type: AST::Types::t) -> Substitution
34
+ def self.build: (Array[Symbol] vars, ?Array[AST::Types::t]? types, ?instance_type: AST::Types::t?, ?module_type: AST::Types::t?, ?self_type: AST::Types::t?) -> Substitution
35
35
 
36
36
  def except: (Array[Symbol] vars) -> Substitution
37
37
 
data/steep.gemspec CHANGED
@@ -26,14 +26,14 @@ Gem::Specification.new do |spec|
26
26
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
27
27
  spec.require_paths = ["lib"]
28
28
 
29
- spec.required_ruby_version = '>= 2.6.0'
29
+ spec.required_ruby_version = '>= 2.7.0'
30
30
 
31
31
  spec.add_runtime_dependency "parser", ">= 3.1"
32
32
  spec.add_runtime_dependency "activesupport", ">= 5.1"
33
33
  spec.add_runtime_dependency "rainbow", ">= 2.2.2", "< 4.0"
34
34
  spec.add_runtime_dependency "listen", "~> 3.0"
35
35
  spec.add_runtime_dependency "language_server-protocol", ">= 3.15", "< 4.0"
36
- spec.add_runtime_dependency "rbs", ">= 2.8.0.pre"
36
+ spec.add_runtime_dependency "rbs", "~> 2.8.0"
37
37
  spec.add_runtime_dependency "parallel", ">= 1.0.0"
38
38
  spec.add_runtime_dependency "terminal-table", ">= 2", "< 4"
39
39
  spec.add_runtime_dependency "securerandom", ">= 0.1"
@@ -42,4 +42,5 @@ Gem::Specification.new do |spec|
42
42
  spec.add_runtime_dependency "fileutils", ">= 1.1.0"
43
43
  spec.add_runtime_dependency "strscan", ">= 1.0.0"
44
44
  spec.add_runtime_dependency "csv", ">= 3.0.9"
45
+ spec.add_runtime_dependency "pathname", ">= 0.2.1"
45
46
  end
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.3.0.pre.2
4
+ version: 1.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Soutaro Matsumoto
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-11-23 00:00:00.000000000 Z
11
+ date: 2023-03-08 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: 2.8.0.pre
101
+ version: 2.8.0
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: 2.8.0.pre
108
+ version: 2.8.0
109
109
  - !ruby/object:Gem::Dependency
110
110
  name: parallel
111
111
  requirement: !ruby/object:Gem::Requirement
@@ -224,6 +224,20 @@ dependencies:
224
224
  - - ">="
225
225
  - !ruby/object:Gem::Version
226
226
  version: 3.0.9
227
+ - !ruby/object:Gem::Dependency
228
+ name: pathname
229
+ requirement: !ruby/object:Gem::Requirement
230
+ requirements:
231
+ - - ">="
232
+ - !ruby/object:Gem::Version
233
+ version: 0.2.1
234
+ type: :runtime
235
+ prerelease: false
236
+ version_requirements: !ruby/object:Gem::Requirement
237
+ requirements:
238
+ - - ">="
239
+ - !ruby/object:Gem::Version
240
+ version: 0.2.1
227
241
  description: Gradual Typing for Ruby
228
242
  email:
229
243
  - matsumoto@soutaro.com
@@ -249,6 +263,7 @@ files:
249
263
  - bin/console
250
264
  - bin/output_rebaseline.rb
251
265
  - bin/output_test.rb
266
+ - bin/rbs
252
267
  - bin/setup
253
268
  - bin/steep
254
269
  - bin/steep-prof
@@ -261,7 +276,6 @@ files:
261
276
  - lib/steep/ast/node/type_application.rb
262
277
  - lib/steep/ast/node/type_assertion.rb
263
278
  - lib/steep/ast/type_params.rb
264
- - lib/steep/ast/types.rb
265
279
  - lib/steep/ast/types/any.rb
266
280
  - lib/steep/ast/types/boolean.rb
267
281
  - lib/steep/ast/types/bot.rb
@@ -761,14 +775,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
761
775
  requirements:
762
776
  - - ">="
763
777
  - !ruby/object:Gem::Version
764
- version: 2.6.0
778
+ version: 2.7.0
765
779
  required_rubygems_version: !ruby/object:Gem::Requirement
766
780
  requirements:
767
- - - ">"
781
+ - - ">="
768
782
  - !ruby/object:Gem::Version
769
- version: 1.3.1
783
+ version: '0'
770
784
  requirements: []
771
- rubygems_version: 3.3.7
785
+ rubygems_version: 3.4.6
772
786
  signing_key:
773
787
  specification_version: 4
774
788
  summary: Gradual Typing for Ruby
@@ -1,62 +0,0 @@
1
- module Steep
2
- module AST
3
- module Types
4
- class Masked
5
- attr_reader :location
6
- attr_reader :type
7
- attr_reader :mask
8
-
9
- def initialize(type:, mask:, location:)
10
- @type = type
11
- @mask = mask
12
- @location = location
13
- end
14
-
15
- def ==(other)
16
- other.is_a?(Masked) &&
17
- other.type == type &&
18
- other.mask == mask
19
- end
20
-
21
- alias eql? ==
22
-
23
- def hash
24
- self.class.hash ^ type.hash ^ mask.hash
25
- end
26
-
27
- def to_json(*a)
28
- { class: :masked,
29
- type: type,
30
- mask: mask,
31
- location: location }.to_json(*a)
32
- end
33
-
34
- def to_s(level = 0)
35
- "masked(#{type}|#{mask})"
36
- end
37
-
38
- def free_variables
39
- @fvs ||= Set.new.tap do |set|
40
- set.merge(type.free_variables)
41
- set.merge(mask.free_variables)
42
- end
43
- end
44
-
45
- def each_type(&block)
46
- if block_given?
47
- yield type
48
- yield mask
49
- else
50
- enum_for :each_type
51
- end
52
- end
53
-
54
- def sub(s)
55
- self.class.new(type: type.sub(s),
56
- mask: mask.sub(s),
57
- location: location)
58
- end
59
- end
60
- end
61
- end
62
- end