steep 0.13.0 → 0.16.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (214) hide show
  1. checksums.yaml +4 -4
  2. data/.gitmodules +0 -3
  3. data/CHANGELOG.md +28 -0
  4. data/Rakefile +0 -13
  5. data/bin/setup +0 -2
  6. data/bin/smoke_runner.rb +0 -1
  7. data/exe/steep +0 -1
  8. data/lib/steep.rb +33 -1
  9. data/lib/steep/annotation_parser.rb +4 -4
  10. data/lib/steep/ast/buffer.rb +11 -7
  11. data/lib/steep/ast/builtin.rb +8 -0
  12. data/lib/steep/ast/types/factory.rb +124 -89
  13. data/lib/steep/cli.rb +16 -1
  14. data/lib/steep/drivers/annotations.rb +1 -1
  15. data/lib/steep/drivers/check.rb +20 -4
  16. data/lib/steep/drivers/init.rb +5 -5
  17. data/lib/steep/drivers/langserver.rb +13 -287
  18. data/lib/steep/drivers/utils/driver_helper.rb +1 -1
  19. data/lib/steep/drivers/vendor.rb +2 -2
  20. data/lib/steep/drivers/watch.rb +97 -85
  21. data/lib/steep/drivers/worker.rb +51 -0
  22. data/lib/steep/project.rb +9 -5
  23. data/lib/steep/project/completion_provider.rb +298 -0
  24. data/lib/steep/project/dsl.rb +14 -0
  25. data/lib/steep/project/file.rb +54 -47
  26. data/lib/steep/project/hover_content.rb +17 -8
  27. data/lib/steep/project/options.rb +25 -3
  28. data/lib/steep/project/target.rb +40 -24
  29. data/lib/steep/server/base_worker.rb +56 -0
  30. data/lib/steep/server/code_worker.rb +151 -0
  31. data/lib/steep/server/interaction_worker.rb +281 -0
  32. data/lib/steep/server/master.rb +196 -0
  33. data/lib/steep/server/signature_worker.rb +148 -0
  34. data/lib/steep/server/utils.rb +36 -0
  35. data/lib/steep/server/worker_process.rb +62 -0
  36. data/lib/steep/signature/errors.rb +1 -1
  37. data/lib/steep/signature/validator.rb +13 -13
  38. data/lib/steep/source.rb +1 -1
  39. data/lib/steep/type_construction.rb +1004 -727
  40. data/lib/steep/type_inference/constant_env.rb +3 -11
  41. data/lib/steep/type_inference/context.rb +8 -3
  42. data/lib/steep/type_inference/context_array.rb +111 -0
  43. data/lib/steep/type_inference/local_variable_type_env.rb +226 -0
  44. data/lib/steep/type_inference/logic.rb +130 -0
  45. data/lib/steep/type_inference/type_env.rb +5 -69
  46. data/lib/steep/typing.rb +91 -23
  47. data/lib/steep/version.rb +1 -1
  48. data/smoke/alias/Steepfile +1 -0
  49. data/smoke/alias/a.rb +1 -1
  50. data/smoke/and/Steepfile +1 -0
  51. data/smoke/array/Steepfile +1 -0
  52. data/smoke/array/b.rb +0 -2
  53. data/smoke/block/Steepfile +1 -0
  54. data/smoke/case/Steepfile +1 -0
  55. data/smoke/class/Steepfile +1 -0
  56. data/smoke/const/Steepfile +1 -0
  57. data/smoke/dstr/Steepfile +1 -0
  58. data/smoke/ensure/Steepfile +1 -0
  59. data/smoke/enumerator/Steepfile +1 -0
  60. data/smoke/extension/Steepfile +1 -0
  61. data/smoke/extension/c.rb +1 -0
  62. data/smoke/hash/Steepfile +1 -0
  63. data/smoke/hello/Steepfile +1 -0
  64. data/smoke/if/Steepfile +1 -0
  65. data/smoke/if/a.rb +1 -1
  66. data/smoke/implements/Steepfile +1 -0
  67. data/smoke/initialize/Steepfile +1 -0
  68. data/smoke/integer/Steepfile +1 -0
  69. data/smoke/interface/Steepfile +1 -0
  70. data/smoke/kwbegin/Steepfile +1 -0
  71. data/smoke/lambda/Steepfile +1 -0
  72. data/smoke/literal/Steepfile +1 -0
  73. data/smoke/map/Steepfile +1 -0
  74. data/smoke/method/Steepfile +1 -0
  75. data/smoke/module/Steepfile +1 -0
  76. data/smoke/regexp/Steepfile +1 -0
  77. data/smoke/regexp/b.rb +4 -4
  78. data/smoke/regression/Steepfile +1 -0
  79. data/smoke/rescue/Steepfile +1 -0
  80. data/smoke/rescue/a.rb +1 -1
  81. data/smoke/self/Steepfile +1 -0
  82. data/smoke/skip/Steepfile +1 -0
  83. data/smoke/stdout/Steepfile +1 -0
  84. data/smoke/super/Steepfile +1 -0
  85. data/smoke/type_case/Steepfile +1 -0
  86. data/smoke/yield/Steepfile +1 -0
  87. data/steep.gemspec +8 -8
  88. metadata +38 -138
  89. data/exe/rbs +0 -3
  90. data/exe/ruby-signature +0 -3
  91. data/vendor/ruby-signature/.github/workflows/ruby.yml +0 -27
  92. data/vendor/ruby-signature/.gitignore +0 -12
  93. data/vendor/ruby-signature/.rubocop.yml +0 -15
  94. data/vendor/ruby-signature/BSDL +0 -22
  95. data/vendor/ruby-signature/COPYING +0 -56
  96. data/vendor/ruby-signature/Gemfile +0 -6
  97. data/vendor/ruby-signature/README.md +0 -93
  98. data/vendor/ruby-signature/Rakefile +0 -66
  99. data/vendor/ruby-signature/bin/annotate-with-rdoc +0 -156
  100. data/vendor/ruby-signature/bin/console +0 -14
  101. data/vendor/ruby-signature/bin/query-rdoc +0 -103
  102. data/vendor/ruby-signature/bin/setup +0 -10
  103. data/vendor/ruby-signature/bin/sort +0 -88
  104. data/vendor/ruby-signature/bin/test_runner.rb +0 -17
  105. data/vendor/ruby-signature/docs/CONTRIBUTING.md +0 -97
  106. data/vendor/ruby-signature/docs/sigs.md +0 -148
  107. data/vendor/ruby-signature/docs/stdlib.md +0 -152
  108. data/vendor/ruby-signature/docs/syntax.md +0 -528
  109. data/vendor/ruby-signature/exe/rbs +0 -3
  110. data/vendor/ruby-signature/exe/ruby-signature +0 -7
  111. data/vendor/ruby-signature/lib/ruby/signature.rb +0 -64
  112. data/vendor/ruby-signature/lib/ruby/signature/ast/annotation.rb +0 -29
  113. data/vendor/ruby-signature/lib/ruby/signature/ast/comment.rb +0 -29
  114. data/vendor/ruby-signature/lib/ruby/signature/ast/declarations.rb +0 -391
  115. data/vendor/ruby-signature/lib/ruby/signature/ast/members.rb +0 -364
  116. data/vendor/ruby-signature/lib/ruby/signature/buffer.rb +0 -52
  117. data/vendor/ruby-signature/lib/ruby/signature/builtin_names.rb +0 -54
  118. data/vendor/ruby-signature/lib/ruby/signature/cli.rb +0 -534
  119. data/vendor/ruby-signature/lib/ruby/signature/constant.rb +0 -28
  120. data/vendor/ruby-signature/lib/ruby/signature/constant_table.rb +0 -152
  121. data/vendor/ruby-signature/lib/ruby/signature/definition.rb +0 -172
  122. data/vendor/ruby-signature/lib/ruby/signature/definition_builder.rb +0 -921
  123. data/vendor/ruby-signature/lib/ruby/signature/environment.rb +0 -283
  124. data/vendor/ruby-signature/lib/ruby/signature/environment_loader.rb +0 -138
  125. data/vendor/ruby-signature/lib/ruby/signature/environment_walker.rb +0 -126
  126. data/vendor/ruby-signature/lib/ruby/signature/errors.rb +0 -189
  127. data/vendor/ruby-signature/lib/ruby/signature/location.rb +0 -104
  128. data/vendor/ruby-signature/lib/ruby/signature/method_type.rb +0 -125
  129. data/vendor/ruby-signature/lib/ruby/signature/namespace.rb +0 -93
  130. data/vendor/ruby-signature/lib/ruby/signature/parser.y +0 -1343
  131. data/vendor/ruby-signature/lib/ruby/signature/prototype/rb.rb +0 -441
  132. data/vendor/ruby-signature/lib/ruby/signature/prototype/rbi.rb +0 -579
  133. data/vendor/ruby-signature/lib/ruby/signature/prototype/runtime.rb +0 -383
  134. data/vendor/ruby-signature/lib/ruby/signature/substitution.rb +0 -48
  135. data/vendor/ruby-signature/lib/ruby/signature/test.rb +0 -28
  136. data/vendor/ruby-signature/lib/ruby/signature/test/errors.rb +0 -63
  137. data/vendor/ruby-signature/lib/ruby/signature/test/hook.rb +0 -290
  138. data/vendor/ruby-signature/lib/ruby/signature/test/setup.rb +0 -58
  139. data/vendor/ruby-signature/lib/ruby/signature/test/spy.rb +0 -324
  140. data/vendor/ruby-signature/lib/ruby/signature/test/test_helper.rb +0 -185
  141. data/vendor/ruby-signature/lib/ruby/signature/test/type_check.rb +0 -256
  142. data/vendor/ruby-signature/lib/ruby/signature/type_name.rb +0 -72
  143. data/vendor/ruby-signature/lib/ruby/signature/types.rb +0 -932
  144. data/vendor/ruby-signature/lib/ruby/signature/variance_calculator.rb +0 -140
  145. data/vendor/ruby-signature/lib/ruby/signature/vendorer.rb +0 -49
  146. data/vendor/ruby-signature/lib/ruby/signature/version.rb +0 -5
  147. data/vendor/ruby-signature/lib/ruby/signature/writer.rb +0 -271
  148. data/vendor/ruby-signature/ruby-signature.gemspec +0 -45
  149. data/vendor/ruby-signature/stdlib/abbrev/abbrev.rbs +0 -3
  150. data/vendor/ruby-signature/stdlib/base64/base64.rbs +0 -15
  151. data/vendor/ruby-signature/stdlib/builtin/array.rbs +0 -1997
  152. data/vendor/ruby-signature/stdlib/builtin/basic_object.rbs +0 -280
  153. data/vendor/ruby-signature/stdlib/builtin/binding.rbs +0 -177
  154. data/vendor/ruby-signature/stdlib/builtin/builtin.rbs +0 -35
  155. data/vendor/ruby-signature/stdlib/builtin/class.rbs +0 -145
  156. data/vendor/ruby-signature/stdlib/builtin/comparable.rbs +0 -116
  157. data/vendor/ruby-signature/stdlib/builtin/complex.rbs +0 -400
  158. data/vendor/ruby-signature/stdlib/builtin/constants.rbs +0 -37
  159. data/vendor/ruby-signature/stdlib/builtin/data.rbs +0 -5
  160. data/vendor/ruby-signature/stdlib/builtin/deprecated.rbs +0 -2
  161. data/vendor/ruby-signature/stdlib/builtin/dir.rbs +0 -419
  162. data/vendor/ruby-signature/stdlib/builtin/encoding.rbs +0 -606
  163. data/vendor/ruby-signature/stdlib/builtin/enumerable.rbs +0 -404
  164. data/vendor/ruby-signature/stdlib/builtin/enumerator.rbs +0 -260
  165. data/vendor/ruby-signature/stdlib/builtin/errno.rbs +0 -781
  166. data/vendor/ruby-signature/stdlib/builtin/errors.rbs +0 -582
  167. data/vendor/ruby-signature/stdlib/builtin/exception.rbs +0 -193
  168. data/vendor/ruby-signature/stdlib/builtin/false_class.rbs +0 -40
  169. data/vendor/ruby-signature/stdlib/builtin/fiber.rbs +0 -68
  170. data/vendor/ruby-signature/stdlib/builtin/fiber_error.rbs +0 -12
  171. data/vendor/ruby-signature/stdlib/builtin/file.rbs +0 -476
  172. data/vendor/ruby-signature/stdlib/builtin/file_test.rbs +0 -59
  173. data/vendor/ruby-signature/stdlib/builtin/float.rbs +0 -696
  174. data/vendor/ruby-signature/stdlib/builtin/gc.rbs +0 -121
  175. data/vendor/ruby-signature/stdlib/builtin/hash.rbs +0 -1029
  176. data/vendor/ruby-signature/stdlib/builtin/integer.rbs +0 -710
  177. data/vendor/ruby-signature/stdlib/builtin/io.rbs +0 -683
  178. data/vendor/ruby-signature/stdlib/builtin/kernel.rbs +0 -574
  179. data/vendor/ruby-signature/stdlib/builtin/marshal.rbs +0 -135
  180. data/vendor/ruby-signature/stdlib/builtin/match_data.rbs +0 -141
  181. data/vendor/ruby-signature/stdlib/builtin/math.rbs +0 -66
  182. data/vendor/ruby-signature/stdlib/builtin/method.rbs +0 -182
  183. data/vendor/ruby-signature/stdlib/builtin/module.rbs +0 -248
  184. data/vendor/ruby-signature/stdlib/builtin/nil_class.rbs +0 -82
  185. data/vendor/ruby-signature/stdlib/builtin/numeric.rbs +0 -409
  186. data/vendor/ruby-signature/stdlib/builtin/object.rbs +0 -824
  187. data/vendor/ruby-signature/stdlib/builtin/proc.rbs +0 -426
  188. data/vendor/ruby-signature/stdlib/builtin/process.rbs +0 -354
  189. data/vendor/ruby-signature/stdlib/builtin/random.rbs +0 -93
  190. data/vendor/ruby-signature/stdlib/builtin/range.rbs +0 -226
  191. data/vendor/ruby-signature/stdlib/builtin/rational.rbs +0 -424
  192. data/vendor/ruby-signature/stdlib/builtin/rb_config.rbs +0 -10
  193. data/vendor/ruby-signature/stdlib/builtin/regexp.rbs +0 -131
  194. data/vendor/ruby-signature/stdlib/builtin/ruby_vm.rbs +0 -14
  195. data/vendor/ruby-signature/stdlib/builtin/signal.rbs +0 -55
  196. data/vendor/ruby-signature/stdlib/builtin/string.rbs +0 -770
  197. data/vendor/ruby-signature/stdlib/builtin/string_io.rbs +0 -13
  198. data/vendor/ruby-signature/stdlib/builtin/struct.rbs +0 -40
  199. data/vendor/ruby-signature/stdlib/builtin/symbol.rbs +0 -230
  200. data/vendor/ruby-signature/stdlib/builtin/thread.rbs +0 -1112
  201. data/vendor/ruby-signature/stdlib/builtin/thread_group.rbs +0 -23
  202. data/vendor/ruby-signature/stdlib/builtin/time.rbs +0 -739
  203. data/vendor/ruby-signature/stdlib/builtin/trace_point.rbs +0 -91
  204. data/vendor/ruby-signature/stdlib/builtin/true_class.rbs +0 -46
  205. data/vendor/ruby-signature/stdlib/builtin/unbound_method.rbs +0 -159
  206. data/vendor/ruby-signature/stdlib/builtin/warning.rbs +0 -17
  207. data/vendor/ruby-signature/stdlib/erb/erb.rbs +0 -18
  208. data/vendor/ruby-signature/stdlib/find/find.rbs +0 -44
  209. data/vendor/ruby-signature/stdlib/pathname/pathname.rbs +0 -21
  210. data/vendor/ruby-signature/stdlib/prime/integer-extension.rbs +0 -23
  211. data/vendor/ruby-signature/stdlib/prime/prime.rbs +0 -188
  212. data/vendor/ruby-signature/stdlib/securerandom/securerandom.rbs +0 -9
  213. data/vendor/ruby-signature/stdlib/set/set.rbs +0 -77
  214. data/vendor/ruby-signature/stdlib/tmpdir/tmpdir.rbs +0 -53
