solargraph 0.52.0 → 0.53.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 (155) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/plugins.yml +40 -0
  3. data/.github/workflows/rspec.yml +1 -3
  4. data/.github/workflows/typecheck.yml +34 -0
  5. data/CHANGELOG.md +30 -0
  6. data/README.md +13 -16
  7. data/SPONSORS.md +1 -7
  8. data/lib/solargraph/api_map/cache.rb +59 -21
  9. data/lib/solargraph/api_map/store.rb +45 -9
  10. data/lib/solargraph/api_map.rb +152 -93
  11. data/lib/solargraph/bench.rb +2 -2
  12. data/lib/solargraph/cache.rb +29 -5
  13. data/lib/solargraph/complex_type/type_methods.rb +53 -8
  14. data/lib/solargraph/complex_type/unique_type.rb +149 -59
  15. data/lib/solargraph/complex_type.rb +62 -9
  16. data/lib/solargraph/convention.rb +0 -1
  17. data/lib/solargraph/converters/dd.rb +5 -0
  18. data/lib/solargraph/converters/dl.rb +3 -0
  19. data/lib/solargraph/converters/dt.rb +3 -0
  20. data/lib/solargraph/diagnostics/rubocop.rb +8 -7
  21. data/lib/solargraph/diagnostics/rubocop_helpers.rb +1 -0
  22. data/lib/solargraph/diagnostics/type_check.rb +1 -0
  23. data/lib/solargraph/diagnostics.rb +2 -2
  24. data/lib/solargraph/doc_map.rb +146 -0
  25. data/lib/solargraph/gem_pins.rb +64 -0
  26. data/lib/solargraph/language_server/host/cataloger.rb +1 -0
  27. data/lib/solargraph/language_server/host/diagnoser.rb +2 -2
  28. data/lib/solargraph/language_server/host/dispatch.rb +10 -4
  29. data/lib/solargraph/language_server/host/message_worker.rb +4 -0
  30. data/lib/solargraph/language_server/host/sources.rb +7 -4
  31. data/lib/solargraph/language_server/host.rb +15 -6
  32. data/lib/solargraph/language_server/message/completion_item/resolve.rb +3 -1
  33. data/lib/solargraph/language_server/message/extended/check_gem_version.rb +13 -1
  34. data/lib/solargraph/language_server/message/initialize.rb +5 -2
  35. data/lib/solargraph/language_server/message/text_document/hover.rb +2 -0
  36. data/lib/solargraph/language_server/message/text_document.rb +0 -1
  37. data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +5 -0
  38. data/lib/solargraph/language_server/transport/adapter.rb +16 -1
  39. data/lib/solargraph/language_server/transport/data_reader.rb +2 -0
  40. data/lib/solargraph/library.rb +58 -11
  41. data/lib/solargraph/location.rb +1 -0
  42. data/lib/solargraph/parser/comment_ripper.rb +3 -0
  43. data/lib/solargraph/parser/node_methods.rb +47 -8
  44. data/lib/solargraph/parser/node_processor/base.rb +9 -0
  45. data/lib/solargraph/parser/{legacy → parser_gem}/class_methods.rb +29 -3
  46. data/lib/solargraph/parser/{legacy → parser_gem}/flawed_builder.rb +3 -1
  47. data/lib/solargraph/parser/{legacy → parser_gem}/node_chainer.rb +42 -34
  48. data/lib/solargraph/parser/{legacy → parser_gem}/node_methods.rb +201 -29
  49. data/lib/solargraph/parser/{rubyvm → parser_gem}/node_processors/alias_node.rb +1 -1
  50. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/args_node.rb +4 -1
  51. data/lib/solargraph/parser/{rubyvm → parser_gem}/node_processors/begin_node.rb +1 -1
  52. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/block_node.rb +3 -2
  53. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/casgn_node.rb +2 -2
  54. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/cvasgn_node.rb +1 -1
  55. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/def_node.rb +1 -1
  56. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/defs_node.rb +2 -2
  57. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/gvasgn_node.rb +1 -1
  58. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/ivasgn_node.rb +2 -2
  59. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/lvasgn_node.rb +2 -2
  60. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/namespace_node.rb +2 -2
  61. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/orasgn_node.rb +1 -1
  62. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/resbody_node.rb +3 -3
  63. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/sclass_node.rb +1 -1
  64. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/send_node.rb +2 -2
  65. data/lib/solargraph/parser/{rubyvm → parser_gem}/node_processors/sym_node.rb +1 -1
  66. data/lib/solargraph/parser/parser_gem/node_processors.rb +54 -0
  67. data/lib/solargraph/parser/parser_gem.rb +12 -0
  68. data/lib/solargraph/parser/snippet.rb +2 -0
  69. data/lib/solargraph/parser.rb +8 -11
  70. data/lib/solargraph/pin/base.rb +63 -8
  71. data/lib/solargraph/pin/base_variable.rb +6 -2
  72. data/lib/solargraph/pin/block.rb +11 -6
  73. data/lib/solargraph/pin/closure.rb +17 -2
  74. data/lib/solargraph/pin/common.rb +7 -3
  75. data/lib/solargraph/pin/conversions.rb +33 -3
  76. data/lib/solargraph/pin/documenting.rb +25 -34
  77. data/lib/solargraph/pin/instance_variable.rb +4 -0
  78. data/lib/solargraph/pin/local_variable.rb +13 -1
  79. data/lib/solargraph/pin/method.rb +109 -15
  80. data/lib/solargraph/pin/namespace.rb +16 -10
  81. data/lib/solargraph/pin/parameter.rb +41 -10
  82. data/lib/solargraph/pin/reference/override.rb +2 -2
  83. data/lib/solargraph/pin/reference.rb +8 -0
  84. data/lib/solargraph/pin/search.rb +3 -3
  85. data/lib/solargraph/pin/signature.rb +114 -2
  86. data/lib/solargraph/pin.rb +0 -1
  87. data/lib/solargraph/range.rb +2 -2
  88. data/lib/solargraph/rbs_map/conversions.rb +212 -25
  89. data/lib/solargraph/rbs_map/core_fills.rb +4 -26
  90. data/lib/solargraph/rbs_map/core_map.rb +1 -0
  91. data/lib/solargraph/rbs_map/core_signs.rb +2 -0
  92. data/lib/solargraph/rbs_map/stdlib_map.rb +2 -8
  93. data/lib/solargraph/rbs_map.rb +19 -9
  94. data/lib/solargraph/shell.rb +62 -59
  95. data/lib/solargraph/source/chain/array.rb +4 -1
  96. data/lib/solargraph/source/chain/block_symbol.rb +13 -0
  97. data/lib/solargraph/source/chain/call.rb +95 -26
  98. data/lib/solargraph/source/chain/constant.rb +15 -1
  99. data/lib/solargraph/source/chain/if.rb +23 -0
  100. data/lib/solargraph/source/chain/link.rb +7 -1
  101. data/lib/solargraph/source/chain/or.rb +1 -1
  102. data/lib/solargraph/source/chain/z_super.rb +2 -2
  103. data/lib/solargraph/source/chain.rb +20 -4
  104. data/lib/solargraph/source/change.rb +3 -0
  105. data/lib/solargraph/source/cursor.rb +2 -0
  106. data/lib/solargraph/source/source_chainer.rb +6 -5
  107. data/lib/solargraph/source.rb +15 -16
  108. data/lib/solargraph/source_map/clip.rb +11 -7
  109. data/lib/solargraph/source_map/mapper.rb +10 -0
  110. data/lib/solargraph/source_map.rb +13 -3
  111. data/lib/solargraph/type_checker/checks.rb +10 -2
  112. data/lib/solargraph/type_checker.rb +74 -19
  113. data/lib/solargraph/version.rb +1 -1
  114. data/lib/solargraph/workspace/config.rb +8 -6
  115. data/lib/solargraph/workspace.rb +1 -1
  116. data/lib/solargraph/yard_map/cache.rb +6 -0
  117. data/lib/solargraph/yard_map/helpers.rb +1 -1
  118. data/lib/solargraph/yard_map/mapper/to_method.rb +11 -1
  119. data/lib/solargraph/yard_map/to_method.rb +11 -4
  120. data/lib/solargraph/yard_map.rb +0 -292
  121. data/lib/solargraph/yardoc.rb +52 -0
  122. data/lib/solargraph.rb +4 -1
  123. data/solargraph.gemspec +2 -2
  124. metadata +35 -57
  125. data/lib/solargraph/api_map/bundler_methods.rb +0 -22
  126. data/lib/solargraph/documentor.rb +0 -76
  127. data/lib/solargraph/parser/legacy/node_processors/alias_node.rb +0 -23
  128. data/lib/solargraph/parser/legacy/node_processors/begin_node.rb +0 -15
  129. data/lib/solargraph/parser/legacy/node_processors/sym_node.rb +0 -18
  130. data/lib/solargraph/parser/legacy/node_processors.rb +0 -55
  131. data/lib/solargraph/parser/legacy.rb +0 -12
  132. data/lib/solargraph/parser/rubyvm/class_methods.rb +0 -151
  133. data/lib/solargraph/parser/rubyvm/node_chainer.rb +0 -163
  134. data/lib/solargraph/parser/rubyvm/node_methods.rb +0 -317
  135. data/lib/solargraph/parser/rubyvm/node_processors/args_node.rb +0 -85
  136. data/lib/solargraph/parser/rubyvm/node_processors/block_node.rb +0 -42
  137. data/lib/solargraph/parser/rubyvm/node_processors/casgn_node.rb +0 -33
  138. data/lib/solargraph/parser/rubyvm/node_processors/cvasgn_node.rb +0 -23
  139. data/lib/solargraph/parser/rubyvm/node_processors/def_node.rb +0 -75
  140. data/lib/solargraph/parser/rubyvm/node_processors/defs_node.rb +0 -68
  141. data/lib/solargraph/parser/rubyvm/node_processors/gvasgn_node.rb +0 -23
  142. data/lib/solargraph/parser/rubyvm/node_processors/ivasgn_node.rb +0 -38
  143. data/lib/solargraph/parser/rubyvm/node_processors/kw_arg_node.rb +0 -39
  144. data/lib/solargraph/parser/rubyvm/node_processors/lit_node.rb +0 -20
  145. data/lib/solargraph/parser/rubyvm/node_processors/lvasgn_node.rb +0 -27
  146. data/lib/solargraph/parser/rubyvm/node_processors/namespace_node.rb +0 -39
  147. data/lib/solargraph/parser/rubyvm/node_processors/opt_arg_node.rb +0 -26
  148. data/lib/solargraph/parser/rubyvm/node_processors/orasgn_node.rb +0 -15
  149. data/lib/solargraph/parser/rubyvm/node_processors/resbody_node.rb +0 -51
  150. data/lib/solargraph/parser/rubyvm/node_processors/sclass_node.rb +0 -32
  151. data/lib/solargraph/parser/rubyvm/node_processors/scope_node.rb +0 -15
  152. data/lib/solargraph/parser/rubyvm/node_processors/send_node.rb +0 -279
  153. data/lib/solargraph/parser/rubyvm/node_processors.rb +0 -64
  154. data/lib/solargraph/parser/rubyvm/node_wrapper.rb +0 -47
  155. data/lib/solargraph/parser/rubyvm.rb +0 -40
