solargraph 0.59.0.dev.1 → 0.59.0.dev.2

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 (169) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/plugins.yml +4 -1
  3. data/.github/workflows/rspec.yml +3 -14
  4. data/.gitignore +1 -0
  5. data/.rubocop.yml +32 -5
  6. data/.rubocop_todo.yml +37 -931
  7. data/CHANGELOG.md +7 -1
  8. data/Gemfile +3 -1
  9. data/Rakefile +25 -23
  10. data/bin/solargraph +2 -1
  11. data/lib/solargraph/api_map/index.rb +5 -11
  12. data/lib/solargraph/api_map/source_to_yard.rb +9 -8
  13. data/lib/solargraph/api_map/store.rb +22 -20
  14. data/lib/solargraph/api_map.rb +50 -37
  15. data/lib/solargraph/bench.rb +44 -45
  16. data/lib/solargraph/complex_type/type_methods.rb +12 -15
  17. data/lib/solargraph/complex_type/unique_type.rb +54 -43
  18. data/lib/solargraph/complex_type.rb +69 -61
  19. data/lib/solargraph/convention/data_definition/data_assignment_node.rb +61 -61
  20. data/lib/solargraph/convention/data_definition/data_definition_node.rb +4 -4
  21. data/lib/solargraph/convention/data_definition.rb +1 -1
  22. data/lib/solargraph/convention/gemfile.rb +15 -15
  23. data/lib/solargraph/convention/gemspec.rb +23 -23
  24. data/lib/solargraph/convention/rakefile.rb +17 -17
  25. data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +1 -1
  26. data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +3 -3
  27. data/lib/solargraph/convention/struct_definition.rb +3 -3
  28. data/lib/solargraph/convention.rb +78 -78
  29. data/lib/solargraph/converters/dd.rb +19 -17
  30. data/lib/solargraph/converters/dl.rb +17 -15
  31. data/lib/solargraph/converters/dt.rb +17 -15
  32. data/lib/solargraph/converters/misc.rb +3 -1
  33. data/lib/solargraph/diagnostics/rubocop.rb +10 -10
  34. data/lib/solargraph/diagnostics/rubocop_helpers.rb +3 -3
  35. data/lib/solargraph/diagnostics/type_check.rb +10 -10
  36. data/lib/solargraph/diagnostics/update_errors.rb +37 -41
  37. data/lib/solargraph/doc_map.rb +9 -10
  38. data/lib/solargraph/equality.rb +3 -3
  39. data/lib/solargraph/gem_pins.rb +7 -5
  40. data/lib/solargraph/language_server/error_codes.rb +20 -20
  41. data/lib/solargraph/language_server/host/diagnoser.rb +89 -89
  42. data/lib/solargraph/language_server/host/dispatch.rb +2 -3
  43. data/lib/solargraph/language_server/host/message_worker.rb +2 -2
  44. data/lib/solargraph/language_server/host/sources.rb +1 -1
  45. data/lib/solargraph/language_server/host.rb +24 -21
  46. data/lib/solargraph/language_server/message/base.rb +97 -97
  47. data/lib/solargraph/language_server/message/client/register_capability.rb +13 -15
  48. data/lib/solargraph/language_server/message/completion_item/resolve.rb +58 -60
  49. data/lib/solargraph/language_server/message/extended/check_gem_version.rb +10 -11
  50. data/lib/solargraph/language_server/message/extended/document_gems.rb +32 -32
  51. data/lib/solargraph/language_server/message/extended/download_core.rb +20 -19
  52. data/lib/solargraph/language_server/message/extended/search.rb +20 -20
  53. data/lib/solargraph/language_server/message/initialize.rb +197 -191
  54. data/lib/solargraph/language_server/message/text_document/completion.rb +8 -8
  55. data/lib/solargraph/language_server/message/text_document/definition.rb +41 -34
  56. data/lib/solargraph/language_server/message/text_document/document_highlight.rb +23 -16
  57. data/lib/solargraph/language_server/message/text_document/document_symbol.rb +29 -21
  58. data/lib/solargraph/language_server/message/text_document/formatting.rb +6 -6
  59. data/lib/solargraph/language_server/message/text_document/hover.rb +3 -5
  60. data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +18 -11
  61. data/lib/solargraph/language_server/message/text_document/references.rb +23 -16
  62. data/lib/solargraph/language_server/message/text_document/rename.rb +26 -19
  63. data/lib/solargraph/language_server/message/text_document/signature_help.rb +2 -2
  64. data/lib/solargraph/language_server/message/text_document/type_definition.rb +25 -19
  65. data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +41 -35
  66. data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +48 -40
  67. data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +32 -26
  68. data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +27 -19
  69. data/lib/solargraph/language_server/message.rb +94 -94
  70. data/lib/solargraph/language_server/request.rb +29 -27
  71. data/lib/solargraph/language_server/transport/data_reader.rb +72 -74
  72. data/lib/solargraph/language_server/uri_helpers.rb +49 -49
  73. data/lib/solargraph/library.rb +28 -33
  74. data/lib/solargraph/location.rb +10 -12
  75. data/lib/solargraph/logging.rb +4 -4
  76. data/lib/solargraph/page.rb +92 -92
  77. data/lib/solargraph/parser/comment_ripper.rb +12 -4
  78. data/lib/solargraph/parser/flow_sensitive_typing.rb +32 -42
  79. data/lib/solargraph/parser/node_processor/base.rb +4 -4
  80. data/lib/solargraph/parser/node_processor.rb +1 -1
  81. data/lib/solargraph/parser/parser_gem/class_methods.rb +4 -4
  82. data/lib/solargraph/parser/parser_gem/flawed_builder.rb +19 -19
  83. data/lib/solargraph/parser/parser_gem/node_chainer.rb +20 -20
  84. data/lib/solargraph/parser/parser_gem/node_methods.rb +66 -65
  85. data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +12 -12
  86. data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +1 -1
  87. data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +3 -3
  88. data/lib/solargraph/parser/parser_gem/node_processors/defs_node.rb +38 -37
  89. data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +3 -3
  90. data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +2 -1
  91. data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +1 -1
  92. data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +3 -5
  93. data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +118 -112
  94. data/lib/solargraph/parser/parser_gem/node_processors/until_node.rb +29 -29
  95. data/lib/solargraph/parser/parser_gem/node_processors/when_node.rb +1 -1
  96. data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +1 -1
  97. data/lib/solargraph/parser/parser_gem.rb +14 -12
  98. data/lib/solargraph/parser/snippet.rb +2 -0
  99. data/lib/solargraph/parser.rb +25 -23
  100. data/lib/solargraph/pin/base.rb +78 -64
  101. data/lib/solargraph/pin/base_variable.rb +28 -71
  102. data/lib/solargraph/pin/block.rb +3 -2
  103. data/lib/solargraph/pin/breakable.rb +2 -0
  104. data/lib/solargraph/pin/callable.rb +23 -26
  105. data/lib/solargraph/pin/closure.rb +5 -4
  106. data/lib/solargraph/pin/common.rb +5 -2
  107. data/lib/solargraph/pin/compound_statement.rb +3 -3
  108. data/lib/solargraph/pin/constant.rb +43 -45
  109. data/lib/solargraph/pin/conversions.rb +9 -4
  110. data/lib/solargraph/pin/delegated_method.rb +4 -4
  111. data/lib/solargraph/pin/documenting.rb +3 -2
  112. data/lib/solargraph/pin/local_variable.rb +4 -4
  113. data/lib/solargraph/pin/method.rb +71 -70
  114. data/lib/solargraph/pin/namespace.rb +13 -12
  115. data/lib/solargraph/pin/parameter.rb +28 -27
  116. data/lib/solargraph/pin/proxy_type.rb +2 -0
  117. data/lib/solargraph/pin/reference.rb +17 -0
  118. data/lib/solargraph/pin/search.rb +2 -2
  119. data/lib/solargraph/pin/signature.rb +9 -14
  120. data/lib/solargraph/pin/symbol.rb +1 -0
  121. data/lib/solargraph/pin/until.rb +1 -3
  122. data/lib/solargraph/pin/while.rb +1 -3
  123. data/lib/solargraph/pin_cache.rb +16 -19
  124. data/lib/solargraph/position.rb +35 -17
  125. data/lib/solargraph/range.rb +10 -9
  126. data/lib/solargraph/rbs_map/conversions.rb +312 -206
  127. data/lib/solargraph/rbs_map/core_fills.rb +91 -84
  128. data/lib/solargraph/rbs_map/stdlib_map.rb +0 -1
  129. data/lib/solargraph/rbs_map.rb +3 -12
  130. data/lib/solargraph/server_methods.rb +16 -16
  131. data/lib/solargraph/shell.rb +63 -53
  132. data/lib/solargraph/source/chain/array.rb +39 -37
  133. data/lib/solargraph/source/chain/call.rb +49 -44
  134. data/lib/solargraph/source/chain/class_variable.rb +13 -13
  135. data/lib/solargraph/source/chain/constant.rb +3 -1
  136. data/lib/solargraph/source/chain/global_variable.rb +13 -13
  137. data/lib/solargraph/source/chain/hash.rb +8 -6
  138. data/lib/solargraph/source/chain/if.rb +11 -10
  139. data/lib/solargraph/source/chain/instance_variable.rb +3 -1
  140. data/lib/solargraph/source/chain/link.rb +99 -109
  141. data/lib/solargraph/source/chain/literal.rb +4 -6
  142. data/lib/solargraph/source/chain/or.rb +2 -4
  143. data/lib/solargraph/source/chain/q_call.rb +13 -11
  144. data/lib/solargraph/source/chain/variable.rb +15 -13
  145. data/lib/solargraph/source/chain/z_super.rb +28 -30
  146. data/lib/solargraph/source/chain.rb +24 -16
  147. data/lib/solargraph/source/change.rb +3 -3
  148. data/lib/solargraph/source/cursor.rb +18 -18
  149. data/lib/solargraph/source/encoding_fixes.rb +6 -7
  150. data/lib/solargraph/source/source_chainer.rb +46 -32
  151. data/lib/solargraph/source/updater.rb +1 -1
  152. data/lib/solargraph/source.rb +27 -29
  153. data/lib/solargraph/source_map/clip.rb +38 -30
  154. data/lib/solargraph/source_map/mapper.rb +52 -46
  155. data/lib/solargraph/source_map.rb +8 -4
  156. data/lib/solargraph/type_checker/rules.rb +8 -8
  157. data/lib/solargraph/type_checker.rb +95 -101
  158. data/lib/solargraph/version.rb +1 -1
  159. data/lib/solargraph/workspace/config.rb +10 -9
  160. data/lib/solargraph/workspace/gemspecs.rb +1 -1
  161. data/lib/solargraph/workspace.rb +21 -44
  162. data/lib/solargraph/yard_map/helpers.rb +6 -2
  163. data/lib/solargraph/yard_map/mapper/to_method.rb +8 -6
  164. data/lib/solargraph/yard_map/mapper/to_namespace.rb +1 -1
  165. data/lib/solargraph/yard_map/mapper.rb +12 -12
  166. data/lib/solargraph/yard_tags.rb +20 -20
  167. data/lib/solargraph.rb +5 -5
  168. data/solargraph.gemspec +35 -34
  169. metadata +28 -28
