steep 0.1.0.pre2 → 0.1.0

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 (119) hide show
  1. checksums.yaml +5 -5
  2. data/.travis.yml +1 -1
  3. data/README.md +146 -33
  4. data/bin/smoke_runner.rb +43 -10
  5. data/lib/steep/ast/annotation/collection.rb +93 -0
  6. data/lib/steep/ast/annotation.rb +131 -0
  7. data/lib/steep/ast/buffer.rb +47 -0
  8. data/lib/steep/ast/location.rb +82 -0
  9. data/lib/steep/ast/method_type.rb +116 -0
  10. data/lib/steep/ast/signature/class.rb +33 -0
  11. data/lib/steep/ast/signature/const.rb +17 -0
  12. data/lib/steep/ast/signature/env.rb +123 -0
  13. data/lib/steep/ast/signature/extension.rb +21 -0
  14. data/lib/steep/ast/signature/gvar.rb +17 -0
  15. data/lib/steep/ast/signature/interface.rb +31 -0
  16. data/lib/steep/ast/signature/members.rb +71 -0
  17. data/lib/steep/ast/signature/module.rb +21 -0
  18. data/lib/steep/ast/type_params.rb +13 -0
  19. data/lib/steep/ast/types/any.rb +39 -0
  20. data/lib/steep/ast/types/bot.rb +39 -0
  21. data/lib/steep/ast/types/class.rb +35 -0
  22. data/lib/steep/ast/types/helper.rb +21 -0
  23. data/lib/steep/ast/types/instance.rb +39 -0
  24. data/lib/steep/ast/types/intersection.rb +74 -0
  25. data/lib/steep/ast/types/name.rb +124 -0
  26. data/lib/steep/ast/types/self.rb +39 -0
  27. data/lib/steep/ast/types/top.rb +39 -0
  28. data/lib/steep/ast/types/union.rb +74 -0
  29. data/lib/steep/ast/types/var.rb +57 -0
  30. data/lib/steep/ast/types/void.rb +35 -0
  31. data/lib/steep/cli.rb +28 -1
  32. data/lib/steep/drivers/annotations.rb +32 -0
  33. data/lib/steep/drivers/check.rb +53 -77
  34. data/lib/steep/drivers/scaffold.rb +303 -0
  35. data/lib/steep/drivers/utils/each_signature.rb +66 -0
  36. data/lib/steep/drivers/utils/validator.rb +115 -0
  37. data/lib/steep/drivers/validate.rb +39 -0
  38. data/lib/steep/errors.rb +291 -19
  39. data/lib/steep/interface/abstract.rb +44 -0
  40. data/lib/steep/interface/builder.rb +470 -0
  41. data/lib/steep/interface/instantiated.rb +126 -0
  42. data/lib/steep/interface/ivar_chain.rb +26 -0
  43. data/lib/steep/interface/method.rb +60 -0
  44. data/lib/steep/{interface.rb → interface/method_type.rb} +111 -100
  45. data/lib/steep/interface/substitution.rb +65 -0
  46. data/lib/steep/module_name.rb +116 -0
  47. data/lib/steep/parser.rb +1314 -814
  48. data/lib/steep/parser.y +536 -175
  49. data/lib/steep/source.rb +220 -25
  50. data/lib/steep/subtyping/check.rb +673 -0
  51. data/lib/steep/subtyping/constraints.rb +275 -0
  52. data/lib/steep/subtyping/relation.rb +41 -0
  53. data/lib/steep/subtyping/result.rb +126 -0
  54. data/lib/steep/subtyping/trace.rb +48 -0
  55. data/lib/steep/subtyping/variable_occurrence.rb +49 -0
  56. data/lib/steep/subtyping/variable_variance.rb +69 -0
  57. data/lib/steep/type_construction.rb +1630 -524
  58. data/lib/steep/type_inference/block_params.rb +100 -0
  59. data/lib/steep/type_inference/constant_env.rb +55 -0
  60. data/lib/steep/type_inference/send_args.rb +222 -0
  61. data/lib/steep/type_inference/type_env.rb +226 -0
  62. data/lib/steep/type_name.rb +27 -7
  63. data/lib/steep/typing.rb +4 -0
  64. data/lib/steep/version.rb +1 -1
  65. data/lib/steep.rb +71 -16
  66. data/smoke/and/a.rb +4 -2
  67. data/smoke/array/a.rb +4 -5
  68. data/smoke/array/b.rb +4 -4
  69. data/smoke/block/a.rb +2 -2
  70. data/smoke/block/a.rbi +2 -0
  71. data/smoke/block/b.rb +15 -0
  72. data/smoke/case/a.rb +3 -3
  73. data/smoke/class/a.rb +3 -3
  74. data/smoke/class/b.rb +0 -2
  75. data/smoke/class/d.rb +2 -2
  76. data/smoke/class/e.rb +1 -1
  77. data/smoke/class/f.rb +2 -2
  78. data/smoke/class/g.rb +8 -0
  79. data/smoke/const/a.rb +3 -3
  80. data/smoke/dstr/a.rb +1 -1
  81. data/smoke/ensure/a.rb +22 -0
  82. data/smoke/enumerator/a.rb +6 -6
  83. data/smoke/enumerator/b.rb +22 -0
  84. data/smoke/extension/a.rb +2 -2
  85. data/smoke/extension/b.rb +3 -3
  86. data/smoke/extension/c.rb +1 -1
  87. data/smoke/hello/hello.rb +2 -2
  88. data/smoke/if/a.rb +4 -2
  89. data/smoke/kwbegin/a.rb +8 -0
  90. data/smoke/literal/a.rb +5 -5
  91. data/smoke/method/a.rb +5 -5
  92. data/smoke/method/a.rbi +4 -0
  93. data/smoke/method/b.rb +29 -0
  94. data/smoke/module/a.rb +3 -3
  95. data/smoke/module/a.rbi +9 -0
  96. data/smoke/module/b.rb +2 -2
  97. data/smoke/module/c.rb +1 -1
  98. data/smoke/module/d.rb +5 -0
  99. data/smoke/module/e.rb +13 -0
  100. data/smoke/module/f.rb +13 -0
  101. data/smoke/rescue/a.rb +62 -0
  102. data/smoke/super/a.rb +2 -2
  103. data/smoke/type_case/a.rb +35 -0
  104. data/smoke/yield/a.rb +2 -2
  105. data/stdlib/builtin.rbi +463 -24
  106. data/steep.gemspec +3 -2
  107. metadata +91 -29
  108. data/lib/steep/annotation.rb +0 -223
  109. data/lib/steep/signature/class.rb +0 -450
  110. data/lib/steep/signature/extension.rb +0 -51
  111. data/lib/steep/signature/interface.rb +0 -49
  112. data/lib/steep/types/any.rb +0 -31
  113. data/lib/steep/types/class.rb +0 -27
  114. data/lib/steep/types/instance.rb +0 -27
  115. data/lib/steep/types/merge.rb +0 -32
  116. data/lib/steep/types/name.rb +0 -57
  117. data/lib/steep/types/union.rb +0 -42
  118. data/lib/steep/types/var.rb +0 -38
  119. data/lib/steep/types.rb +0 -4