@@ -51,6 +51,7 @@ module Solargraph
51
51
 
52
52
  class << self
53
53
  # @param filename [String]
54
+ # @param level [Symbol]
54
55
  # @return [self]
55
56
  def load filename, level = :normal
56
57
  source = Solargraph::Source.load(filename)
@@ -61,6 +62,7 @@ module Solargraph
61
62
 
62
63
  # @param code [String]
63
64
  # @param filename [String, nil]
65
+ # @param level [Symbol]
64
66
  # @return [self]
65
67
  def load_string code, filename = nil, level = :normal
66
68
  source = Solargraph::Source.load_string(code, filename)
@@ -126,11 +128,16 @@ module Solargraph
126
128
  # @return [Boolean]
127
129
  def resolved_constant? pin
128
130
  return true if pin.typify(api_map).defined?
129
- api_map.get_constants('', *pin.closure.gates)
130
- .select { |p| p.name == pin.return_type.namespace }
131
- .any? { |p| p.infer(api_map).defined? }
131
+ constant_pins = api_map.get_constants('', *pin.closure.gates)
132
+ .select { |p| p.name == pin.return_type.namespace }
133
+ return true if constant_pins.find { |p| p.typify(api_map).defined? }
134
+ # will need to probe when a constant name is assigned to a
135
+ # class/module (alias)
136
+ return true if constant_pins.find { |p| p.probe(api_map).defined? }
137
+ false
132
138
  end
