steep 0.14.0 → 0.15.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (190) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +5 -0
  3. data/exe/rbs +1 -1
  4. data/lib/steep/annotation_parser.rb +4 -4
  5. data/lib/steep/ast/buffer.rb +11 -7
  6. data/lib/steep/ast/builtin.rb +8 -0
  7. data/lib/steep/ast/types/factory.rb +55 -55
  8. data/lib/steep/drivers/check.rb +20 -4
  9. data/lib/steep/drivers/langserver.rb +6 -1
  10. data/lib/steep/drivers/vendor.rb +2 -2
  11. data/lib/steep/project/completion_provider.rb +5 -11
  12. data/lib/steep/project/dsl.rb +14 -0
  13. data/lib/steep/project/file.rb +42 -46
  14. data/lib/steep/project/hover_content.rb +11 -5
  15. data/lib/steep/project/options.rb +25 -3
  16. data/lib/steep/project/target.rb +10 -4
  17. data/lib/steep/signature/errors.rb +1 -1
  18. data/lib/steep/signature/validator.rb +8 -8
  19. data/lib/steep/source.rb +1 -1
  20. data/lib/steep/type_construction.rb +987 -711
  21. data/lib/steep/type_inference/constant_env.rb +1 -1
  22. data/lib/steep/type_inference/context.rb +7 -3
  23. data/lib/steep/type_inference/context_array.rb +111 -0
  24. data/lib/steep/type_inference/local_variable_type_env.rb +226 -0
  25. data/lib/steep/type_inference/logic.rb +130 -0
  26. data/lib/steep/type_inference/type_env.rb +5 -69
  27. data/lib/steep/typing.rb +79 -22
  28. data/lib/steep/version.rb +1 -1
  29. data/lib/steep.rb +6 -1
  30. data/smoke/alias/Steepfile +1 -0
  31. data/smoke/and/Steepfile +1 -0
  32. data/smoke/array/Steepfile +1 -0
  33. data/smoke/array/b.rb +0 -2
  34. data/smoke/block/Steepfile +1 -0
  35. data/smoke/case/Steepfile +1 -0
  36. data/smoke/class/Steepfile +1 -0
  37. data/smoke/const/Steepfile +1 -0
  38. data/smoke/dstr/Steepfile +1 -0
  39. data/smoke/ensure/Steepfile +1 -0
  40. data/smoke/enumerator/Steepfile +1 -0
  41. data/smoke/extension/Steepfile +1 -0
  42. data/smoke/extension/c.rb +1 -0
  43. data/smoke/hash/Steepfile +1 -0
  44. data/smoke/hello/Steepfile +1 -0
  45. data/smoke/if/Steepfile +1 -0
  46. data/smoke/if/a.rb +1 -1
  47. data/smoke/implements/Steepfile +1 -0
  48. data/smoke/initialize/Steepfile +1 -0
  49. data/smoke/integer/Steepfile +1 -0
  50. data/smoke/interface/Steepfile +1 -0
  51. data/smoke/kwbegin/Steepfile +1 -0
  52. data/smoke/lambda/Steepfile +1 -0
  53. data/smoke/literal/Steepfile +1 -0
  54. data/smoke/map/Steepfile +1 -0
  55. data/smoke/method/Steepfile +1 -0
  56. data/smoke/module/Steepfile +1 -0
  57. data/smoke/regexp/Steepfile +1 -0
  58. data/smoke/regression/Steepfile +1 -0
  59. data/smoke/rescue/Steepfile +1 -0
  60. data/smoke/rescue/a.rb +1 -1
  61. data/smoke/self/Steepfile +1 -0
  62. data/smoke/skip/Steepfile +1 -0
  63. data/smoke/stdout/Steepfile +1 -0
  64. data/smoke/super/Steepfile +1 -0
  65. data/smoke/type_case/Steepfile +1 -0
  66. data/smoke/yield/Steepfile +1 -0
  67. data/steep.gemspec +1 -1
  68. data/vendor/ruby-signature/.gitignore +2 -2
  69. data/vendor/ruby-signature/README.md +2 -2
  70. data/vendor/ruby-signature/Rakefile +2 -2
  71. data/vendor/ruby-signature/bin/annotate-with-rdoc +14 -13
  72. data/vendor/ruby-signature/bin/console +1 -1
  73. data/vendor/ruby-signature/bin/sort +7 -6
  74. data/vendor/ruby-signature/bin/test_runner.rb +0 -1
  75. data/vendor/ruby-signature/docs/CONTRIBUTING.md +1 -1
  76. data/vendor/ruby-signature/docs/sigs.md +3 -3
  77. data/vendor/ruby-signature/docs/stdlib.md +1 -1
  78. data/vendor/ruby-signature/docs/syntax.md +9 -9
  79. data/vendor/ruby-signature/exe/rbs +5 -1
  80. data/vendor/ruby-signature/lib/rbs/ast/annotation.rb +27 -0
  81. data/vendor/ruby-signature/lib/rbs/ast/comment.rb +27 -0
  82. data/vendor/ruby-signature/lib/rbs/ast/declarations.rb +395 -0
  83. data/vendor/ruby-signature/lib/rbs/ast/members.rb +362 -0
  84. data/vendor/ruby-signature/lib/rbs/buffer.rb +50 -0
  85. data/vendor/ruby-signature/lib/rbs/builtin_names.rb +55 -0
  86. data/vendor/ruby-signature/lib/rbs/cli.rb +558 -0
  87. data/vendor/ruby-signature/lib/rbs/constant.rb +26 -0
  88. data/vendor/ruby-signature/lib/rbs/constant_table.rb +150 -0
  89. data/vendor/ruby-signature/lib/rbs/definition.rb +170 -0
  90. data/vendor/ruby-signature/lib/rbs/definition_builder.rb +919 -0
  91. data/vendor/ruby-signature/lib/rbs/environment.rb +281 -0
  92. data/vendor/ruby-signature/lib/rbs/environment_loader.rb +136 -0
  93. data/vendor/ruby-signature/lib/rbs/environment_walker.rb +124 -0
  94. data/vendor/ruby-signature/lib/rbs/errors.rb +187 -0
  95. data/vendor/ruby-signature/lib/rbs/location.rb +102 -0
  96. data/vendor/ruby-signature/lib/rbs/method_type.rb +123 -0
  97. data/vendor/ruby-signature/lib/rbs/namespace.rb +91 -0
  98. data/vendor/ruby-signature/lib/{ruby/signature → rbs}/parser.rb +21 -23
  99. data/vendor/ruby-signature/lib/{ruby/signature → rbs}/parser.y +18 -18
  100. data/vendor/ruby-signature/lib/rbs/prototype/rb.rb +553 -0
  101. data/vendor/ruby-signature/lib/rbs/prototype/rbi.rb +587 -0
  102. data/vendor/ruby-signature/lib/rbs/prototype/runtime.rb +381 -0
  103. data/vendor/ruby-signature/lib/rbs/substitution.rb +46 -0
  104. data/vendor/ruby-signature/lib/rbs/test/errors.rb +61 -0
  105. data/vendor/ruby-signature/lib/rbs/test/hook.rb +294 -0
  106. data/vendor/ruby-signature/lib/{ruby/signature → rbs}/test/setup.rb +7 -7
  107. data/vendor/ruby-signature/lib/rbs/test/spy.rb +325 -0
  108. data/vendor/ruby-signature/lib/rbs/test/test_helper.rb +183 -0
  109. data/vendor/ruby-signature/lib/rbs/test/type_check.rb +254 -0
  110. data/vendor/ruby-signature/lib/rbs/test.rb +26 -0
  111. data/vendor/ruby-signature/lib/rbs/type_name.rb +70 -0
  112. data/vendor/ruby-signature/lib/rbs/types.rb +936 -0
  113. data/vendor/ruby-signature/lib/rbs/variance_calculator.rb +138 -0
  114. data/vendor/ruby-signature/lib/rbs/vendorer.rb +47 -0
  115. data/vendor/ruby-signature/lib/rbs/version.rb +3 -0
  116. data/vendor/ruby-signature/lib/rbs/writer.rb +269 -0
  117. data/vendor/ruby-signature/lib/rbs.rb +64 -0
  118. data/vendor/ruby-signature/lib/ruby/signature.rb +4 -61
  119. data/vendor/ruby-signature/{ruby-signature.gemspec → rbs.gemspec} +4 -4
  120. data/vendor/ruby-signature/stdlib/abbrev/abbrev.rbs +58 -1
  121. data/vendor/ruby-signature/stdlib/base64/base64.rbs +69 -13
  122. data/vendor/ruby-signature/stdlib/benchmark/benchmark.rbs +372 -0
  123. data/vendor/ruby-signature/stdlib/builtin/builtin.rbs +9 -0
  124. data/vendor/ruby-signature/stdlib/builtin/dir.rbs +1 -7
  125. data/vendor/ruby-signature/stdlib/builtin/encoding.rbs +2 -1
  126. data/vendor/ruby-signature/stdlib/builtin/exception.rbs +3 -2
  127. data/vendor/ruby-signature/stdlib/builtin/file.rbs +902 -302
  128. data/vendor/ruby-signature/stdlib/builtin/gc.rbs +190 -68
  129. data/vendor/ruby-signature/stdlib/builtin/integer.rbs +3 -6
  130. data/vendor/ruby-signature/stdlib/builtin/kernel.rbs +6 -4
  131. data/vendor/ruby-signature/stdlib/builtin/marshal.rbs +146 -120
  132. data/vendor/ruby-signature/stdlib/builtin/math.rbs +310 -7
  133. data/vendor/ruby-signature/stdlib/builtin/method.rbs +11 -8
  134. data/vendor/ruby-signature/stdlib/builtin/module.rbs +959 -103
  135. data/vendor/ruby-signature/stdlib/builtin/proc.rbs +3 -0
  136. data/vendor/ruby-signature/stdlib/builtin/process.rbs +981 -108
  137. data/vendor/ruby-signature/stdlib/builtin/random.rbs +215 -41
  138. data/vendor/ruby-signature/stdlib/builtin/rb_config.rbs +47 -0
  139. data/vendor/ruby-signature/stdlib/builtin/string.rbs +9 -2
  140. data/vendor/ruby-signature/stdlib/builtin/string_io.rbs +282 -11
  141. data/vendor/ruby-signature/stdlib/builtin/symbol.rbs +11 -13
  142. data/vendor/ruby-signature/stdlib/builtin/thread.rbs +25 -29
  143. data/vendor/ruby-signature/stdlib/builtin/thread_group.rbs +1 -1
  144. data/vendor/ruby-signature/stdlib/builtin/time.rbs +875 -567
  145. data/vendor/ruby-signature/stdlib/builtin/trace_point.rbs +243 -44
  146. data/vendor/ruby-signature/stdlib/builtin/unbound_method.rbs +103 -109
  147. data/vendor/ruby-signature/stdlib/coverage/coverage.rbs +62 -0
  148. data/vendor/ruby-signature/stdlib/csv/csv.rbs +773 -0
  149. data/vendor/ruby-signature/stdlib/erb/erb.rbs +375 -1
  150. data/vendor/ruby-signature/stdlib/find/find.rbs +0 -4
  151. data/vendor/ruby-signature/stdlib/ipaddr/ipaddr.rbs +247 -0
  152. data/vendor/ruby-signature/stdlib/pathname/pathname.rbs +1088 -16
  153. data/vendor/ruby-signature/stdlib/set/set.rbs +251 -27
  154. metadata +49 -44
  155. data/exe/ruby-signature +0 -3
  156. data/vendor/ruby-signature/exe/ruby-signature +0 -7
  157. data/vendor/ruby-signature/lib/ruby/signature/ast/annotation.rb +0 -29
  158. data/vendor/ruby-signature/lib/ruby/signature/ast/comment.rb +0 -29
  159. data/vendor/ruby-signature/lib/ruby/signature/ast/declarations.rb +0 -391
  160. data/vendor/ruby-signature/lib/ruby/signature/ast/members.rb +0 -364
  161. data/vendor/ruby-signature/lib/ruby/signature/buffer.rb +0 -52
  162. data/vendor/ruby-signature/lib/ruby/signature/builtin_names.rb +0 -54
  163. data/vendor/ruby-signature/lib/ruby/signature/cli.rb +0 -555
  164. data/vendor/ruby-signature/lib/ruby/signature/constant.rb +0 -28
  165. data/vendor/ruby-signature/lib/ruby/signature/constant_table.rb +0 -152
  166. data/vendor/ruby-signature/lib/ruby/signature/definition.rb +0 -172
  167. data/vendor/ruby-signature/lib/ruby/signature/definition_builder.rb +0 -921
  168. data/vendor/ruby-signature/lib/ruby/signature/environment.rb +0 -283
  169. data/vendor/ruby-signature/lib/ruby/signature/environment_loader.rb +0 -138
  170. data/vendor/ruby-signature/lib/ruby/signature/environment_walker.rb +0 -126
  171. data/vendor/ruby-signature/lib/ruby/signature/errors.rb +0 -189
  172. data/vendor/ruby-signature/lib/ruby/signature/location.rb +0 -104
  173. data/vendor/ruby-signature/lib/ruby/signature/method_type.rb +0 -125
  174. data/vendor/ruby-signature/lib/ruby/signature/namespace.rb +0 -93
  175. data/vendor/ruby-signature/lib/ruby/signature/prototype/rb.rb +0 -444
  176. data/vendor/ruby-signature/lib/ruby/signature/prototype/rbi.rb +0 -579
  177. data/vendor/ruby-signature/lib/ruby/signature/prototype/runtime.rb +0 -383
  178. data/vendor/ruby-signature/lib/ruby/signature/substitution.rb +0 -48
  179. data/vendor/ruby-signature/lib/ruby/signature/test/errors.rb +0 -63
  180. data/vendor/ruby-signature/lib/ruby/signature/test/hook.rb +0 -290
  181. data/vendor/ruby-signature/lib/ruby/signature/test/spy.rb +0 -327
  182. data/vendor/ruby-signature/lib/ruby/signature/test/test_helper.rb +0 -185
  183. data/vendor/ruby-signature/lib/ruby/signature/test/type_check.rb +0 -256
  184. data/vendor/ruby-signature/lib/ruby/signature/test.rb +0 -28
  185. data/vendor/ruby-signature/lib/ruby/signature/type_name.rb +0 -72
  186. data/vendor/ruby-signature/lib/ruby/signature/types.rb +0 -932
  187. data/vendor/ruby-signature/lib/ruby/signature/variance_calculator.rb +0 -140
  188. data/vendor/ruby-signature/lib/ruby/signature/vendorer.rb +0 -49
  189. data/vendor/ruby-signature/lib/ruby/signature/version.rb +0 -5
  190. data/vendor/ruby-signature/lib/ruby/signature/writer.rb +0 -271