@@ -4,7 +4,7 @@ module Solargraph
4
4
  # A container for type data based on YARD type tags.
5
5
  #
6
6
  class ComplexType
7
- GENERIC_TAG_NAME = 'generic'.freeze
7
+ GENERIC_TAG_NAME = 'generic'
8
8
  # @!parse
9
9
  # include TypeMethods
10
10
  include Equality
@@ -19,7 +19,7 @@ module Solargraph
19
19
  # @type [Array<UniqueType>]
20
20
  items = types.flat_map(&:items).uniq(&:to_s)
21
21
  if items.any? { |i| i.name == 'false' } && items.any? { |i| i.name == 'true' }
22
- items.delete_if { |i| i.name == 'false' || i.name == 'true' }
22
+ items.delete_if { |i| %w[false true].include?(i.name) }
23
23
  items.unshift(UniqueType::BOOLEAN)
24
24
  end
25
25
  # @type [Array<UniqueType>]
@@ -29,17 +29,14 @@ module Solargraph
29
29
  @items = items
30
30
  end
31
31
 
32
- protected def equality_fields
33
- [self.class, items]
34
- end
35
-
36
32
  # @param api_map [ApiMap]
37
- # @param context [String]
33
+ # @param gates [Array<String>]
34
+ #
38
35
  # @return [ComplexType]