133
139
 
140
+ # @param pin [Pin::Base]
134
141
  def virtual_pin? pin
135
142
  pin.location && source_map.source.comment_at?(pin.location.range.ending)
136
143
  end
@@ -158,7 +165,11 @@ module Solargraph
158
165
  end
159
166
  end
160
167
  end
168
+ # @todo Should be able to probe type of name and data here
169
+ # @param name [String]
170
+ # @param data [Hash{Symbol => BasicObject}]
161
171
  params.each_pair do |name, data|
172
+ # @type [ComplexType]
162
173
  type = data[:qualified]
163
174
  if type.undefined?
164
175
  result.push Problem.new(pin.location, "Unresolved type #{data[:tagged]} for #{name} param on #{pin.path}", pin: pin)
@@ -167,6 +178,7 @@ module Solargraph
167
178
  result
168
179
  end
169
180
 
181
+ # @return [Array<Pin::Base>]
170
182
  def ignored_pins
171
183
  @ignored_pins ||= []
172
184
  end
@@ -214,6 +226,7 @@ module Solargraph
214
226
  source_map.pins_by_class(Pin::BaseVariable) + source_map.locals.select { |pin| pin.is_a?(Pin::LocalVariable) }
215
227
  end
216
228
 
229
+ # @return [Array<Problem>]
217
230
  def const_problems