@@ -1,57 +0,0 @@
1
- module Steep
2
- module Types
3
- class Name
4
- # @implements Steep__Types__Name
5
- # @type const TypeName::Interface: Steep__TypeName.class
6
- # @type const TypeName::Module: Steep__TypeName.class
7
- # @type const TypeName::Instance: Steep__TypeName.class
8
-
9
- # @dynamic name
10
- attr_reader :name
11
-
12
- # @dynamic params
13
- attr_reader :params
14
-
15
- def initialize(name:, params:)
16
- @name = name
17
- @params = params
18
- end
19
-
20
- def self.interface(name:, params: [])
21
- self.new(name: TypeName::Interface.new(name: name), params: params)
22
- end
23
-
24
- def self.module(name:, params: [], constructor: nil)
25
- self.new(name: TypeName::Module.new(name: name, constructor: constructor), params: params)
26
- end
27
-
28
- def self.instance(name:, params: [])
29
- self.new(name: TypeName::Instance.new(name: name), params: params)
30
- end
31
-
32
- def ==(other)
33
- other.is_a?(Name) && name == other.name && other.params == params
34
- end
35
-
36
- def hash
37
- name.hash ^ params.hash
38
- end
39
-
40
- def eql?(other)
41
- other == self
42
- end
43
-
44
- def closed?
45
- true
46
- end
47
-
48
- def substitute(klass:, instance:, params:)
49
- self.class.new(name: name, params: self.params.map {|t| t.substitute(klass: klass, instance: instance, params: params) })
50
- end
51
-
52
- def to_s
53
- "#{name}" + (params.empty? ? "" : "<#{params.map {|x| x.to_s }.join(", ")}>")
54
- end
55
- end
56
- end
57
- end
@@ -1,42 +0,0 @@
1
- module Steep
2
- module Types
3
- class Union
4
- # @implements Steep__Types__Union
5
- # @type const Union: Steep__Types__Union.module
6
-
7
- # @dynamic types
8
- attr_reader :types
9
-
10
- def initialize(types:)
11
- @types = types
12
- end
13
-
14
- def ==(other_)
15
- other = other_
16
-
17
- # @type var other: Steep__Types__Union
18
- other.is_a?(Union) && other.types.sort_by {|x| x.__id__ } == types.sort_by {|x| x.__id__ }
19
- end
20
-
21
- def hash
22
- types.hash
23
- end
24
-
25
- def eql?(other)
26
- self == other
27
- end
28
-
29
- def closed?
30
- types.all? {|x| x.closed? }
31
- end
32
-
33
- def substitute(klass:, instance:, params:)
34
- self.class.new(types: types.map {|t| t.substitute(klass: klass, instance: instance, params: params) })
35
- end
36
-
37
- def to_s
38
- types.join(" | ")
39
- end
40
- end
41
- end
42
- end
@@ -1,38 +0,0 @@
1
- module Steep
2
- module Types
3
- class Var
4
- # @implements Steep__Types__Var
5
-
6
- # @dynamic name
7
- attr_reader :name
8
-
9
- def initialize(name:)
10
- @name = name
11
- end
12
-
13
- def ==(other)
14
- other.is_a?(Var) && other.name == name
15
- end
16
-
17
- def hash
18
- name.hash
19
- end
20
-
21
- def eql?(other)
22
- self == other
23
- end
24
-
25
- def closed?
26
- true
27
- end
28
-
29
- def substitute(klass:, instance:, params:)
30
- params[name] || self
31
- end
32
-
33
- def to_s
34
- "'#{name}"
35
- end
36
- end
37
- end
38
- end
data/lib/steep/types.rb DELETED
@@ -1,4 +0,0 @@
1
- module Steep
2
- module Types
3
- end
4
- end