39
36
  def qualify api_map, *gates
40
37
  red = reduce_object
41
38
  types = red.items.map do |t|
42
- next t if ['nil', 'void', 'undefined'].include?(t.name)
39
+ next t if %w[nil void undefined].include?(t.name)
43
40
  next t if ['::Boolean'].include?(t.rooted_name)
44
41
  t.qualify api_map, *gates
45
42
  end
@@ -53,7 +50,10 @@ module Solargraph
53
50
  def resolve_generics_from_context generics_to_resolve, context_type, resolved_generic_values: {}
54
51
  return self unless generic?
55
52
 
56
- ComplexType.new(@items.map { |i| i.resolve_generics_from_context(generics_to_resolve, context_type, resolved_generic_values: resolved_generic_values) })
53
+ ComplexType.new(@items.map do |i|
54
+ i.resolve_generics_from_context(generics_to_resolve, context_type,
55
+ resolved_generic_values: resolved_generic_values)
56
+ end)
57
57
  end
58
58
 
59
59
  # @return [UniqueType]
@@ -84,14 +84,14 @@ module Solargraph
84
84
  # @sg-ignore Declared return type
85
85
  # ::Array<::Solargraph::ComplexType::UniqueType> does not match
86
86
  # inferred type ::Array<::Proc> for Solargraph::ComplexType#map