218
231
  return [] unless rules.validate_consts?
219
232
  result = []
@@ -232,6 +245,7 @@ module Solargraph
232
245
  result
233
246
  end
234
247
 
248
+ # @return [Array<Problem>]
235
249
  def call_problems
236
250
  result = []
237
251
  Solargraph::Parser::NodeMethods.call_nodes_from(source_map.source.node).each do |call|
@@ -271,6 +285,7 @@ module Solargraph
271
285
  # @param block_pin [Solargraph::Pin::Base]
272
286
  # @param locals [Array<Solargraph::Pin::Base>]
273
287
  # @param location [Solargraph::Location]
288
+ # @return [Array<Problem>]
274
289
  def argument_problems_for chain, api_map, block_pin, locals, location
275
290
  result = []
276
291
  base = chain
@@ -298,6 +313,9 @@ module Solargraph
298
313
  all_errors = []
299
314
  pin.signatures.sort { |sig| sig.parameters.length }.each do |sig|
300
315
  errors = []
316
+ # @todo these should be able to be probed
317
+ # @param par [Parameter]
318
+ # @param idx [Integer]
301
319
  sig.parameters.each_with_index do |par, idx|
302
320
  argchain = base.links.last.arguments[idx]
303
321
  if argchain.nil?
@@ -311,7 +329,7 @@ module Solargraph
311
329
  end
312
330
  if argchain