@@ -1,6 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- RUBY_27_OR_LATER = Gem::Version.new('2.7.0') <= Gem::Version.new(RUBY_VERSION)
4
3
  RUBY_27 = Gem::Version.new(RUBY_VERSION).yield_self do |ruby_version|
5
4
  Gem::Version.new('2.7.0') <= ruby_version && ruby_version < Gem::Version.new("2.8.0")
6
5
  end
@@ -57,7 +57,7 @@ You may find the *Good for first contributor* column where you can find some cla
57
57
  * Sort declarations members in RBS files.
58
58
  * `rbs validate -r LIB`
59
59
  Validate the syntax and some of the semantics.
60
- * `rake generate::stdlib_test[String]`
60
+ * `rake generate:stdlib_test[String]`
61
61
  Scaffold the stdlib test.
62
62
 
63
63
  ## Standard STDLIB Members Order
@@ -19,7 +19,7 @@ When you finish writing signature, you may want to test the signature.
19
19
  ruby-signature provides a feature to test your signature.
20
20
 
21
21
  ```
22
- $ RBS_TEST_TARGET='Foo::*' bundle exec ruby -r ruby/signature/test/setup test/foo_test.rb
22
+ $ RBS_TEST_TARGET='Foo::*' bundle exec ruby -r rbs/test/setup test/foo_test.rb
23
23
  ```