87
- def map(&block)
87
+ def map &block
88
88
  @items.map(&block)
89
89
  end
90
90
 
91
91
  # @yieldparam [UniqueType]
92
92
  # @return [Enumerable<UniqueType>]
93
93
  def each &block
94
- @items.each &block
94
+ @items.each(&block)
95
95
  end
96
96
 
97
97
  # @yieldparam [UniqueType]
@@ -102,17 +102,17 @@ module Solargraph
102
102
  return enum_for(__method__) unless block_given?
103
103
 
104
104
  @items.each do |item|
105
- item.each_unique_type &block
105
+ item.each_unique_type(&block)
106
106
  end
107
107
  end
108
108
 
109
109
  # @param new_name [String, nil]
110
110
  # @param make_rooted [Boolean, nil]
111
111
  # @param new_key_types [Array<ComplexType>, nil]
112
- # @param rooted [Boolean, nil]
112
+ # @param make_rooted [Boolean, nil]
113
113
  # @param new_subtypes [Array<ComplexType>, nil]
114
114
  # @return [self]
115
- def recreate(new_name: nil, make_rooted: nil, new_key_types: nil, new_subtypes: nil)
115
+ def recreate new_name: nil, make_rooted: nil, new_key_types: nil, new_subtypes: nil
116
116
  ComplexType.new(map do |ut|
117
117
  ut.recreate(new_name: new_name,
118
118
  make_rooted: make_rooted,
@@ -133,13 +133,13 @@ module Solargraph
133
133
 
134
134
  # @param index [Integer]
135
135
  # @return [UniqueType]
136
- def [](index)
136
+ def [] index
137
137
  @items[index]
138
138
  end
139
139
 
140
140
  # @return [Array<UniqueType>]
141
141
  def select &block
142
- @items.select &block
142
+ @items.select(&block)
143
143
  end
144
144
 
145
145
  # @return [String]
@@ -154,7 +154,9 @@ module Solargraph
154
154
  end
155
155
 
156
156
  # @param name [Symbol]
157
+ #
157
158
  # @return [Object, nil]
159
+ # @param [Array<Object>] args
158
160
  def method_missing name, *args, &block
159
161
  return if @items.first.nil?
160
162
  return @items.first.send(name, *args, &block) if respond_to_missing?(name)
@@ -163,7 +165,7 @@ module Solargraph
163
165
 
164
166
  # @param name [Symbol]
165
167
  # @param include_private [Boolean]
166
- def respond_to_missing?(name, include_private = false)
168
+ def respond_to_missing? name, include_private = false
167
169
  TypeMethods.public_instance_methods.include?(name) || super
168
170
  end
169
171
 
@@ -198,24 +200,29 @@ module Solargraph
198
200
  # @param api_map [ApiMap]
199
201
  # @param expected [ComplexType, ComplexType::UniqueType]
200
202
  # @param situation [:method_call, :return_type, :assignment]
201
- # @param allow_subtype_skew [Boolean] if false, check if any
202
- # subtypes of the expected type match the inferred type
203
- # @param allow_reverse_match [Boolean] if true, check if any subtypes
204
- # of the expected type match the inferred type
205
- # @param allow_empty_params [Boolean] if true, allow a general
206
- # inferred type without parameters to conform to a more specific
207
- # expected type
208
- # @param allow_any_match [Boolean] if true, any unique type
209
- # matched in the inferred qualifies as a match
210
- # @param allow_undefined [Boolean] if true, treat undefined as a
211
- # wildcard that matches anything
212
203
  # @param rules [Array<:allow_subtype_skew, :allow_empty_params, :allow_reverse_match, :allow_any_match, :allow_undefined, :allow_unresolved_generic, :allow_unmatched_interface>]
204
+ #
205
+ # allow_subtype_skew: if not provided, check if any subtypes of
206
+ # the expected type match the inferred type
207
+ #
208
+ # allow_reverse_match: check if any subtypes
209
+ # of the expected type match the inferred type
210
+ #
211
+ # allow_empty_params: allow a general inferred type without
212
+ # parameters to conform to a more specific expected type
213
+ #
214
+ # allow_any_match: any unique type matched in the inferred
215
+ # qualifies as a match
216
+ #
217
+ # allow_undefined: treat undefined as a wildcard that matches
218
+ # anything
219
+ #
213
220
  # @param variance [:invariant, :covariant, :contravariant]
214
221
  # @return [Boolean]
215
- def conforms_to?(api_map, expected,
222
+ def conforms_to? api_map, expected,
216
223
  situation,
217
224
  rules = [],
218
- variance: erased_variance(situation))
225
+ variance: erased_variance(situation)
219
226
  expected = expected.downcast_to_literal_if_possible
220
227
  inferred = downcast_to_literal_if_possible
221
228
 
@@ -256,14 +263,14 @@ module Solargraph
256
263
 
257
264
  # @yieldparam [UniqueType]
258
265
  def all? &block
259
- @items.all? &block
266
+ @items.all?(&block)
260
267
  end
261
268
 
262
269
  # @yieldparam [UniqueType]
263
270
  # @yieldreturn [Boolean]
264
271
  # @return [Boolean]
265
272
  def any? &block
266
- @items.compact.any? &block
273
+ @items.compact.any?(&block)
267
274
  end
268
275
 
269
276
  def selfy?
@@ -283,8 +290,10 @@ module Solargraph
283
290
  # @yieldparam t [UniqueType]
284
291
  # @yieldreturn [UniqueType]
285
292
  # @return [ComplexType]
286
- def transform(new_name = nil, &transform_type)
287
- raise "Please remove leading :: and set rooted with recreate() instead - #{new_name}" if new_name&.start_with?('::')
293
+ def transform new_name = nil, &transform_type
294
+ if new_name&.start_with?('::')
295
+ raise "Please remove leading :: and set rooted with recreate() instead - #{new_name}"
296
+ end
288
297
  ComplexType.new(map { |ut| ut.transform(new_name, &transform_type) })
289
298
  end
290
299
 
@@ -322,7 +331,7 @@ module Solargraph
322
331
  # @return [ComplexType]
323
332
  def reduce_class_type
324
333
  new_items = items.flat_map do |type|
325
- next type unless ['Module', 'Class'].include?(type.name)
334
+ next type unless %w[Module Class].include?(type.name)
326
335
  next type if type.all_params.empty?
327
336
 
328
337
  type.all_params
@@ -337,7 +346,7 @@ module Solargraph
337
346
  end
338
347
 
339
348
  # @param other [ComplexType, UniqueType]
340
- def erased_version_of?(other)
349
+ def erased_version_of? other
341
350
  return false if items.length != 1 || other.items.length != 1
342
351
 
343
352
  @items.first.erased_version_of?(other.items.first)
@@ -351,10 +360,6 @@ module Solargraph
351
360
 
352
361
  attr_reader :items
353
362
 
354
- def rooted?
355
- @items.all?(&:rooted?)
356
- end
357
-
358
363
  # @param exclude_types [ComplexType, nil]
359
364
  # @param api_map [ApiMap]
360
365
  # @return [ComplexType, self]
@@ -391,6 +396,10 @@ module Solargraph
391
396
 
392
397
  protected
393
398
 
399
+ def equality_fields
400
+ [self.class, items]
401
+ end
402
+
394
403
  # @return [ComplexType]
395
404
  def reduce_object
396
405
  new_items = items.flat_map do |ut|
@@ -410,13 +419,11 @@ module Solargraph
410
419
  # @example
411
420
  # ComplexType.parse 'String', 'Foo', 'nil' #=> [String, Foo, nil]
412
421
  #
413
- # @note
414
- # The `partial` parameter is used to indicate that the method is
415
- # receiving a string that will be used inside another ComplexType.
416
- # It returns arrays of ComplexTypes instead of a single cohesive one.
417
- # Consumers should not need to use this parameter; it should only be
418
- # used internally.
419
- #
422
+ # @param partial [Boolean] if true, method is receiving a string
423
+ # that will be used inside another ComplexType. It returns
424
+ # arrays of ComplexTypes instead of a single cohesive one.
425
+ # Consumers should not need to use this parameter; it should
426
+ # only be used internally.
420
427
  # @param strings [Array<String>] The type definitions to parse
421
428
  # @return [ComplexType]
422
429
  # # @overload parse(*strings, partial: false)
@@ -446,14 +453,14 @@ module Solargraph
446
453
  # @param char [String]
447
454
  type_string&.each_char do |char|
448
455
  if char == '='
449
- #raise ComplexTypeError, "Invalid = in type #{type_string}" unless curly_stack > 0
456
+ # raise ComplexTypeError, "Invalid = in type #{type_string}" unless curly_stack > 0
450
457
  elsif char == '<'
451
458
  point_stack += 1
452
459
  elsif char == '>'
453
- if subtype_string.end_with?('=') && curly_stack > 0
460
+ if subtype_string.end_with?('=') && curly_stack.positive?
454
461
  subtype_string += char
455
462
  elsif base.end_with?('=')
456
- raise ComplexTypeError, "Invalid hash thing" unless key_types.nil?
463
+ raise ComplexTypeError, 'Invalid hash thing' unless key_types.nil?
457
464
  # types.push ComplexType.new([UniqueType.new(base[0..-2].strip)])
458
465
  # @sg-ignore Need to add nil check here
459
466
  types.push UniqueType.parse(base[0..-2].strip, subtype_string)
@@ -466,7 +473,7 @@ module Solargraph
466
473
  subtype_string.clear
467
474
  next
468
475
  else
469
- raise ComplexTypeError, "Invalid close in type #{type_string}" if point_stack == 0
476
+ raise ComplexTypeError, "Invalid close in type #{type_string}" if point_stack.zero?
470
477
  point_stack -= 1
471
478
  subtype_string += char
472
479
  end
@@ -476,34 +483,37 @@ module Solargraph
476
483
  elsif char == '}'
477
484
  curly_stack -= 1
478
485
  subtype_string += char
479
- raise ComplexTypeError, "Invalid close in type #{type_string}" if curly_stack < 0
486
+ raise ComplexTypeError, "Invalid close in type #{type_string}" if curly_stack.negative?
480
487
  next
481
488
  elsif char == '('
482
489
  paren_stack += 1
483
490
  elsif char == ')'
484
491
  paren_stack -= 1
485
492
  subtype_string += char
486
- raise ComplexTypeError, "Invalid close in type #{type_string}" if paren_stack < 0
493
+ raise ComplexTypeError, "Invalid close in type #{type_string}" if paren_stack.negative?
487
494
  next
488
- elsif char == ',' && point_stack == 0 && curly_stack == 0 && paren_stack == 0
495
+ elsif char == ',' && point_stack.zero? && curly_stack.zero? && paren_stack.zero?
489
496
  # types.push ComplexType.new([UniqueType.new(base.strip, subtype_string.strip)])
490
497
  types.push UniqueType.parse(base.strip, subtype_string.strip)
491
498
  base.clear
492
499
  subtype_string.clear
493
500
  next
494
501
  end
495
- if point_stack == 0 && curly_stack == 0 && paren_stack == 0
502
+ if point_stack.zero? && curly_stack.zero? && paren_stack.zero?
496
503
  base.concat char
497
504
  else
498
505
  subtype_string.concat char
499
506
  end
500
507
  end
501
- raise ComplexTypeError, "Unclosed subtype in #{type_string}" if point_stack != 0 || curly_stack != 0 || paren_stack != 0
508
+ if point_stack != 0 || curly_stack != 0 || paren_stack != 0
509
+ raise ComplexTypeError,
510
+ "Unclosed subtype in #{type_string}"
511
+ end
502
512
  # types.push ComplexType.new([UniqueType.new(base, subtype_string)])
503
513
  types.push UniqueType.parse(base.strip, subtype_string.strip)
504
514
  end
505
515
  unless key_types.nil?
506
- raise ComplexTypeError, "Invalid use of key/value parameters" unless partial
516
+ raise ComplexTypeError, 'Invalid use of key/value parameters' unless partial
507
517
  return key_types if types.empty?
508
518
  return [key_types, types]
509
519
  end
@@ -515,7 +525,7 @@ module Solargraph
515
525
  # @param strings [Array<String>]
516
526
  # @return [ComplexType]
517
527
  def try_parse *strings
518
- parse *strings
528
+ parse(*strings)
519
529
  rescue ComplexTypeError => e
520
530
  Solargraph.logger.info "Error parsing complex type `#{strings.join(', ')}`: #{e.message}"
521
531
  ComplexType::UNDEFINED
@@ -540,9 +550,7 @@ module Solargraph
540
550
  # @param dst [String]
541
551
  # @return [String]
542
552
  def reduce_class dst
543
- while dst =~ /^(Class|Module)\<(.*?)\>$/
544
- dst = dst.sub(/^(Class|Module)\</, '').sub(/\>$/, '')
545
- end
553
+ dst = dst.sub(/^(Class|Module)</, '').sub(/>$/, '') while dst =~ /^(Class|Module)<(.*?)>$/
546
554
  dst
547
555
  end
548
556
  end
@@ -1,61 +1,61 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Convention
5
- module DataDefinition
6
- # A node wrapper for a Data definition via const assignment.
7
- # @example
8
- # MyData = Data.new(:bar, :baz) do
9
- # def foo
10
- # end
11
- # end
12
- class DataAssignmentNode < DataDefintionNode
13
- class << self
14
- # @example
15
- # s(:casgn, nil, :Foo,
16
- # s(:block,
17
- # s(:send,
18
- # s(:const, nil, :Data), :define,
19
- # s(:sym, :bar),
20
- # s(:sym, :baz)),
21
- # s(:args),
22
- # s(:def, :foo,
23
- # s(:args),
24
- # s(:send, nil, :bar))))
25
- # @param node [::Parser::AST::Node]
26
- def match?(node)
27
- return false unless node&.type == :casgn
28
- return false if node.children[2].nil?
29
-
30
- data_node = if node.children[2].type == :block
31
- node.children[2].children[0]
32
- else
33
- node.children[2]
34
- end
35
-
36
- data_definition_node?(data_node)
37
- end
38
- end
39
-
40
- def class_name
41
- if node.children[0]
42
- Parser::NodeMethods.unpack_name(node.children[0]) + "::#{node.children[1]}"
43
- else
44
- node.children[1].to_s
45
- end
46
- end
47
-
48
- private
49
-
50
- # @return [Parser::AST::Node]
51
- def data_node
52
- if node.children[2].type == :block
53
- node.children[2].children[0]
54
- else
55
- node.children[2]
56
- end
57
- end
58
- end
59
- end
60
- end
61
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Convention
5
+ module DataDefinition
6
+ # A node wrapper for a Data definition via const assignment.
7
+ # @example
8
+ # MyData = Data.new(:bar, :baz) do
9
+ # def foo
10
+ # end
11
+ # end
12
+ class DataAssignmentNode < DataDefintionNode
13
+ class << self
14
+ # @example
15
+ # s(:casgn, nil, :Foo,
16
+ # s(:block,
17
+ # s(:send,
18
+ # s(:const, nil, :Data), :define,
19
+ # s(:sym, :bar),
20
+ # s(:sym, :baz)),
21
+ # s(:args),
22
+ # s(:def, :foo,
23
+ # s(:args),
24
+ # s(:send, nil, :bar))))
25
+ # @param node [::Parser::AST::Node]
26
+ def match? node
27
+ return false unless node&.type == :casgn
28
+ return false if node.children[2].nil?
29
+
30
+ data_node = if node.children[2].type == :block
31
+ node.children[2].children[0]
32
+ else
33
+ node.children[2]
34
+ end
35
+
36
+ data_definition_node?(data_node)
37
+ end
38
+ end
39
+
40
+ def class_name
41
+ if node.children[0]
42
+ Parser::NodeMethods.unpack_name(node.children[0]) + "::#{node.children[1]}"
43
+ else
44
+ node.children[1].to_s
45
+ end
46
+ end
47
+
48
+ private
49
+
50
+ # @return [Parser::AST::Node]
51
+ def data_node
52
+ if node.children[2].type == :block
53
+ node.children[2].children[0]
54
+ else
55
+ node.children[2]
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -27,7 +27,7 @@ module Solargraph
27
27
  # s(:send, nil, :bar)))
28
28
  #
29
29
  # @param node [Parser::AST::Node]
30
- def match?(node)
30
+ def match? node
31
31
  return false unless node&.type == :class
32
32
 
33
33
  data_definition_node?(node.children[1])
@@ -37,7 +37,7 @@ module Solargraph
37
37
 
38
38
  # @param data_node [Parser::AST::Node]
39
39
  # @return [Boolean]
40
- def data_definition_node?(data_node)
40
+ def data_definition_node? data_node
41
41
  return false unless data_node.is_a?(::Parser::AST::Node)
42
42
  return false unless data_node&.type == :send
43
43
  return false unless data_node.children[0]&.type == :const
@@ -49,7 +49,7 @@ module Solargraph
49
49
  end
50
50
 
51
51
  # @param node [Parser::AST::Node]
52
- def initialize(node)
52
+ def initialize node
53
53
  @node = node
54
54
  end
55
55
 
@@ -85,7 +85,7 @@ module Solargraph
85
85
  # @return [Array<Parser::AST::Node>]
86
86
  def data_attribute_nodes
87
87
  # @sg-ignore Need to add nil check here
88
- data_node.children[2..-1]
88
+ data_node.children[2..]
89
89
  end
90
90
  end
91
91
  end
@@ -93,7 +93,7 @@ module Solargraph
93
93
  # @param attribute_node [Parser::AST::Node]
94
94
  # @param attribute_name [String]
95
95
  # @return [String, nil]
96
- def attribute_comments(attribute_node, attribute_name)
96
+ def attribute_comments attribute_node, attribute_name
97
97
  data_comments = comments_for(attribute_node)
98
98
  return if data_comments.nil? || data_comments.empty?
99
99
 
@@ -1,15 +1,15 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Convention
5
- class Gemfile < Base
6
- def local source_map
7
- return EMPTY_ENVIRON unless File.basename(source_map.filename) == 'Gemfile'
8
- @environ ||= Environ.new(
9
- requires: ['bundler'],
10
- domains: ['Bundler::Dsl']
11
- )
12
- end
13
- end
14
- end
15
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Convention
5
+ class Gemfile < Base
6
+ def local source_map
7
+ return EMPTY_ENVIRON unless File.basename(source_map.filename) == 'Gemfile'
8
+ @local ||= Environ.new(
9
+ requires: ['bundler'],
10
+ domains: ['Bundler::Dsl']
11
+ )
12
+ end
13
+ end
14
+ end
15
+ end
@@ -1,23 +1,23 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Convention
5
- class Gemspec < Base
6
- def local source_map
7
- return Convention::Base::EMPTY_ENVIRON unless File.basename(source_map.filename).end_with?('.gemspec')
8
- @environ ||= Environ.new(
9
- requires: ['rubygems'],
10
- pins: [
11
- Solargraph::Pin::Reference::Override.from_comment(
12
- 'Gem::Specification.new',
13
- %(
14
- @yieldparam [self]
15
- ),
16
- source: :gemspec
17
- )
18
- ]
19
- )
20
- end
21
- end
22
- end
23
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Convention
5
+ class Gemspec < Base
6
+ def local source_map
7
+ return Convention::Base::EMPTY_ENVIRON unless File.basename(source_map.filename).end_with?('.gemspec')
8
+ @local ||= Environ.new(
9
+ requires: ['rubygems'],
10
+ pins: [
11
+ Solargraph::Pin::Reference::Override.from_comment(
12
+ 'Gem::Specification.new',
13
+ %(
14
+ @yieldparam [self]
15
+ ),
16
+ source: :gemspec
17
+ )
18
+ ]
19
+ )
20
+ end
21
+ end
22
+ end
23
+ end
@@ -1,17 +1,17 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Convention
5
- class Rakefile < Base
6
- def local source_map
7
- basename = File.basename(source_map.filename)
8
- return EMPTY_ENVIRON unless basename.end_with?('.rake') || basename == 'Rakefile'
9
-
10
- @environ ||= Environ.new(
11
- requires: ['rake'],
12
- domains: ['Rake::DSL']
13
- )
14
- end
15
- end
16
- end
17
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Convention
5
+ class Rakefile < Base
6
+ def local source_map
7
+ basename = File.basename(source_map.filename)
8
+ return EMPTY_ENVIRON unless basename.end_with?('.rake') || basename == 'Rakefile'
9
+
10
+ @local ||= Environ.new(
11
+ requires: ['rake'],
12
+ domains: ['Rake::DSL']
13
+ )
14
+ end
15
+ end
16
+ end
17
+ end
@@ -24,7 +24,7 @@ module Solargraph
24
24
  # s(:send, nil, :bar))))
25
25
  #
26
26
  # @param node [Parser::AST::Node]
27
- def match?(node)
27
+ def match? node
28
28
  return false unless node&.type == :casgn
29
29
  return false if node.children[2].nil?
30
30
 
@@ -27,7 +27,7 @@ module Solargraph
27
27
  # s(:send, nil, :bar)))
28
28
  #
29
29
  # @param node [Parser::AST::Node]
30
- def match?(node)
30
+ def match? node
31
31
  return false unless node&.type == :class
32
32
 
33
33
  struct_definition_node?(node.children[1])
@@ -37,7 +37,7 @@ module Solargraph
37
37
 
38
38
  # @param struct_node [Parser::AST::Node]
39
39
  # @return [Boolean]
40
- def struct_definition_node?(struct_node)
40
+ def struct_definition_node? struct_node
41
41
  return false unless struct_node.is_a?(::Parser::AST::Node)
42
42
  return false unless struct_node&.type == :send
43
43
  return false unless struct_node.children[0]&.type == :const
@@ -49,7 +49,7 @@ module Solargraph
49
49
  end
50
50
 
51
51
  # @param node [Parser::AST::Node]
52
- def initialize(node)
52
+ def initialize node
53
53
  @node = node
54
54
  end
55
55