313
331
  if par.decl != :arg
314
- errors.concat kwarg_problems_for argchain, api_map, block_pin, locals, location, pin, params, idx
332
+ errors.concat kwarg_problems_for sig, argchain, api_map, block_pin, locals, location, pin, params, idx
315
333
  next
316
334
  else
317
335
  ptype = params.key?(par.name) ? params[par.name][:qualified] : ComplexType::UNDEFINED
@@ -343,10 +361,21 @@ module Solargraph
343
361
  result
344
362
  end
345
363
 
346
- def kwarg_problems_for argchain, api_map, block_pin, locals, location, pin, params, idx
364
+ # @param sig [Pin::Signature]
365
+ # @param argchain [Source::Chain]
366
+ # @param api_map [ApiMap]
367
+ # @param block_pin [Pin::Block]
368
+ # @param locals [Array<Pin::LocalVariable>]
369
+ # @param location [Location]
370
+ # @param pin [Pin::Method]
371
+ # @param params [Hash{String => [nil, Hash]}]
372
+ # @param idx [Integer]
373
+ #
374
+ # @return [Array<Problem>]
375
+ def kwarg_problems_for sig, argchain, api_map, block_pin, locals, location, pin, params, idx
347
376
  result = []
348
377
  kwargs = convert_hash(argchain.node)
349
- par = pin.signatures.first.parameters[idx]
378
+ par = sig.parameters[idx]
350
379
  argchain = kwargs[par.name.to_sym]
351
380
  if par.decl == :kwrestarg || (par.decl == :optarg && idx == pin.parameters.length - 1 && par.asgn_code == '{}')
352
381
  result.concat kwrestarg_problems_for(api_map, block_pin, locals, location, pin, params, kwargs)
@@ -371,6 +400,14 @@ module Solargraph
371
400
  result
372
401
  end
373
402
 
403
+ # @param api_map [ApiMap]
404
+ # @param block_pin [Pin::Block]
405
+ # @param locals [Array<Pin::LocalVariable>]
406
+ # @param location [Location]
407
+ # @param pin [Pin::Method]
408
+ # @param params [Hash{String => [nil, Hash]}]
409
+ # @param kwargs [Hash{Symbol => Source::Chain}]
410
+ # @return [Array<Problem>]
374
411
  def kwrestarg_problems_for(api_map, block_pin, locals, location, pin, params, kwargs)
375
412
  result = []
376
413
  kwargs.each_pair do |pname, argchain|
@@ -384,8 +421,8 @@ module Solargraph
384
421
  result
385
422
  end
386
423
 
387
- # @param [Pin::Method]
388
- # @return [Hash]
424
+ # @param pin [Pin::Method]
425
+ # @return [Hash{String => Hash{Symbol => BaseObject}}]
389
426
  def param_hash(pin)
390
427
  tags = pin.docstring.tags(:param)
391
428
  return {} if tags.empty?
@@ -400,10 +437,12 @@ module Solargraph
400
437
  result
401
438
  end
402
439
 
403
- # @param [Array<Pin::Method>]
404
- # @return [Hash]
440
+ # @param pins [Array<Pin::Method>]
441
+ # @return [Hash{String => Hash{Symbol => BasicObject}}]
405
442
  def first_param_hash(pins)
406
443
  pins.each do |pin|
444
+ # @todo this assignment from parametric use of Hash should not lose its generic
445
+ # @type [Hash{String => Hash{Symbol => BasicObject}]
407
446
  result = param_hash(pin)
408
447
  return result unless result.empty?
409
448
  end
@@ -417,6 +456,7 @@ module Solargraph
417
456
  end
418
457
 
419
458
  # True if the pin is either internal (part of the workspace) or from the core/stdlib
459
+ # @param pin [Pin::Base]
420
460
  def internal_or_core? pin
421
461
  # @todo RBS pins are not necessarily core/stdlib pins
422
462
  internal?(pin) || pin.source == :rbs
