solargraph 0.59.0.dev.1 → 0.59.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 (175) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/linting.yml +3 -1
  3. data/.github/workflows/plugins.yml +12 -3
  4. data/.github/workflows/rspec.yml +9 -54
  5. data/.github/workflows/typecheck.yml +2 -1
  6. data/.gitignore +1 -0
  7. data/.rubocop.yml +38 -6
  8. data/.rubocop_todo.yml +40 -931
  9. data/CHANGELOG.md +22 -1
  10. data/Gemfile +3 -1
  11. data/Rakefile +25 -23
  12. data/bin/solargraph +2 -1
  13. data/lib/solargraph/api_map/constants.rb +0 -1
  14. data/lib/solargraph/api_map/index.rb +11 -11
  15. data/lib/solargraph/api_map/source_to_yard.rb +9 -8
  16. data/lib/solargraph/api_map/store.rb +28 -20
  17. data/lib/solargraph/api_map.rb +70 -41
  18. data/lib/solargraph/bench.rb +44 -45
  19. data/lib/solargraph/complex_type/type_methods.rb +14 -16
  20. data/lib/solargraph/complex_type/unique_type.rb +56 -47
  21. data/lib/solargraph/complex_type.rb +70 -62
  22. data/lib/solargraph/convention/data_definition/data_assignment_node.rb +61 -61
  23. data/lib/solargraph/convention/data_definition/data_definition_node.rb +4 -4
  24. data/lib/solargraph/convention/data_definition.rb +1 -1
  25. data/lib/solargraph/convention/gemfile.rb +15 -15
  26. data/lib/solargraph/convention/gemspec.rb +23 -23
  27. data/lib/solargraph/convention/rakefile.rb +17 -17
  28. data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +1 -1
  29. data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +3 -3
  30. data/lib/solargraph/convention/struct_definition.rb +3 -3
  31. data/lib/solargraph/convention.rb +78 -78
  32. data/lib/solargraph/converters/dd.rb +19 -17
  33. data/lib/solargraph/converters/dl.rb +17 -15
  34. data/lib/solargraph/converters/dt.rb +17 -15
  35. data/lib/solargraph/converters/misc.rb +3 -1
  36. data/lib/solargraph/diagnostics/rubocop.rb +10 -10
  37. data/lib/solargraph/diagnostics/rubocop_helpers.rb +3 -3
  38. data/lib/solargraph/diagnostics/type_check.rb +10 -10
  39. data/lib/solargraph/diagnostics/update_errors.rb +37 -41
  40. data/lib/solargraph/doc_map.rb +370 -132
  41. data/lib/solargraph/equality.rb +3 -3
  42. data/lib/solargraph/gem_pins.rb +19 -18
  43. data/lib/solargraph/language_server/error_codes.rb +20 -20
  44. data/lib/solargraph/language_server/host/diagnoser.rb +89 -89
  45. data/lib/solargraph/language_server/host/dispatch.rb +2 -3
  46. data/lib/solargraph/language_server/host/message_worker.rb +2 -2
  47. data/lib/solargraph/language_server/host/sources.rb +1 -1
  48. data/lib/solargraph/language_server/host.rb +24 -21
  49. data/lib/solargraph/language_server/message/base.rb +97 -97
  50. data/lib/solargraph/language_server/message/client/register_capability.rb +13 -15
  51. data/lib/solargraph/language_server/message/completion_item/resolve.rb +58 -60
  52. data/lib/solargraph/language_server/message/extended/check_gem_version.rb +10 -11
  53. data/lib/solargraph/language_server/message/extended/document_gems.rb +32 -32
  54. data/lib/solargraph/language_server/message/extended/download_core.rb +20 -19
  55. data/lib/solargraph/language_server/message/extended/search.rb +20 -20
  56. data/lib/solargraph/language_server/message/initialize.rb +197 -191
  57. data/lib/solargraph/language_server/message/text_document/completion.rb +8 -8
  58. data/lib/solargraph/language_server/message/text_document/definition.rb +41 -34
  59. data/lib/solargraph/language_server/message/text_document/document_highlight.rb +23 -16
  60. data/lib/solargraph/language_server/message/text_document/document_symbol.rb +29 -21
  61. data/lib/solargraph/language_server/message/text_document/formatting.rb +6 -6
  62. data/lib/solargraph/language_server/message/text_document/hover.rb +3 -5
  63. data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +18 -11
  64. data/lib/solargraph/language_server/message/text_document/references.rb +23 -16
  65. data/lib/solargraph/language_server/message/text_document/rename.rb +26 -19
  66. data/lib/solargraph/language_server/message/text_document/signature_help.rb +2 -2
  67. data/lib/solargraph/language_server/message/text_document/type_definition.rb +25 -19
  68. data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +41 -35
  69. data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +48 -40
  70. data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +32 -26
  71. data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +27 -19
  72. data/lib/solargraph/language_server/message.rb +94 -94
  73. data/lib/solargraph/language_server/request.rb +29 -27
  74. data/lib/solargraph/language_server/transport/data_reader.rb +72 -74
  75. data/lib/solargraph/language_server/uri_helpers.rb +49 -49
  76. data/lib/solargraph/library.rb +68 -95
  77. data/lib/solargraph/location.rb +10 -12
  78. data/lib/solargraph/logging.rb +4 -6
  79. data/lib/solargraph/page.rb +92 -92
  80. data/lib/solargraph/parser/comment_ripper.rb +12 -4
  81. data/lib/solargraph/parser/flow_sensitive_typing.rb +32 -44
  82. data/lib/solargraph/parser/node_processor/base.rb +4 -4
  83. data/lib/solargraph/parser/node_processor.rb +1 -1
  84. data/lib/solargraph/parser/parser_gem/class_methods.rb +4 -6
  85. data/lib/solargraph/parser/parser_gem/flawed_builder.rb +19 -19
  86. data/lib/solargraph/parser/parser_gem/node_chainer.rb +20 -20
  87. data/lib/solargraph/parser/parser_gem/node_methods.rb +66 -65
  88. data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +12 -12
  89. data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +1 -2
  90. data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +3 -3
  91. data/lib/solargraph/parser/parser_gem/node_processors/defs_node.rb +38 -37
  92. data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +3 -3
  93. data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +2 -1
  94. data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +1 -1
  95. data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +3 -5
  96. data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +118 -112
  97. data/lib/solargraph/parser/parser_gem/node_processors/until_node.rb +29 -29
  98. data/lib/solargraph/parser/parser_gem/node_processors/when_node.rb +1 -1
  99. data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +1 -1
  100. data/lib/solargraph/parser/parser_gem.rb +14 -12
  101. data/lib/solargraph/parser/snippet.rb +2 -0
  102. data/lib/solargraph/parser.rb +25 -23
  103. data/lib/solargraph/pin/base.rb +76 -64
  104. data/lib/solargraph/pin/base_variable.rb +28 -71
  105. data/lib/solargraph/pin/block.rb +3 -2
  106. data/lib/solargraph/pin/breakable.rb +2 -0
  107. data/lib/solargraph/pin/callable.rb +23 -26
  108. data/lib/solargraph/pin/closure.rb +5 -4
  109. data/lib/solargraph/pin/common.rb +5 -2
  110. data/lib/solargraph/pin/compound_statement.rb +3 -3
  111. data/lib/solargraph/pin/constant.rb +43 -45
  112. data/lib/solargraph/pin/conversions.rb +9 -4
  113. data/lib/solargraph/pin/delegated_method.rb +4 -4
  114. data/lib/solargraph/pin/documenting.rb +3 -2
  115. data/lib/solargraph/pin/local_variable.rb +4 -4
  116. data/lib/solargraph/pin/method.rb +74 -70
  117. data/lib/solargraph/pin/namespace.rb +13 -12
  118. data/lib/solargraph/pin/parameter.rb +28 -27
  119. data/lib/solargraph/pin/proxy_type.rb +2 -0
  120. data/lib/solargraph/pin/reference/type_alias.rb +16 -0
  121. data/lib/solargraph/pin/reference.rb +18 -0
  122. data/lib/solargraph/pin/search.rb +2 -2
  123. data/lib/solargraph/pin/signature.rb +9 -14
  124. data/lib/solargraph/pin/symbol.rb +1 -0
  125. data/lib/solargraph/pin/until.rb +1 -3
  126. data/lib/solargraph/pin/while.rb +1 -3
  127. data/lib/solargraph/pin_cache.rb +71 -488
  128. data/lib/solargraph/position.rb +38 -17
  129. data/lib/solargraph/range.rb +10 -9
  130. data/lib/solargraph/rbs_map/conversions.rb +327 -221
  131. data/lib/solargraph/rbs_map/core_fills.rb +91 -84
  132. data/lib/solargraph/rbs_map/stdlib_map.rb +0 -1
  133. data/lib/solargraph/rbs_map.rb +5 -15
  134. data/lib/solargraph/server_methods.rb +16 -16
  135. data/lib/solargraph/shell.rb +224 -66
  136. data/lib/solargraph/source/chain/array.rb +39 -37
  137. data/lib/solargraph/source/chain/call.rb +49 -44
  138. data/lib/solargraph/source/chain/class_variable.rb +13 -13
  139. data/lib/solargraph/source/chain/constant.rb +3 -1
  140. data/lib/solargraph/source/chain/global_variable.rb +13 -13
  141. data/lib/solargraph/source/chain/hash.rb +8 -6
  142. data/lib/solargraph/source/chain/if.rb +11 -10
  143. data/lib/solargraph/source/chain/instance_variable.rb +3 -1
  144. data/lib/solargraph/source/chain/link.rb +99 -109
  145. data/lib/solargraph/source/chain/literal.rb +4 -6
  146. data/lib/solargraph/source/chain/or.rb +2 -4
  147. data/lib/solargraph/source/chain/q_call.rb +13 -11
  148. data/lib/solargraph/source/chain/variable.rb +15 -13
  149. data/lib/solargraph/source/chain/z_super.rb +28 -30
  150. data/lib/solargraph/source/chain.rb +26 -16
  151. data/lib/solargraph/source/change.rb +3 -3
  152. data/lib/solargraph/source/cursor.rb +18 -18
  153. data/lib/solargraph/source/encoding_fixes.rb +6 -7
  154. data/lib/solargraph/source/source_chainer.rb +46 -32
  155. data/lib/solargraph/source/updater.rb +1 -1
  156. data/lib/solargraph/source.rb +27 -29
  157. data/lib/solargraph/source_map/clip.rb +38 -30
  158. data/lib/solargraph/source_map/mapper.rb +51 -47
  159. data/lib/solargraph/source_map.rb +8 -4
  160. data/lib/solargraph/type_checker/rules.rb +8 -8
  161. data/lib/solargraph/type_checker.rb +95 -102
  162. data/lib/solargraph/version.rb +1 -1
  163. data/lib/solargraph/workspace/config.rb +11 -10
  164. data/lib/solargraph/workspace/gemspecs.rb +3 -3
  165. data/lib/solargraph/workspace.rb +45 -165
  166. data/lib/solargraph/yard_map/helpers.rb +6 -2
  167. data/lib/solargraph/yard_map/mapper/to_method.rb +8 -6
  168. data/lib/solargraph/yard_map/mapper/to_namespace.rb +1 -1
  169. data/lib/solargraph/yard_map/mapper.rb +12 -12
  170. data/lib/solargraph/yard_map.rb +17 -18
  171. data/lib/solargraph/yard_tags.rb +20 -20
  172. data/lib/solargraph/yardoc.rb +26 -33
  173. data/lib/solargraph.rb +7 -5
  174. data/solargraph.gemspec +36 -35
  175. metadata +33 -38
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'ripper'
2
4
 