@@ -1,189 +0,0 @@
1
- module Ruby
2
- module Signature
3
- class InvalidTypeApplicationError < StandardError
4
- attr_reader :type_name
5
- attr_reader :args
6
- attr_reader :params
7
- attr_reader :location
8
-
9
- def initialize(type_name:, args:, params:, location:)
10
- @type_name = type_name
11
- @args = args
12
- @params = params
13
- @location = location
14
- super "#{Location.to_string location}: #{type_name} expects parameters [#{params.each.map(&:name).join(", ")}], but given args [#{args.join(", ")}]"
15
- end
16
-
17
- def self.check!(type_name:, args:, params:, location:)
18
- unless args.size == params.size
19
- raise new(type_name: type_name, args: args, params: params, location: location)
20
- end
21
- end
22
- end
23
-
24
- class InvalidExtensionParameterError < StandardError
25
- attr_reader :type_name
26
- attr_reader :extension_name
27
- attr_reader :location
28
- attr_reader :extension_params
29
- attr_reader :class_params
30
-
31
- def initialize(type_name:, extension_name:, extension_params:, class_params:, location:)
32
- @type_name = type_name
33
- @extension_name = extension_name
34
- @extension_params = extension_params
35
- @class_params = class_params
36
- @location = location
37
-
38
- super "#{Location.to_string location}: Expected #{class_params.size} parameters to #{type_name} (#{extension_name}) but has #{extension_params.size} parameters"
39
- end
40
-
41
- def self.check!(type_name:, extension_name:, extension_params:, class_params:, location:)
42
- unless extension_params.size == class_params.size
43
- raise new(type_name: type_name,
44
- extension_name: extension_name,
45
- extension_params: extension_params,
46
- class_params: class_params,
47
- location: location)
48
- end
49
- end
50
- end
51
-
52
- class RecursiveAncestorError < StandardError
53
- attr_reader :ancestors
54
- attr_reader :location
55
-
56
- def initialize(ancestors:, location:)
57
- last = case last = ancestors.last
58
- when Definition::Ancestor::Singleton
59
- "singleton(#{last.name})"
60
- when Definition::Ancestor::Instance
61
- if last.args.empty?
62
- last.name.to_s
63
- else
64
- "#{last.name}[#{last.args.join(", ")}]"
65
- end
66
- end
67
-
68
- super "#{Location.to_string location}: Detected recursive ancestors: #{last}"
69
- end
70
-
71
- def self.check!(self_ancestor, ancestors:, location:)
72
- case self_ancestor
73
- when Definition::Ancestor::Instance
74
- if ancestors.any? {|a| a.is_a?(Definition::Ancestor::Instance) && a.name == self_ancestor.name }
75
- raise new(ancestors: ancestors + [self_ancestor], location: location)
76
- end
77
- when Definition::Ancestor::Singleton
78
- if ancestors.include?(self_ancestor)
79
- raise new(ancestors: ancestors + [self_ancestor], location: location)
80
- end
81
- end
82
- end
83
- end
84
-
85
- class NoTypeFoundError < StandardError
86
- attr_reader :type_name
87
- attr_reader :location
88
-
89
- def initialize(type_name:, location:)
90
- @type_name = type_name
91
- @location = location
92
-
93
- super "#{Location.to_string location}: Could not find #{type_name}"
94
- end
95
-
96
- def self.check!(type_name, env:, location:)
97
- env.find_type_decl(type_name) or
98
- raise new(type_name: type_name, location: location)
99
-
100
- type_name
101
- end
102
- end
103
-
104
- class DuplicatedMethodDefinitionError < StandardError
105
- attr_reader :decl
106
- attr_reader :location
107
-
108
- def initialize(decl:, name:, location:)
109
- decl_str = case decl
110
- when AST::Declarations::Interface, AST::Declarations::Class, AST::Declarations::Module
111
- decl.name.to_s
112
- when AST::Declarations::Extension
113
- "#{decl.name} (#{decl.extension_name})"
114
- end
115
-
116
- super "#{Location.to_string location}: #{decl_str} has duplicated method definition: #{name}"
117
- end
118
-
119
- def self.check!(decl:, methods:, name:, location:)
120
- if methods.key?(name)
121
- raise new(decl: decl, name: name, location: location)
122
- end
123
- end
124
- end
125
-
126
- class UnknownMethodAliasError < StandardError
127
- attr_reader :original_name
128
- attr_reader :aliased_name
129
- attr_reader :location
130
-
131
- def initialize(original_name:, aliased_name:, location:)
132
- @original_name = original_name
133
- @aliased_name = aliased_name
134
- @location = location
135
-
136
- super "#{Location.to_string location}: Unknown method alias name: #{original_name} => #{aliased_name}"
137
- end
138
-
139
- def self.check!(methods:, original_name:, aliased_name:, location:)
140
- unless methods.key?(original_name)
141
- raise new(original_name: original_name, aliased_name: aliased_name, location: location)
142
- end
143
- end
144
- end
145
-
146
- class DuplicatedDeclarationError < StandardError
147
- attr_reader :name
148
- attr_reader :decls
149
-
150
- def initialize(name, *decls)
151
- @name = name
152
- @decls = decls
153
-
154
- super "#{Location.to_string decls.last.location}: Duplicated declaration: #{name}"
155
- end
156
- end
157
-
158
- class InvalidVarianceAnnotationError < StandardError
159
- MethodTypeError = Struct.new(:method_name, :method_type, :param, keyword_init: true)
160
- InheritanceError = Struct.new(:super_class, :param, keyword_init: true)
161
- MixinError = Struct.new(:include_member, :param, keyword_init: true)
162
-
163
- attr_reader :decl
164
- attr_reader :errors
165
-
166
- def initialize(decl:, errors:)
167
- @decl = decl
168
- @errors = errors
169
-
170
- message = [
171
- "#{Location.to_string decl.location}: Invalid variance annotation: #{decl.name}"
172
- ]
173
-
174
- errors.each do |error|
175
- case error
176
- when MethodTypeError
177
- message << " MethodTypeError (#{error.param.name}): on `#{error.method_name}` #{error.method_type.to_s} (#{error.method_type.location&.start_line})"
178
- when InheritanceError
179
- message << " InheritanceError: #{error.super_class}"
180
- when MixinError
181
- message << " MixinError: #{error.include_member.name} (#{error.include_member.location&.start_line})"
182
- end
183
- end
184
-
185
- super message.join("\n")
186
- end
187
- end
188
- end
189
- end
@@ -1,104 +0,0 @@
1
- module Ruby
2
- module Signature
3
- class Location
4
- attr_reader :buffer
5
- attr_reader :start_pos
6
- attr_reader :end_pos
7
-
8
- def initialize(buffer:, start_pos:, end_pos:)
9
- @buffer = buffer
10
- @start_pos = start_pos
11
- @end_pos = end_pos
12
- end
13
-
14
- def inspect
15
- "#<#{self.class}:#{self.__id__} @buffer=#{buffer.name}, @pos=#{start_pos}...#{end_pos}, source='#{source.lines.first}', start_line=#{start_line}, start_column=#{start_column}>"
16
- end
17
-
18
- def name
19
- buffer.name
20
- end
21
-
22
- def start_line
23
- start_loc[0]
24
- end
25
-
26
- def start_column
27
- start_loc[1]
28
- end
29
-
30
- def end_line
31
- end_loc[0]
32
- end
33
-
34
- def end_column
35
- end_loc[1]
36
- end
37
-
38
- def start_loc
39
- @start_loc ||= buffer.pos_to_loc(start_pos)
40
- end
41
-
42
- def end_loc
43
- @end_loc ||= buffer.pos_to_loc(end_pos)
44
- end
45
-
46
- def source
47
- @source ||= buffer.content[start_pos...end_pos]
48
- end
49
-
50
- def to_s
51
- "#{name || "-"}:#{start_line}:#{start_column}...#{end_line}:#{end_column}"
52
- end
53
-
54
- def self.to_string(location, default: "*:*:*...*:*")
55
- location&.to_s || default
56
- end
57
-
58
- def ==(other)
59
- other.is_a?(Location) &&
60
- other.buffer == buffer &&
61
- other.start_pos == start_pos &&
62
- other.end_pos == end_pos
63
- end
64
-
65
- def +(other)
66
- if other
67
- raise "Invalid concat: buffer=#{buffer.name}, other.buffer=#{other.buffer.name}" unless other.buffer == buffer
68
-
69
- self.class.new(buffer: buffer,
70
- start_pos: start_pos,
71
- end_pos: other.end_pos)
72
- else
73
- self
74
- end
75
- end
76
-
77
- def self.concat(*locations)
78
- locations.inject {|l1, l2| l1 + l2 }
79
- end
80
-
81
- def pred?(loc)
82
- loc.is_a?(Location) &&
83
- loc.name == name &&
84
- loc.start_pos == end_pos
85
- end
86
-
87
- def to_json(*args)
88
- {
89
- start: {
90
- line: start_line,
91
- column: start_column
92
- },
93
- end: {
94
- line: end_line,
95
- column: end_column
96
- },
97
- buffer: {
98
- name: name&.to_s
99
- }
100
- }.to_json(*args)
101
- end
102
- end
103
- end
104
- end
@@ -1,125 +0,0 @@
1
- module Ruby
2
- module Signature
3
- class MethodType
4
- class Block
5
- attr_reader :type
6
- attr_reader :required
7
-
8
- def initialize(type:, required:)
9
- @type = type
10
- @required = required
11
- end
12
-
13
- def ==(other)
14
- other.is_a?(Block) &&
15
- other.type == type &&
16
- other.required == required
17
- end
18
-
19
- def to_json(*a)
20
- {
21
- type: type,
22
- required: required
23
- }.to_json(*a)
24
- end
25
-
26
- def sub(s)
27
- self.class.new(
28
- type: type.sub(s),
29
- required: required
30
- )
31
- end
32
- end
33
-
34
- attr_reader :type_params
35
- attr_reader :type
36
- attr_reader :block
37
- attr_reader :location
38
-
39
- def initialize(type_params:, type:, block:, location:)
40
- @type_params = type_params
41
- @type = type
42
- @block = block
43
- @location = location
44
- end
45
-
46
- def ==(other)
47
- other.is_a?(MethodType) &&
48
- other.type_params == type_params &&
49
- other.type == type &&
50
- other.block == block
51
- end
52
-
53
- def to_json(*a)
54
- {
55
- type_params: type_params,
56
- type: type,
57
- block: block,
58
- location: location
59
- }.to_json(*a)
60
- end
61
-
62
- def sub(s)
63
- s.without(*type_params).yield_self do |sub|
64
- map_type do |ty|
65
- ty.sub(sub)
66
- end
67
- end
68
- end
69
-
70
- def update(type_params: self.type_params, type: self.type, block: self.block, location: self.location)
71
- self.class.new(
72
- type_params: type_params,
73
- type: type,
74
- block: block,
75
- location: location
76
- )
77
- end
78
-
79
- def free_variables(set = Set.new)
80
- type.free_variables(set)
81
- block&.type&.free_variables(set)
82
- set.subtract(type_params)
83
- end
84
-
85
- def map_type(&block)
86
- self.class.new(
87
- type_params: type_params,
88
- type: type.map_type(&block),
89
- block: self.block&.yield_self do |b|
90
- Block.new(type: b.type.map_type(&block), required: b.required)
91
- end,
92
- location: location
93
- )
94
- end
95
-
96
- def each_type(&block)
97
- if block_given?
98
- type.each_type(&block)
99
- self.block&.yield_self do |b|
100
- b.type.each_type(&block)
101
- end
102
- else
103
- enum_for :each_type
104
- end
105
- end
106
-
107
- def to_s
108
- s = case
109
- when block && block.required
110
- "(#{type.param_to_s}) { (#{block.type.param_to_s}) -> #{block.type.return_to_s} } -> #{type.return_to_s}"
111
- when block
112
- "(#{type.param_to_s}) ?{ (#{block.type.param_to_s}) -> #{block.type.return_to_s} } -> #{type.return_to_s}"
113
- else
114
- "(#{type.param_to_s}) -> #{type.return_to_s}"
115
- end
116
-
117
- if type_params.empty?
118
- s
119
- else
120
- "[#{type_params.join(", ")}] #{s}"
121
- end
122
- end
123
- end
124
- end
125
- end
@@ -1,93 +0,0 @@
1
- module Ruby
2
- module Signature
3
- class Namespace
4
- attr_reader :path
5
-
6
- def initialize(path:, absolute:)
7
- @path = path
8
- @absolute = absolute
9
- end
10
-
11
- def self.empty
12
- new(path: [], absolute: false)
13
- end
14
-
15
- def self.root
16
- new(path: [], absolute: true)
17
- end
18
-
19
- def +(other)
20
- if other.absolute?
21
- other
22
- else
23
- self.class.new(path: path + other.path, absolute: absolute?)
24
- end
25
- end
26
-
27
- def append(component)
28
- self.class.new(path: path + [component], absolute: absolute?)
29
- end
30
-
31
- def parent
32
- raise "Parent with empty namespace" if empty?
33
- self.class.new(path: path.take(path.size - 1), absolute: absolute?)
34
- end
35
-
36
- def absolute?
37
- @absolute
38
- end
39
-
40
- def relative?
41
- !absolute?
42
- end
43
-
44
- def absolute!
45
- self.class.new(path: path, absolute: true)
46
- end
47
-
48
- def relative!
49
- self.class.new(path: path, absolute: false)
50
- end
51
-
52
- def empty?
53
- path.empty?
54
- end
55
-
56
- def ==(other)
57
- other.is_a?(Namespace) && other.path == path && other.absolute? == absolute?
58
- end
59
-
60
- alias eql? ==
61
-
62
- def hash
63
- self.class.hash ^ path.hash ^ absolute?.hash
64
- end
65
-
66
- def split
67
- [parent, path.last]
68
- end
69
-
70
- def to_s
71
- if empty?
72
- absolute? ? "::" : ""
73
- else
74
- s = path.join("::")
75
- absolute? ? "::#{s}::" : "#{s}::"
76
- end
77
- end
78
-
79
- def to_type_name
80
- parent, name = split
81
- TypeName.new(name: name, namespace: parent)
82
- end
83
-
84
- def self.parse(string)
85
- if string.start_with?("::")
86
- new(path: string.split("::").drop(1).map(&:to_sym), absolute: true)
87
- else
88
- new(path: string.split("::").map(&:to_sym), absolute: false)
89
- end
90
- end
91
- end
92
- end
93
- end