@@ -427,6 +467,7 @@ module Solargraph
427
467
  !internal? pin
428
468
  end
429
469
 
470
+ # @param pin [Pin::Base]
430
471
  def declared_externally? pin
431
472
  return true if pin.assignment.nil?
432
473
  chain = Solargraph::Parser.chain(pin.assignment, filename)
@@ -454,6 +495,10 @@ module Solargraph
454
495
  true
455
496
  end
456
497
 
498
+ # @param pin [Pin::Method]
499
+ # @param arguments [Array<Source::Chain>]
500
+ # @param location [Location]
501
+ # @return [Array<Problem>]
457
502
  def arity_problems_for pin, arguments, location
458
503
  results = pin.signatures.map do |sig|
459
504
  r = parameterized_arity_problems_for(pin, sig.parameters, arguments, location)
@@ -463,14 +508,15 @@ module Solargraph
463
508
  results.first
464
509
  end
465
510
 
511
+ # @param pin [Pin::Method]
512
+ # @param parameters [Array<Pin::Parameter>]
513
+ # @param arguments [Array<Source::Chain>]
514
+ # @param location [Location]
515
+ # @return [Array<Problem>]
466
516
  def parameterized_arity_problems_for(pin, parameters, arguments, location)
467
517
  return [] unless pin.explicit?
468
518
  return [] if parameters.empty? && arguments.empty?
469
519
  return [] if pin.anon_splat?
470
- if parameters.empty?
471
- return [] if arguments.length == 1 && arguments.last.links.last.is_a?(Source::Chain::BlockVariable)
472
- return [Problem.new(location, "Too many arguments to #{pin.path}")]
473
- end
474
520
  unchecked = arguments.clone
475
521
  add_params = 0
476
522
  if unchecked.empty? && parameters.any? { |param| param.decl == :kwarg }
@@ -510,9 +556,6 @@ module Solargraph
510
556
  return [] if parameters.any?(&:rest?)
511
557
  opt = optional_param_count(parameters)
512
558
  return [] if unchecked.length <= req + opt
513
- if unchecked.length == req + opt + 1 && unchecked.last.links.last.is_a?(Source::Chain::BlockVariable)
514
- return []
515
- end
516
559
  if req + add_params + 1 == unchecked.length && any_splatted_call?(unchecked.map(&:node)) && (parameters.map(&:decl) & [:kwarg, :kwoptarg, :kwrestarg]).any?
517
560
  return []
518
561
  end
@@ -528,20 +571,30 @@ module Solargraph
528
571
  []
529
572
  end
530
573
 
574
+ # @param parameters [Enumerable<Pin::Parameter>]
575
+ # @todo need to use generic types in method to choose correct
576
+ # signature and generate Integer as return type
577
+ # @sg-ignore
578
+ # @return [Integer]
531
579
  def required_param_count(parameters)
532
580
  parameters.sum { |param| %i[arg kwarg].include?(param.decl) ? 1 : 0 }
533
581
  end
534
582
 
583
+ # @param parameters [Enumerable<Pin::Parameter>]
535
584
  # @param pin [Pin::Method]
585
+ # @return [Integer]
536
586
  def optional_param_count(parameters)
537
587
  parameters.select { |p| p.decl == :optarg }.length
538
588
  end
539
589
 
590
+ # @param pin [Pin::Method]
540
591
  def abstract? pin
541
- pin.docstring.has_tag?(:abstract) ||
542
- (pin.closure && pin.closure.docstring.has_tag?(:abstract))
592
+ pin.docstring.has_tag?('abstract') ||
593
+ (pin.closure && pin.closure.docstring.has_tag?('abstract'))
543
594
  end
544
595
 
596
+ # @param pin [Pin::Base]
597
+ # @return [Array<Source::Chain>]
545
598
  def fake_args_for(pin)
546
599
  args = []
547
600
  with_opts = false
@@ -562,6 +615,8 @@ module Solargraph
562
615
  args