24
24
 
25
25
  The test installs instrumentations to spy the method calls and check if arguments/return values are correct with respect to the type of the method in signature.
@@ -79,11 +79,11 @@ The design of the signature testing aims to be non-intrusive. The setup is done
79
79
 
80
80
  ### Loading the library
81
81
 
82
- You need to require `ruby/signature/test/setup` for signature testing.
82
+ You need to require `rbs/test/setup` for signature testing.
83
83
  You can do it using `-r` option through command line argument or the `RUBYOPT` environment variable.
84
84
 
85
85
  ```
86
- $ ruby -r ruby/signature/test/setup run_tests.rb
86
+ $ ruby -r rbs/test/setup run_tests.rb
87
87
  $ RUBYOPT='-rruby/signature/test/setup' rake test
88
88
  ```
89
89
 
@@ -70,7 +70,7 @@ One non-trivial but absolutely better solution is to make a tool:
70
70
  The next step should be importing RDoc documents.
71
71
 
72
72
  ```
73
- $ bundle exec bin/annotate-with-rdoc stdlib/pathname/pathname.rbs
73
+ $ bin/annotate-with-rdoc stdlib/pathname/pathname.rbs
74
74
  Loading store from /Users/soutaro/.rbenv/versions/2.7.0-dev/share/ri/2.7.0/system...
75
75
  Loading store from /Users/soutaro/.rbenv/versions/2.7.0-dev/share/ri/2.7.0/site...
76
76
  Opening stdlib/pathname/pathname.rbs...
@@ -37,7 +37,7 @@ _namespace_ ::= (Empty namespace)
37
37
 
38
38
  _type-arguments_ ::= (No application)
39
39
  | `[` _type_ `,` ... `]` (Type application)
40
-
40
+
41
41
  _literal_ ::= _string-literal_
42
42
  | _symbol-literal_
43
43
  | _integer-literal_
@@ -159,7 +159,7 @@ They are scoped in _class/module/interface declaration_ or _generic method types
159
159
 
160
160
  ```