3
5
  module Solargraph
@@ -26,19 +28,25 @@ module Solargraph
26
28
  # @sg-ignore Need to add nil check here
27
29
  if @buffer_lines[result[2][0]][0..result[2][1]].strip =~ /^#/
28
30
  chomped = result[1].chomp
29
- if result[2][0] == 0 && chomped.encode('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: '').match(/^#\s*frozen_string_literal:/)
31
+ if result[2][0].zero? && chomped.encode('UTF-8', 'binary', invalid: :replace, undef: :replace,
32
+ replace: '').match(/^#\s*frozen_string_literal:/)
30
33
  chomped = '#'
31
34
  end
32
- @comments[result[2][0]] = Snippet.new(Range.from_to(result[2][0], result[2][1], result[2][0], result[2][1] + chomped.length), chomped)
35
+ @comments[result[2][0]] =
36
+ Snippet.new(Range.from_to(result[2][0], result[2][1], result[2][0], result[2][1] + chomped.length), chomped)
33
37
  end
34
38
  result
35
39
  end
36
40
 
37
41
  # @param result [Array(Symbol, String, Array([Integer, nil], [Integer, nil]))]
38
42
  # @return [void]
39
- def create_snippet(result)
43
+ def create_snippet result
40
44
  chomped = result[1].chomp
41
- @comments[result[2][0]] = Snippet.new(Range.from_to(result[2][0] || 0, result[2][1] || 0, result[2][0] || 0, (result[2][1] || 0) + chomped.length), chomped)
45
+ @comments[result[2][0]] =
46
+ Snippet.new(
47
+ Range.from_to(result[2][0] || 0, result[2][1] || 0, result[2][0] || 0,
48
+ (result[2][1] || 0) + chomped.length), chomped
49
+ )
42
50
  end
43
51
 
44
52
  # @sg-ignore @override is adding, not overriding
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Solargraph
2
4
  module Parser
3
5
  class FlowSensitiveTyping
@@ -7,7 +9,7 @@ module Solargraph
7
9
  # @param ivars [Array<Solargraph::Pin::InstanceVariable>]
8
10
  # @param enclosing_breakable_pin [Solargraph::Pin::Breakable, nil]
9
11
  # @param enclosing_compound_statement_pin [Solargraph::Pin::CompoundStatement, nil]
10
- def initialize(locals, ivars, enclosing_breakable_pin, enclosing_compound_statement_pin)
12
+ def initialize locals, ivars, enclosing_breakable_pin, enclosing_compound_statement_pin
11
13
  @locals = locals
12
14
  @ivars = ivars
13
15
  @enclosing_breakable_pin = enclosing_breakable_pin
@@ -19,7 +21,7 @@ module Solargraph
19
21
  # @param false_ranges [Array<Range>]
20
22
  #
21
23
  # @return [void]
22
- def process_and(and_node, true_ranges = [], false_ranges = [])
24
+ def process_and and_node, true_ranges = [], false_ranges = []
23
25
  return unless and_node.type == :and
24
26
 
25
27
  # @type [Parser::AST::Node]
@@ -45,7 +47,7 @@ module Solargraph
45
47
  # @param false_ranges [Array<Range>]
46
48
  #
47
49
  # @return [void]
48
- def process_or(or_node, true_ranges = [], false_ranges = [])
50
+ def process_or or_node, true_ranges = [], false_ranges = []
49
51
  return unless or_node.type == :or
50
52
 
51
53
  # @type [Parser::AST::Node]
@@ -74,7 +76,7 @@ module Solargraph
74
76
  # @param false_presences [Array<Range>]
75
77
  #
76
78
  # @return [void]
77
- def process_calls(node, true_presences, false_presences)
79
+ def process_calls node, true_presences, false_presences
78
80
  return unless node.type == :send
79
81
 
80
82
  process_isa(node, true_presences, false_presences)
@@ -87,7 +89,7 @@ module Solargraph
87
89
  # @param false_ranges [Array<Range>]
88
90
  #
89
91
  # @return [void]
90
- def process_if(if_node, true_ranges = [], false_ranges = [])
92
+ def process_if if_node, true_ranges = [], false_ranges = []
91
93
  return if if_node.type != :if
92
94
 
93
95
  #
@@ -111,13 +113,9 @@ module Solargraph
111
113
  rest_of_breakable_body = Range.new(get_node_end_position(if_node),
112
114
  get_node_end_position(enclosing_breakable_pin.node))
113
115
 
114
- if always_breaks?(then_clause)
115
- false_ranges << rest_of_breakable_body
116
- end
116
+ false_ranges << rest_of_breakable_body if always_breaks?(then_clause)
117
117
 
118
- if always_breaks?(else_clause)
119
- true_ranges << rest_of_breakable_body
120
- end
118
+ true_ranges << rest_of_breakable_body if always_breaks?(else_clause)
121
119
  end
122
120
 
123
121
  unless enclosing_compound_statement_pin.node.nil?
@@ -129,13 +127,9 @@ module Solargraph
129
127
  # statement, we can assume things about the rest of the
130
128
  # compound statement
131
129
  #
132
- if always_leaves_compound_statement?(then_clause)
133
- false_ranges << rest_of_returnable_body
134
- end
130
+ false_ranges << rest_of_returnable_body if always_leaves_compound_statement?(then_clause)
135
131
 
136
- if always_leaves_compound_statement?(else_clause)
137
- true_ranges << rest_of_returnable_body
138
- end
132
+ true_ranges << rest_of_returnable_body if always_leaves_compound_statement?(else_clause)
139
133
  end
140
134
 
141
135
  unless then_clause.nil?
@@ -166,7 +160,7 @@ module Solargraph
166
160
  # @param false_ranges [Array<Range>]
167
161
  #
168
162
  # @return [void]
169
- def process_while(while_node, true_ranges = [], false_ranges = [])
163
+ def process_while while_node, true_ranges = [], false_ranges = []
170
164
  return if while_node.type != :while
171
165
 
172
166
  #
@@ -210,7 +204,7 @@ module Solargraph
210
204
  # @param downcast_not_type [ComplexType, nil]
211
205
  #
212
206
  # @return [void]
213
- def add_downcast_var(pin, presence:, downcast_type:, downcast_not_type:)
207
+ def add_downcast_var pin, presence:, downcast_type:, downcast_not_type:
214
208
  new_pin = pin.downcast(exclude_return_type: downcast_not_type,
215
209
  intersection_return_type: downcast_type,
216
210
  source: :flow_sensitive_typing,
@@ -228,7 +222,7 @@ module Solargraph
228
222
  # @param presences [Array<Range>]
229
223
  #
230
224
  # @return [void]
231
- def process_facts(facts_by_pin, presences)
225
+ def process_facts facts_by_pin, presences
232
226
  #
233
227
  # Add specialized vars for the rest of the block
234
228
  #
@@ -251,7 +245,7 @@ module Solargraph
251
245
  # @param false_ranges [Array<Range>]
252
246
  #
253
247
  # @return [void]
254
- def process_expression(expression_node, true_ranges, false_ranges)
248
+ def process_expression expression_node, true_ranges, false_ranges
255
249
  process_calls(expression_node, true_ranges, false_ranges)
256
250
  process_and(expression_node, true_ranges, false_ranges)
257
251
  process_or(expression_node, true_ranges, false_ranges)
@@ -263,7 +257,7 @@ module Solargraph
263
257
  # @return [Array(String, String), nil] Tuple of rgument to
264
258
  # function, then receiver of function if it's a variable,
265
259
  # otherwise nil if no simple variable receiver
266
- def parse_call(call_node, method_name)
260
+ def parse_call call_node, method_name
267
261
  return unless call_node&.type == :send && call_node.children[1] == method_name
268
262
  # Check if conditional node follows this pattern:
269
263
  # s(:send,
@@ -281,8 +275,7 @@ module Solargraph
281
275
  end
282
276
  # or like this:
283
277
  # (lvar :repr)
284
- # @sg-ignore Need to look at Tuple#include? handling
285
- variable_name = call_receiver.children[0].to_s if [:lvar, :ivar].include?(call_receiver&.type)
278
+ variable_name = call_receiver.children[0].to_s if %i[lvar ivar].include?(call_receiver&.type)
286
279
  return unless variable_name
287
280
 
288
281
  [call_arg, variable_name]
@@ -290,7 +283,7 @@ module Solargraph
290
283
 
291
284
  # @param isa_node [Parser::AST::Node]
292
285
  # @return [Array(String, String), nil]
293
- def parse_isa(isa_node)
286
+ def parse_isa isa_node
294
287
  call_type_name, variable_name = parse_call(isa_node, :is_a?)
295
288
 
296
289
  return unless call_type_name
@@ -304,7 +297,7 @@ module Solargraph
304
297
  # @sg-ignore Solargraph::Parser::FlowSensitiveTyping#find_var
305
298
  # return type could not be inferred
306
299
  # @return [Solargraph::Pin::LocalVariable, Solargraph::Pin::InstanceVariable, nil]
307
- def find_var(variable_name, position)
300
+ def find_var variable_name, position
308
301
  if variable_name.start_with?('@')
309
302
  # @sg-ignore flow sensitive typing needs to handle attrs
310
303
  ivars.find { |ivar| ivar.name == variable_name && (!ivar.presence || ivar.presence.include?(position)) }
@@ -319,7 +312,7 @@ module Solargraph
319
312
  # @param false_presences [Array<Range>]
320
313
  #
321
314
  # @return [void]
322
- def process_isa(isa_node, true_presences, false_presences)
315
+ def process_isa isa_node, true_presences, false_presences
323
316
  isa_type_name, variable_name = parse_isa(isa_node)
324
317
  return if variable_name.nil? || variable_name.empty?
325
318
  # @sg-ignore Need to add nil check here
@@ -343,7 +336,7 @@ module Solargraph
343
336
 
344
337
  # @param nilp_node [Parser::AST::Node]
345
338
  # @return [Array(String, String), nil]
346
- def parse_nilp(nilp_node)
339
+ def parse_nilp nilp_node
347
340
  parse_call(nilp_node, :nil?)
348
341
  end
349
342
 
@@ -352,7 +345,7 @@ module Solargraph
352
345
  # @param false_presences [Array<Range>]
353
346
  #
354
347
  # @return [void]
355
- def process_nilp(nilp_node, true_presences, false_presences)
348
+ def process_nilp nilp_node, true_presences, false_presences
356
349
  nilp_arg, variable_name = parse_nilp(nilp_node)
357
350
  return if variable_name.nil? || variable_name.empty?
358
351
  # if .nil? got an argument, move on, this isn't the situation
@@ -380,7 +373,7 @@ module Solargraph
380
373
 
381
374
  # @param bang_node [Parser::AST::Node]
382
375
  # @return [Array(String, String), nil]
383
- def parse_bang(bang_node)
376
+ def parse_bang bang_node
384
377
  parse_call(bang_node, :!)
385
378
  end
386
379
 
@@ -389,7 +382,7 @@ module Solargraph
389
382
  # @param false_presences [Array<Range>]
390
383
  #
391
384
  # @return [void]
392
- def process_bang(bang_node, true_presences, false_presences)
385
+ def process_bang bang_node, true_presences, false_presences
393
386
  # pry(main)> require 'parser/current'; Parser::CurrentRuby.parse("!2")
394
387
  # => s(:send,
395
388
  # s(:int, 2), :!)
@@ -405,7 +398,7 @@ module Solargraph
405
398
  # @param var_node [Parser::AST::Node]
406
399
  #
407
400
  # @return [String, nil] Variable name referenced
408
- def parse_variable(var_node)
401
+ def parse_variable var_node
409
402
  return if var_node.children.length != 1
410
403
 
411
404
  var_node.children[0]&.to_s
@@ -415,8 +408,8 @@ module Solargraph
415
408
  # @param node [Parser::AST::Node]
416
409
  # @param true_presences [Array<Range>]
417
410
  # @param false_presences [Array<Range>]
418
- def process_variable(node, true_presences, false_presences)
419
- return unless [:lvar, :ivar, :cvar, :gvar].include?(node.type)
411
+ def process_variable node, true_presences, false_presences
412
+ return unless %i[lvar ivar cvar gvar].include?(node.type)
420
413
 
421
414
  variable_name = parse_variable(node)
422
415
  return if variable_name.nil?
@@ -443,7 +436,7 @@ module Solargraph
443
436
  # @param node [Parser::AST::Node]
444
437
  #
445
438
  # @return [String, nil]
446
- def type_name(node)
439
+ def type_name node
447
440
  # e.g.,
448
441
  # s(:const, nil, :Baz)
449
442
  return unless node&.type == :const
@@ -462,22 +455,17 @@ module Solargraph
462
455
 
463
456
  # @param clause_node [Parser::AST::Node, nil]
464
457
  # @sg-ignore need boolish support for ? methods
465
- def always_breaks?(clause_node)
458
+ def always_breaks? clause_node
466
459
  clause_node&.type == :break
467
460
  end
468
461
 
469
462
  # @param clause_node [Parser::AST::Node, nil]
470
- def always_leaves_compound_statement?(clause_node)
463
+ def always_leaves_compound_statement? clause_node
471
464
  # https://docs.ruby-lang.org/en/2.2.0/keywords_rdoc.html
472
- # @sg-ignore Need to look at Tuple#include? handling
473
- [:return, :raise, :next, :redo, :retry].include?(clause_node&.type)
465
+ %i[return raise next redo retry].include?(clause_node&.type)
474
466
  end
475
467
 
476
- attr_reader :locals
477
-
478
- attr_reader :ivars
479
-
480
- attr_reader :enclosing_breakable_pin, :enclosing_compound_statement_pin
468
+ attr_reader :locals, :ivars, :enclosing_breakable_pin, :enclosing_compound_statement_pin
481
469
  end
482
470
  end
483
471
  end
@@ -58,13 +58,13 @@ module Solargraph
58
58
  # @sg-ignore downcast output of Enumerable#select
59
59
  # @return [Solargraph::Pin::Breakable, nil]
60
60
  def enclosing_breakable_pin
61
- pins.select{|pin| pin.is_a?(Pin::Breakable) && pin.location&.range&.contain?(position)}.last
61
+ pins.select { |pin| pin.is_a?(Pin::Breakable) && pin.location&.range&.contain?(position) }.last
62
62
  end
63
63
 
64
64
  # @todo downcast output of Enumerable#select
65
65
  # @return [Solargraph::Pin::CompoundStatement, nil]
66
66
  def enclosing_compound_statement_pin
67
- pins.select{|pin| pin.is_a?(Pin::CompoundStatement) && pin.location&.range&.contain?(position)}.last
67
+ pins.select { |pin| pin.is_a?(Pin::CompoundStatement) && pin.location&.range&.contain?(position) }.last
68
68
  end
69
69
 
70
70
  # @param subregion [Region]
@@ -80,14 +80,14 @@ module Solargraph
80
80
 
81
81
  # @param node [Parser::AST::Node]
82
82
  # @return [Solargraph::Location]
83
- def get_node_location(node)
83
+ def get_node_location node
84
84
  range = Parser.node_range(node)
85
85
  Location.new(region.filename, range)
86
86
  end
87
87
 
88
88
  # @param node [Parser::AST::Node]
89
89
  # @return [String, nil]
90
- def comments_for(node)
90
+ def comments_for node
91
91
  region.source.comments_for(node)
92
92
  end
93
93
 
@@ -43,7 +43,7 @@ module Solargraph
43
43
  pins.push Pin::Namespace.new(
44
44
  location: region.source.location,
45
45
  name: '',
46
- source: :parser,
46
+ source: :parser
47
47
  )
48
48
  end
49
49
  return [pins, locals, ivars] unless Parser.is_ast_node?(node)
@@ -34,9 +34,7 @@ module Solargraph
34
34
  # @return [::Parser::Base]
35
35
  def parser
36
36
  @parser ||= Prism::Translation::Parser.new(FlawedBuilder.new).tap do |parser|
37
- # @sg-ignore Unresolved call to diagnostics on Prism::Translation::Parser
38
37
  parser.diagnostics.all_errors_are_fatal = true
39
- # @sg-ignore Unresolved call to diagnostics on Prism::Translation::Parser
40
38
  parser.diagnostics.ignore_warnings = true
41
39
  end
42
40
  end
@@ -54,7 +52,7 @@ module Solargraph
54
52
  # @param name [String]
55
53
  # @return [Array<Location>]
56
54
  def references source, name
57
- if name.end_with?("=")
55
+ if name.end_with?('=')
58
56
  reg = /#{Regexp.escape name[0..-2]}\s*=/
59
57
  # @param code [String]
60
58
  # @param offset [Integer]
@@ -98,17 +96,17 @@ module Solargraph
98
96
 
99
97
  # @return [Source::Chain]
100
98
  def chain *args
101
- NodeChainer.chain *args
99
+ NodeChainer.chain(*args)
102
100
  end
103
101
 
104
102
  # @return [Source::Chain]
105
103
  def chain_string *args
106
- NodeChainer.load_string *args
104
+ NodeChainer.load_string(*args)
107
105
  end
108
106
 
109
107
  # @return [Array(Array<Pin::Base>, Array<Pin::Base>)]
110
108
  def process_node *args
111
- Solargraph::Parser::NodeProcessor.process *args
109
+ Solargraph::Parser::NodeProcessor.process(*args)
112
110
  end
113
111
 
114
112
  # @param node [Parser::AST::Node, nil]
@@ -1,19 +1,19 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Parser
5
- module ParserGem
6
- # A custom builder for source parsers that ignores character encoding
7
- # issues in literal strings.
8
- #
9
- class FlawedBuilder < ::Parser::Builders::Default
10
- # @param token [::Parser::AST::Node]
11
- # @return [String]
12
- # @sg-ignore
13
- def string_value(token)
14
- value(token)
15
- end
16
- end
17
- end
18
- end
19
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Parser
5
+ module ParserGem
6
+ # A custom builder for source parsers that ignores character encoding
7
+ # issues in literal strings.
8
+ #
9
+ class FlawedBuilder < ::Parser::Builders::Default
10
+ # @param token [::Parser::AST::Node]
11
+ # @return [String]
12
+ # @sg-ignore
13
+ def string_value token
14
+ value(token)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -22,7 +22,7 @@ module Solargraph
22
22
  # @return [Source::Chain]
23
23
  def chain
24
24
  links = generate_links(@node)
25
- Chain.new(links, @node, (Parser.is_ast_node?(@node) && @node.type == :splat))
25
+ Chain.new(links, @node, Parser.is_ast_node?(@node) && @node.type == :splat)
26
26
  end
27
27
 
28
28
  class << self
@@ -39,7 +39,7 @@ module Solargraph
39
39
  # @param starting_line [Integer]
40
40
  #
41
41
  # @return [Source::Chain]
42
- def load_string(code, filename, starting_line)
42
+ def load_string code, filename, starting_line
43
43
  node = Parser.parse(code.sub(/\.$/, ''), filename, starting_line)
44
44
  chain = NodeChainer.new(node).chain
45
45
  chain.links.push(Chain::Link.new) if code.end_with?('.')
@@ -63,10 +63,9 @@ module Solargraph
63
63
  result.concat generate_links(n.children[0])
64
64
  result.push Chain::Call.new(n.children[1].to_s, Location.from_node(n), node_args(n), passed_block(n))
65
65
  elsif n.children[0].nil?
66
- args = []
67
66
  # @sg-ignore Need to add nil check here
68
- n.children[2..-1].each do |c|
69
- args.push NodeChainer.chain(c, @filename, n)
67
+ n.children[2..].map do |c|
68
+ NodeChainer.chain(c, @filename, n)
70
69
  end
71
70
  result.push Chain::Call.new(n.children[1].to_s, Location.from_node(n), node_args(n), passed_block(n))
72
71
  else
@@ -94,13 +93,13 @@ module Solargraph
94
93
  elsif n.type == :const
95
94
  const = unpack_name(n)
96
95
  result.push Chain::Constant.new(const)
97
- elsif [:lvar, :lvasgn].include?(n.type)
96
+ elsif %i[lvar lvasgn].include?(n.type)
98
97
  result.push Chain::Call.new(n.children[0].to_s, Location.from_node(n))
99
- elsif [:ivar, :ivasgn].include?(n.type)
98
+ elsif %i[ivar ivasgn].include?(n.type)
100
99
  result.push Chain::InstanceVariable.new(n.children[0].to_s, n, Location.from_node(n))
101
- elsif [:cvar, :cvasgn].include?(n.type)
100
+ elsif %i[cvar cvasgn].include?(n.type)
102
101
  result.push Chain::ClassVariable.new(n.children[0].to_s)
103
- elsif [:gvar, :gvasgn].include?(n.type)
102
+ elsif %i[gvar gvasgn].include?(n.type)
104
103
  result.push Chain::GlobalVariable.new(n.children[0].to_s)
105
104
  elsif n.type == :or_asgn
106
105
  # @bar ||= 123 translates to:
@@ -113,13 +112,14 @@ module Solargraph
113
112
  or_link = Chain::Or.new([lhs_chain, rhs_chain])
114
113
  # this is just for a call chain, so we don't need to record the assignment
115
114
  result.push(or_link)
116
- elsif [:class, :module, :def, :defs].include?(n.type)
115
+ elsif %i[class module def defs].include?(n.type)
117
116
  # @todo Undefined or what?
118
117
  result.push Chain::UNDEFINED_CALL
119
118
  elsif n.type == :and
120
119
  result.concat generate_links(n.children.last)
121
120
  elsif n.type == :or
122
- result.push Chain::Or.new([NodeChainer.chain(n.children[0], @filename), NodeChainer.chain(n.children[1], @filename, n)])
121
+ result.push Chain::Or.new([NodeChainer.chain(n.children[0], @filename),
122
+ NodeChainer.chain(n.children[1], @filename, n)])
123
123
  elsif n.type == :if
124
124
  then_clause = if n.children[1]
125
125
  NodeChainer.chain(n.children[1], @filename, n)
@@ -132,7 +132,7 @@ module Solargraph
132
132
  Source::Chain.new([Source::Chain::Literal.new('nil', nil)], n)
133
133
  end
134
134
  result.push Chain::If.new([then_clause, else_clause])
135
- elsif [:begin, :kwbegin].include?(n.type)
135
+ elsif %i[begin kwbegin].include?(n.type)
136
136
  result.concat generate_links(n.children.last)
137
137
  elsif n.type == :block_pass
138
138
  block_variable_name_node = n.children[0]
@@ -140,12 +140,10 @@ module Solargraph
140
140
  # anonymous block forwarding (e.g., "&")
141
141
  # added in Ruby 3.1 - https://bugs.ruby-lang.org/issues/11256
142
142
  result.push Chain::BlockVariable.new(nil)
143
+ elsif block_variable_name_node.type == :sym
144
+ result.push Chain::BlockSymbol.new(block_variable_name_node.children[0].to_s)
143
145
  else
144
- if block_variable_name_node.type == :sym
145
- result.push Chain::BlockSymbol.new("#{block_variable_name_node.children[0].to_s}")
146
- else
147
- result.push Chain::BlockVariable.new("&#{block_variable_name_node.children[0].to_s}")
148
- end
146
+ result.push Chain::BlockVariable.new("&#{block_variable_name_node.children[0]}")
149
147
  end
150
148
  elsif n.type == :hash
151
149
  result.push Chain::Hash.new('::Hash', n, hash_is_splatted?(n))
@@ -154,7 +152,7 @@ module Solargraph
154
152
  result.push Source::Chain::Array.new(chained_children, n)
155
153
  else
156
154
  lit = infer_literal_node_type(n)
157
- result.push (lit ? Chain::Literal.new(lit, n) : Chain::Link.new)
155
+ result.push(lit ? Chain::Literal.new(lit, n) : Chain::Link.new)
158
156
  end
159
157
  result
160
158
  end
@@ -163,7 +161,9 @@ module Solargraph
163
161
  def hash_is_splatted? node
164
162
  return false unless Parser.is_ast_node?(node) && node.type == :hash
165
163
  return false unless Parser.is_ast_node?(node.children.last) && node.children.last.type == :kwsplat
166
- return false if Parser.is_ast_node?(node.children.last.children[0]) && node.children.last.children[0].type == :hash
164
+ if Parser.is_ast_node?(node.children.last.children[0]) && node.children.last.children[0].type == :hash
165
+ return false
166
+ end
167
167
  true
168
168
  end
169
169
 
@@ -181,7 +181,7 @@ module Solargraph
181
181
  # @return [Array<Source::Chain>]
182
182
  def node_args node
183
183
  # @sg-ignore Need to add nil check here
184
- node.children[2..-1].map do |child|
184
+ node.children[2..].map do |child|
185
185
  NodeChainer.chain(child, @filename, node)
186
186
  end
187
187
  end