563
616
  end
564
617
 
618
+ # @param problems [Array<Problem>]
619
+ # @return [Array<Problem>]
565
620
  def without_ignored problems
566
621
  problems.reject do |problem|
567
622
  node = source_map.source.node_at(problem.location.range.start.line, problem.location.range.start.column)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Solargraph
4
- VERSION = '0.52.0'
4
+ VERSION = '0.53.0'
5
5
  end
@@ -14,7 +14,7 @@ module Solargraph
14
14
  # @return [String]
15
15
  attr_reader :directory
16
16
 
17
- # @return [Hash]
17
+ # @return [Hash{String => BasicObject}]
18
18
  attr_reader :raw_data
19
19
 
20
20
  # @param directory [String]
@@ -41,6 +41,7 @@ module Solargraph
41
41
  @excluded ||= process_exclusions(@raw_data['exclude'])
42
42
  end
43
43
 
44
+ # @param filename [String]
44
45
  def allow? filename
45
46
  filename = File.absolute_path(filename, directory)
46
47
  filename.start_with?(directory) &&
@@ -111,7 +112,7 @@ module Solargraph
111
112
 
112
113
  # @return [String]
113
114
  def global_config_path
114
- ENV['SOLARGRAPH_GLOBAL_CONFIG'] ||
115
+ ENV['SOLARGRAPH_GLOBAL_CONFIG'] ||
115
116
  File.join(Dir.home, '.config', 'solargraph', 'config.yml')
116
117
  end
117
118
 
@@ -121,7 +122,7 @@ module Solargraph
121
122
  File.join(@directory, '.solargraph.yml')
122
123
  end
123
124
 
124
- # @return [Hash]
125
+ # @return [Hash{String => Array, Hash, Integer}]
125
126
  def config_data
126
127
  workspace_config = read_config(workspace_config_path)
127
128
  global_config = read_config(global_config_path)
@@ -136,15 +137,15 @@ module Solargraph
136
137
 
137
138
  # Read a .solargraph yaml config
138
139
  #
139
- # @param directory [String]
140
- # @return [Hash, nil]
140
+ # @param config_path [String]
141
+ # @return [Hash{String => Array, Hash, Integer}, nil]
141
142
  def read_config config_path = ''
142
143
  return nil if config_path.empty?
143
144
  return nil unless File.file?(config_path)
144
145
  YAML.safe_load(File.read(config_path))
145
146
  end
146
147
 
147
- # @return [Hash]
148
+ # @return [Hash{String => Array, Hash, Integer}]
148
149
  def default_config