161
161
  class Ref[T] # Object is scoped in the class declaration.
162
- @value: T # Type variable `T`
162
+ @value: T # Type variable `T`
163
163
  def map: [X] { (T) -> X } -> Ref[X] # X is a type variable scoped in the method type.
164
164
  end
165
165
  ```
@@ -209,7 +209,7 @@ They are all equivalent for the type system; they are all _top type_.
209
209
  _method-type_ ::= `(` _parameters_ `) ->` _type_ # Method without block
210
210
  | `(` _parameters_ `) { (` _parameters_ `) -> ` _type_ `} ->` _type_ # Method with required block
211
211
  | `(` _parameters_ `) ?{ (` _parameters_ `) -> ` _type_ `} ->` _type_ # Method with optional block
212
-
212
+
213
213
  _parameters_ ::= _required-positionals_ _optional-positionals_ _rest-positional_ _trailing-positionals_ _keywords_
214
214
 
215
215
  _paramater_ ::= _type_ _var-name_ # Parameter with var name
@@ -263,7 +263,7 @@ _member_ ::= _ivar-member_ # Ivar definition
263
263
  | _alias-member_ # Alias
264
264
  | `public` # Public
265
265
  | `private` # Private
266
-
266
+
267
267
  _ivar-member_ ::= _ivar-name_ `:` _type_
268
268
 
269
269
  _method-member_ ::= `def` _method-name_ `:` _method-types_ # Instance method
@@ -291,7 +291,7 @@ _prepend-member_ ::= `prepend` _class-name_ _type-arguments_
291
291
 
292
292
  _alias-member_ ::= `alias` _method-name_ _method-name_
293
293
  | `alias self.` _method-name_ `self.` _method-name_
294
-
294
+
295
295
  _ivar-name_ ::= /@\w+/
296
296
  _method-name_ ::= ...
297
297
  | /`[^`]+`/
@@ -406,16 +406,16 @@ _decl_ ::= _class-decl_ # Class declaration
406
406
 
407
407
  _class-decl_ ::= `class` _class-name_ _module-type-parameters_ _members_ `end`
408
408
  | `class` _class-name_ _module-type-parameters_ `<` _class-name_ _type-arguments_ _members_ `end`
409
-
409
+
410
410
  _module-decl_ ::= `module` _module-name_ _module-type-parameters_ _members_ `end`
411
411
  | `module` _module-name_ _module-type-parameters_ `:` _class-name_ _type-arguments_ _members_ `end`
412
412
 
413
413
  _interface-decl_ ::= `interface` _interface-name_ _module-type-parameters_ _interface-members_ `end`
414
414
 
415
- _interface-members_ ::= _method-member_ # Method
415
+ _interface-members_ ::= _method-member_ # Method
416
416
  | _include-member_ # Mixin (include)
417
417
  | _alias-member_ # Alias
418
-
418
+
419
419
  _extension-decl_ ::= `extension` _class-name_ _type-parameters_ `(` _extension-name_ `)` _members_ `end`
420
420
 
421
421
  _type-alias-decl_ ::= `type` _alias-name_ `=` _type_
@@ -459,7 +459,7 @@ module Enumerable[A, B] : _Each[A, B]
459
459
  end
460
460
  ```
461
461
 
462
- The `Enumerable` method above requires `each` method for enumerating objects.
462
+ The `Enumerable` module above requires `each` method for enumerating objects.
463
463
 
464
464
  ### Interface declaration
465
465
 
@@ -1,3 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- load File.join(__dir__, "ruby-signature")
3
+ $LOAD_PATH << File.join(__dir__, "../lib")
4
+ require "rbs"
5
+ require "rbs/cli"
6
+
7
+ RBS::CLI.new(stdout: STDOUT, stderr: STDERR).run(ARGV.dup)
@@ -0,0 +1,27 @@
1
+ module RBS
2
+ module AST
3
+ class Annotation
4
+ attr_reader :string
5
+ attr_reader :location
6
+
7
+ def initialize(string:, location:)
8
+ @string = string
9
+ @location = location
10
+ end
11
+
12
+ def ==(other)
13
+ other.is_a?(Annotation) && other.string == string
14
+ end
15
+
16
+ alias eql? ==
17
+
18
+ def hash
19
+ self.class.hash ^ string.hash
20
+ end
21
+
22
+ def to_json(*a)
23
+ { string: string, location: location }.to_json(*a)
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,27 @@
1
+ module RBS
2
+ module AST
3
+ class Comment
4
+ attr_reader :string
5
+ attr_reader :location
6
+
7
+ def initialize(string:, location:)
8
+ @string = string
9
+ @location = location
10
+ end
11
+
12
+ def ==(other)
13
+ other.is_a?(Comment) && other.string == string
14
+ end
15
+
16
+ alias eql? ==
17
+
18
+ def hash
19
+ self.class.hash ^ string.hash
20
+ end
21
+
22
+ def to_json(*a)
23
+ { string: string, location: location }.to_json(*a)
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,395 @@
1
+ module RBS
2
+ module AST
3
+ module Declarations
4
+ class ModuleTypeParams
5
+ attr_reader :params
6
+
7
+ TypeParam = Struct.new(:name, :variance, :skip_validation, keyword_init: true)
8
+
9
+ def initialize()
10
+ @params = []
11
+ end
12
+
13
+ def add(param)
14
+ params << param
15
+ self
16
+ end
17
+
18
+ def ==(other)
19
+ other.is_a?(ModuleTypeParams) && other.params == params
20
+ end
21
+
22
+ alias eql? ==
23
+
24
+ def hash
25
+ params.hash
26
+ end
27
+
28
+ def [](name)
29
+ params.find {|p| p.name == name }
30
+ end
31
+
32
+ def to_json(*a)
33
+ {
34
+ params: params
35
+ }.to_json(*a)
36
+ end
37
+
38
+ def each(&block)
39
+ params.each(&block)
40
+ end
41
+
42
+ def self.empty
43
+ new
44
+ end
45
+
46
+ def variance(name)
47
+ self[name].variance
48
+ end
49
+
50
+ def skip_validation?(name)
51
+ self[name].skip_validation
52
+ end
53
+
54
+ def empty?
55
+ params.empty?
56
+ end
57
+
58
+ def size
59
+ params.size
60
+ end
61
+
62
+ def rename_to(names)
63
+ ModuleTypeParams.new().tap do |params|
64
+ names.each.with_index do |new_name, index|
65
+ param = self.params[index]
66
+ params.add(TypeParam.new(name: new_name, variance: param.variance, skip_validation: param.skip_validation))
67
+ end
68
+ end
69
+ end
70
+ end
71
+
72
+ class Class
73
+ class Super
74
+ attr_reader :name
75
+ attr_reader :args
76
+
77
+ def initialize(name:, args:)
78
+ @name = name
79
+ @args = args
80
+ end
81
+
82
+ def ==(other)
83
+ other.is_a?(Super) && other.name == name && other.args == args
84
+ end
85
+
86
+ alias eql? ==
87
+
88
+ def hash
89
+ self.class.hash ^ name.hash ^ args.hash
90
+ end
91
+
92
+ def to_json(*a)
93
+ {
94
+ name: name,
95
+ args: args
96
+ }.to_json(*a)
97
+ end
98
+ end
99
+
100
+ attr_reader :name
101
+ attr_reader :type_params
102
+ attr_reader :members
103
+ attr_reader :super_class
104
+ attr_reader :annotations
105
+ attr_reader :location
106
+ attr_reader :comment
107
+
108
+ def initialize(name:, type_params:, super_class:, members:, annotations:, location:, comment:)
109
+ @name = name
110
+ @type_params = type_params
111
+ @super_class = super_class
112
+ @members = members
113
+ @annotations = annotations
114
+ @location = location
115
+ @comment = comment
116
+ end
117
+
118
+ def ==(other)
119
+ other.is_a?(Class) &&
120
+ other.name == name &&
121
+ other.type_params == type_params &&
122
+ other.super_class == super_class &&
123
+ other.members == members
124
+ end
125
+
126
+ alias eql? ==
127
+
128
+ def hash
129
+ self.class.hash ^ name.hash ^ type_params.hash ^ super_class.hash ^ members.hash
130
+ end
131
+
132
+ def to_json(*a)
133
+ {
134
+ declaration: :class,
135
+ name: name,
136
+ type_params: type_params,
137
+ members: members,
138
+ super_class: super_class,
139
+ annotations: annotations,
140
+ location: location,
141
+ comment: comment
142
+ }.to_json(*a)
143
+ end
144
+ end
145
+
146
+ class Module
147
+ attr_reader :name
148
+ attr_reader :type_params
149
+ attr_reader :members
150
+ attr_reader :location
151
+ attr_reader :annotations
152
+ attr_reader :self_type
153
+ attr_reader :comment
154
+
155
+ def initialize(name:, type_params:, members:, self_type:, annotations:, location:, comment:)
156
+ @name = name
157
+ @type_params = type_params
158
+ @self_type = self_type
159
+ @members = members
160
+ @annotations = annotations
161
+ @location = location
162
+ @comment = comment
163
+ end
164
+
165
+ def ==(other)
166
+ other.is_a?(Module) &&
167
+ other.name == name &&
168
+ other.type_params == type_params &&
169
+ other.self_type == self_type &&
170
+ other.members == members
171
+ end
172
+
173
+ alias eql? ==
174
+
175
+ def hash
176
+ self.class.hash ^ name.hash ^ type_params.hash ^ self_type.hash ^ members.hash
177
+ end
178
+
179
+ def to_json(*a)
180
+ {
181
+ declaration: :module,
182
+ name: name,
183
+ type_params: type_params,
184
+ members: members,
185
+ self_type: self_type,
186
+ annotations: annotations,
187
+ location: location,
188
+ comment: comment
189
+ }.to_json(*a)
190
+ end
191
+ end
192
+
193
+ class Extension
194
+ attr_reader :name
195
+ attr_reader :type_params
196
+ attr_reader :extension_name
197
+ attr_reader :members
198
+ attr_reader :annotations
199
+ attr_reader :location
200
+ attr_reader :comment
201
+
202
+ def initialize(name:, type_params:, extension_name:, members:, annotations:, location:, comment:)
203
+ @name = name
204
+ @type_params = type_params
205
+ @extension_name = extension_name
206
+ @members = members
207
+ @annotations = annotations
208
+ @location = location
209
+ @comment = comment
210
+ end
211
+
212
+ def ==(other)
213
+ other.is_a?(Extension) &&
214
+ other.name == name &&
215
+ other.type_params == type_params &&
216
+ other.extension_name == extension_name &&
217
+ other.members == members
218
+ end
219
+
220
+ alias eql? ==
221
+
222
+ def hash
223
+ self.class.hash ^ name.hash ^ type_params.hash ^ extension_name.hash ^ members.hash
224
+ end
225
+
226
+ def to_json(*a)
227
+ {
228
+ declaration: :extension,
229
+ name: name,
230
+ type_params: type_params,
231
+ extension_name: extension_name,
232
+ members: members,
233
+ annotations: annotations,
234
+ location: location,
235
+ comment: comment
236
+ }.to_json(*a)
237
+ end
238
+ end
239
+
240
+ class Interface
241
+ attr_reader :name
242
+ attr_reader :type_params
243
+ attr_reader :members
244
+ attr_reader :annotations
245
+ attr_reader :location
246
+ attr_reader :comment
247
+
248
+ def initialize(name:, type_params:, members:, annotations:, location:, comment:)
249
+ @name = name
250
+ @type_params = type_params
251
+ @members = members
252
+ @annotations = annotations
253
+ @location = location
254
+ @comment = comment
255
+ end
256
+
257
+ def ==(other)
258
+ other.is_a?(Interface) &&
259
+ other.name == name &&
260
+ other.type_params == type_params &&
261
+ other.members == members
262
+ end
263
+
264
+ alias eql? ==
265
+
266
+ def hash
267
+ self.class.hash ^ type_params.hash ^ members.hash
268
+ end
269
+
270
+ def to_json(*a)
271
+ {
272
+ declaration: :interface,
273
+ name: name,
274
+ type_params: type_params,
275
+ members: members,
276
+ annotations: annotations,
277
+ location: location,
278
+ comment: comment
279
+ }.to_json(*a)
280
+ end
281
+ end
282
+
283
+ class Alias
284
+ attr_reader :name
285
+ attr_reader :type
286
+ attr_reader :annotations
287
+ attr_reader :location
288
+ attr_reader :comment
289
+
290
+ def initialize(name:, type:, annotations:, location:, comment:)
291
+ @name = name
292
+ @type = type
293
+ @annotations = annotations
294
+ @location = location
295
+ @comment = comment
296
+ end
297
+
298
+ def ==(other)
299
+ other.is_a?(Alias) &&
300
+ other.name == name &&
301
+ other.type == type
302
+ end
303
+
304
+ alias eql? ==
305
+
306
+ def hash
307
+ self.class.hash ^ name.hash ^ type.hash
308
+ end
309
+
310
+ def to_json(*a)
311
+ {
312
+ declaration: :alias,
313
+ name: name,
314
+ type: type,
315
+ annotations: annotations,
316
+ location: location,
317
+ comment: comment
318
+ }.to_json(*a)
319
+ end
320
+ end
321
+
322
+ class Constant
323
+ attr_reader :name
324
+ attr_reader :type
325
+ attr_reader :location
326
+ attr_reader :comment
327
+
328
+ def initialize(name:, type:, location:, comment:)
329
+ @name = name
330
+ @type = type
331
+ @location = location
332
+ @comment = comment
333
+ end
334
+
335
+ def ==(other)
336
+ other.is_a?(Constant) &&
337
+ other.name == name &&
338
+ other.type == type
339
+ end
340
+
341
+ alias eql? ==
342
+
343
+ def hash
344
+ self.class.hash ^ name.hash ^ type.hash
345
+ end
346
+
347
+ def to_json(*a)
348
+ {
349
+ declaration: :constant,
350
+ name: name,
351
+ type: type,
352
+ location: location,
353
+ comment: comment
354
+ }.to_json(*a)
355
+ end
356
+ end
357
+
358
+ class Global
359
+ attr_reader :name
360
+ attr_reader :type
361
+ attr_reader :location
362
+ attr_reader :comment
363
+
364
+ def initialize(name:, type:, location:, comment:)
365
+ @name = name
366
+ @type = type
367
+ @location = location
368
+ @comment = comment
369
+ end
370
+
371
+ def ==(other)
372
+ other.is_a?(Global) &&
373
+ other.name == name &&
374
+ other.type == type
375
+ end
376
+
377
+ alias eql? ==
378
+
379
+ def hash
380
+ self.class.hash ^ name.hash ^ type.hash
381
+ end
382
+
383
+ def to_json(*a)
384
+ {
385
+ declaration: :global,
386
+ name: name,
387
+ type: type,
388
+ location: location,
389
+ comment: comment
390
+ }.to_json(*a)
391
+ end
392
+ end
393
+ end
394
+ end
395
+ end