149
150
  {
150
151
  'include' => ['**/*.rb'],
@@ -222,6 +223,7 @@ module Solargraph
222
223
  glob.gsub(/(\/\*|\/\*\*\/\*\*?)$/, '')
223
224
  end
224
225
 
226
+ # @return [Array<String>]
225
227
  def excluded_directories
226
228
  @raw_data['exclude']
227
229
  .select { |g| glob_is_directory?(g) }
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'open3'
4
- require 'rubygems'
5
4
  require 'json'
6
5
 
7
6
  module Solargraph
@@ -200,6 +199,7 @@ module Solargraph
200
199
  config.require_paths.map{|p| File.join(directory, p)}
201
200
  end
202
201
 
202
+ # @return [void]
203
203
  def require_plugins
204
204
  config.plugins.each do |plugin|
205
205
  begin
@@ -4,13 +4,19 @@ module Solargraph
4
4
  class YardMap
5
5
  class Cache
6
6
  def initialize
7
+ # @type [Hash{String => Array<Solargraph::Pin::Base>}]
7
8
  @path_pins = {}
8
9
  end
9
10
 
11
+ # @param path [String]
12
+ # @param pins [Array<Solargraph::Pin::Base>]
13
+ # @return [Array<Solargraph::Pin::Base>]
10
14
  def set_path_pins path, pins
11
15
  @path_pins[path] = pins
12
16
  end
13
17
 
18
+ # @param path [String]
19
+ # @return [Array<Solargraph::Pin::Base>]
14
20
  def get_path_pins path
15
21
  @path_pins[path]
16
22
  end
@@ -4,7 +4,7 @@ module Solargraph
4
4
  module_function
5
5
 
6
6
  # @param code_object [YARD::CodeObjects::Base]
7
- # @param spec [Gem::Specification]
7
+ # @param spec [Gem::Specification, nil]
8
8
  # @return [Solargraph::Location, nil]
9
9
  def object_location code_object, spec
10
10
  return nil if spec.nil? || code_object.nil? || code_object.file.nil? || code_object.line.nil?
@@ -6,6 +6,13 @@ module Solargraph
6
6
  module ToMethod
7
7
  extend YardMap::Helpers
8
8
 
9
+ # @param code_object [YARD::CodeObjects::Base]
10
+ # @param name [String, nil]
11
+ # @param scope [Symbol, nil]
12
+ # @param visibility [Symbol, nil]
13
+ # @param closure [Solargraph::Pin::Namespace, nil]
14
+ # @param spec [Gem::Specification, nil]
15
+ # @return [Solargraph::Pin::Method]
9
16
  def self.make code_object, name = nil, scope = nil, visibility = nil, closure = nil, spec = nil
10
17
  closure ||= Solargraph::Pin::Namespace.new(
11
18
  name: code_object.namespace.to_s,
@@ -32,6 +39,9 @@ module Solargraph
32
39
  private
33
40
 
34
41
  # @param code_object [YARD::CodeObjects::Base]
42
+ # @param location [Location],
43
+ # @param comments [String]
44
+ # @param pin [Pin::Base]
35
45
  # @return [Array<Solargraph::Pin::Parameter>]
36
46
  def get_parameters code_object, location, comments, pin
37
47
  return [] unless code_object.is_a?(YARD::CodeObjects::MethodObject)
@@ -51,7 +61,7 @@ module Solargraph
51
61
  end
52
62
  end
53
63
 
54
- # @param a [Array]
64
+ # @param a [Array<String>]
55
65
  # @return [String]
56
66
  def arg_name a
57
67
  a[0].gsub(/[^a-z0-9_]/i, '')
@@ -7,6 +7,8 @@ module Solargraph
7
7
  module_function
8
8
 
9
9
  # @param code_object [YARD::CodeObjects::Base]
10
+ # @param location [Solargraph::Location]
11
+ # @param comments [String]
10
12
  # @return [Array<Solargraph::Pin::Parameter>]
11
13
  def get_parameters code_object, location, comments
12
14
  return [] unless code_object.is_a?(YARD::CodeObjects::MethodObject)
@@ -26,7 +28,7 @@ module Solargraph
26
28
  end
27
29
  end
28
30
 
29
- # @param a [Array]
31
+ # @param a [Array<String>]
30
32
  # @return [String]
31
33
  def arg_name a
32
34
  a[0].gsub(/[^a-z0-9_]/i, '')
@@ -52,10 +54,15 @@ module Solargraph
52
54
  end
53
55
  private_constant :InnerMethods
54
56
 
55
- # include YardMixin
56
- # extend YardMixin
57
- extend Helpers
57
+ include Helpers
58
58
 
59
+ # @param code_object [YARD::CodeObjects::Base]
60
+ # @param name [String, nil]
61
+ # @param scope [Symbol, nil]
62
+ # @param visibility [Symbol, nil]
63
+ # @param closure [Solargraph::Pin::Base, nil]
64
+ # @param spec [Solargraph::Pin::Base, nil]
65
+ # @return [Solargraph::Pin::Method]
59
66
  def make code_object, name = nil, scope = nil, visibility = nil, closure = nil, spec = nil
60
67
  closure ||= Solargraph::Pin::Namespace.new(
61
68
  name: code_object.namespace.to_s,