solargraph 0.53.4 → 0.54.1

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 (80) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +41 -0
  3. data/lib/solargraph/api_map/cache.rb +2 -12
  4. data/lib/solargraph/api_map/store.rb +14 -5
  5. data/lib/solargraph/api_map.rb +67 -24
  6. data/lib/solargraph/complex_type/type_methods.rb +70 -39
  7. data/lib/solargraph/complex_type/unique_type.rb +187 -73
  8. data/lib/solargraph/complex_type.rb +105 -40
  9. data/lib/solargraph/doc_map.rb +19 -3
  10. data/lib/solargraph/gem_pins.rb +9 -1
  11. data/lib/solargraph/language_server/host/dispatch.rb +8 -1
  12. data/lib/solargraph/language_server/host/message_worker.rb +29 -3
  13. data/lib/solargraph/language_server/host/sources.rb +1 -61
  14. data/lib/solargraph/language_server/host.rb +21 -68
  15. data/lib/solargraph/language_server/message/base.rb +1 -1
  16. data/lib/solargraph/language_server/message/initialize.rb +14 -0
  17. data/lib/solargraph/language_server/message/text_document/definition.rb +3 -3
  18. data/lib/solargraph/language_server/message/text_document/document_symbol.rb +3 -3
  19. data/lib/solargraph/language_server/message/text_document/formatting.rb +1 -0
  20. data/lib/solargraph/language_server/message/text_document/hover.rb +1 -1
  21. data/lib/solargraph/language_server/message/text_document/type_definition.rb +3 -3
  22. data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +2 -2
  23. data/lib/solargraph/language_server/progress.rb +135 -0
  24. data/lib/solargraph/language_server.rb +1 -0
  25. data/lib/solargraph/library.rb +144 -113
  26. data/lib/solargraph/location.rb +14 -1
  27. data/lib/solargraph/parser/node_processor/base.rb +3 -2
  28. data/lib/solargraph/parser/node_processor.rb +1 -0
  29. data/lib/solargraph/parser/parser_gem/class_methods.rb +3 -7
  30. data/lib/solargraph/parser/parser_gem/node_chainer.rb +13 -7
  31. data/lib/solargraph/parser/parser_gem/node_methods.rb +1 -5
  32. data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +23 -19
  33. data/lib/solargraph/parser/parser_gem/node_processors/lvasgn_node.rb +2 -2
  34. data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +53 -0
  35. data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +6 -4
  36. data/lib/solargraph/parser/parser_gem/node_processors.rb +2 -0
  37. data/lib/solargraph/parser.rb +2 -5
  38. data/lib/solargraph/pin/base.rb +15 -1
  39. data/lib/solargraph/pin/base_variable.rb +35 -6
  40. data/lib/solargraph/pin/block.rb +48 -11
  41. data/lib/solargraph/pin/callable.rb +147 -0
  42. data/lib/solargraph/pin/closure.rb +8 -3
  43. data/lib/solargraph/pin/common.rb +2 -6
  44. data/lib/solargraph/pin/conversions.rb +3 -2
  45. data/lib/solargraph/pin/delegated_method.rb +5 -1
  46. data/lib/solargraph/pin/documenting.rb +2 -0
  47. data/lib/solargraph/pin/instance_variable.rb +2 -2
  48. data/lib/solargraph/pin/method.rb +54 -32
  49. data/lib/solargraph/pin/namespace.rb +4 -4
  50. data/lib/solargraph/pin/parameter.rb +14 -39
  51. data/lib/solargraph/pin/proxy_type.rb +1 -1
  52. data/lib/solargraph/pin/signature.rb +3 -129
  53. data/lib/solargraph/pin.rb +4 -1
  54. data/lib/solargraph/range.rb +2 -4
  55. data/lib/solargraph/rbs_map/conversions.rb +79 -42
  56. data/lib/solargraph/rbs_map/core_fills.rb +6 -6
  57. data/lib/solargraph/rbs_map.rb +11 -3
  58. data/lib/solargraph/shell.rb +35 -15
  59. data/lib/solargraph/source/chain/array.rb +6 -5
  60. data/lib/solargraph/source/chain/block_symbol.rb +1 -1
  61. data/lib/solargraph/source/chain/block_variable.rb +1 -1
  62. data/lib/solargraph/source/chain/call.rb +78 -50
  63. data/lib/solargraph/source/chain/link.rb +9 -0
  64. data/lib/solargraph/source/chain/or.rb +1 -1
  65. data/lib/solargraph/source/chain.rb +60 -16
  66. data/lib/solargraph/source/cursor.rb +13 -2
  67. data/lib/solargraph/source/updater.rb +1 -0
  68. data/lib/solargraph/source.rb +102 -129
  69. data/lib/solargraph/source_map/clip.rb +4 -4
  70. data/lib/solargraph/source_map/data.rb +30 -0
  71. data/lib/solargraph/source_map/mapper.rb +3 -2
  72. data/lib/solargraph/source_map.rb +37 -15
  73. data/lib/solargraph/type_checker/rules.rb +6 -1
  74. data/lib/solargraph/type_checker.rb +50 -25
  75. data/lib/solargraph/version.rb +1 -1
  76. data/lib/solargraph/views/environment.erb +3 -5
  77. data/lib/solargraph/workspace/config.rb +2 -1
  78. data/lib/solargraph/workspace.rb +13 -0
  79. metadata +6 -3
  80. data/lib/solargraph/language_server/host/cataloger.rb +0 -57
@@ -18,9 +18,9 @@ module Solargraph
18
18
  @context ||= begin
19
19
  result = super
20
20
  if scope == :class
21
- ComplexType.parse("Class<#{result.namespace}>")
21
+ ComplexType.parse("::Class<#{result.rooted_namespace}>")
22
22
  else
23
- ComplexType.parse("#{result.namespace}")
23
+ result.reduce_class_type
24
24
  end
25
25
  end
26
26
  end
@@ -4,12 +4,9 @@ module Solargraph
4
4
  module Pin
5
5
  # The base class for method and attribute pins.
6
6
  #
7
- class Method < Closure
7
+ class Method < Callable
8
8
  include Solargraph::Parser::NodeMethods
9
9
 
10
- # @return [::Array<Pin::Parameter>]
11
- attr_reader :parameters
12
-
13
10
  # @return [::Symbol] :public, :private, or :protected
14
11
  attr_reader :visibility
15
12
 
@@ -18,24 +15,20 @@ module Solargraph
18
15
 
19
16
  # @param visibility [::Symbol] :public, :protected, or :private
20
17
  # @param explicit [Boolean]
21
- # @param parameters [::Array<Pin::Parameter>]
22
18
  # @param block [Pin::Signature, nil, ::Symbol]
23
- # @param node [Parser::AST::Node, RubyVM::AbstractSyntaxTree::Node, nil]
19
+ # @param node [Parser::AST::Node, nil]
24
20
  # @param attribute [Boolean]
25
21
  # @param signatures [::Array<Signature>, nil]
26
22
  # @param anon_splat [Boolean]
27
- # @param return_type [ComplexType, nil]
28
- def initialize visibility: :public, explicit: true, parameters: [], block: :undefined, node: nil, attribute: false, signatures: nil, anon_splat: false, return_type: nil, **splat
23
+ def initialize visibility: :public, explicit: true, block: :undefined, node: nil, attribute: false, signatures: nil, anon_splat: false, **splat
29
24
  super(**splat)
30
25
  @visibility = visibility
31
26
  @explicit = explicit
32
- @parameters = parameters
33
27
  @block = block
34
28
  @node = node
35
29
  @attribute = attribute
36
30
  @signatures = signatures
37
31
  @anon_splat = anon_splat
38
- @return_type = return_type
39
32
  end
40
33
 
41
34
  def transform_types(&transform)
@@ -44,15 +37,16 @@ module Solargraph
44
37
  m.signatures = m.signatures.map do |sig|
45
38
  sig.transform_types(&transform)
46
39
  end
47
- m.parameters = m.parameters.map do |param|
48
- param.transform_types(&transform)
49
- end
50
40
  m.block = block&.transform_types(&transform)
51
41
  m.signature_help = nil
52
42
  m.documentation = nil
53
43
  m
54
44
  end
55
45
 
46
+ def all_rooted?
47
+ super && parameters.all?(&:all_rooted?) && (!block || block&.all_rooted?) && signatures.all?(&:all_rooted?)
48
+ end
49
+
56
50
  # @param signature [Pin::Signature]
57
51
  # @return [Pin::Method]
58
52
  def with_single_signature(signature)
@@ -71,15 +65,14 @@ module Solargraph
71
65
  m
72
66
  end
73
67
 
68
+ def block?
69
+ !block.nil?
70
+ end
71
+
74
72
  # @return [Pin::Signature, nil]
75
73
  def block
76
74
  return @block unless @block == :undefined
77
- @block = signatures.first.block
78
- end
79
-
80
- # @return [::Array<String>]
81
- def parameter_names
82
- @parameter_names ||= parameters.map(&:name)
75
+ @block = signatures.first&.block
83
76
  end
84
77
 
85
78
  def completion_item_kind
@@ -123,9 +116,9 @@ module Solargraph
123
116
  )
124
117
  end
125
118
  yield_return_type = ComplexType.try_parse(*yieldreturn_tags.flat_map(&:types))
126
- block = Signature.new(generics, yield_parameters, yield_return_type)
119
+ block = Signature.new(generics: generics, parameters: yield_parameters, return_type: yield_return_type)
127
120
  end
128
- Signature.new(generics, parameters, return_type, block)
121
+ Signature.new(generics: generics, parameters: parameters, return_type: return_type, block: block)
129
122
  end
130
123
 
131
124
  # @return [::Array<Signature>]
@@ -270,9 +263,9 @@ module Solargraph
270
263
  end
271
264
 
272
265
  def nearly? other
273
- return false unless super
274
- parameters == other.parameters and
275
- scope == other.scope and
266
+ super &&
267
+ parameters == other.parameters &&
268
+ scope == other.scope &&
276
269
  visibility == other.visibility
277
270
  end
278
271
 
@@ -283,15 +276,18 @@ module Solargraph
283
276
  def try_merge! pin
284
277
  return false unless super
285
278
  @node = pin.node
279
+ @resolved_ref_tag = false
286
280
  true
287
281
  end
288
282
 
289
283
  # @return [::Array<Pin::Method>]
290
284
  def overloads
291
- @overloads ||= docstring.tags(:overload).map do |tag|
285
+ # Ignore overload tags with nil parameters. If it's not an array, the
286
+ # tag's source is likely malformed.
287
+ @overloads ||= docstring.tags(:overload).select(&:parameters).map do |tag|
292
288
  Pin::Signature.new(
293
- generics,
294
- tag.parameters.map do |src|
289
+ generics: generics,
290
+ parameters: tag.parameters.map do |src|
295
291
  name, decl = parse_overload_param(src.first)
296
292
  Pin::Parameter.new(
297
293
  location: location,
@@ -303,7 +299,7 @@ module Solargraph
303
299
  return_type: param_type_from_name(tag, src.first)
304
300
  )
305
301
  end,
306
- ComplexType.try_parse(*tag.docstring.tags(:return).flat_map(&:types))
302
+ return_type: ComplexType.try_parse(*tag.docstring.tags(:return).flat_map(&:types))
307
303
  )
308
304
  end
309
305
  @overloads
@@ -313,12 +309,33 @@ module Solargraph
313
309
  @anon_splat
314
310
  end
315
311
 
312
+ # @param [ApiMap]
313
+ # @return [self]
314
+ def resolve_ref_tag api_map
315
+ return self if @resolved_ref_tag
316
+
317
+ @resolved_ref_tag = true
318
+ return self unless docstring.ref_tags.any?
319
+ docstring.ref_tags.each do |tag|
320
+ ref = if tag.owner.to_s.start_with?(/[#\.]/)
321
+ api_map.get_methods(namespace)
322
+ .select { |pin| pin.path.end_with?(tag.owner.to_s) }
323
+ .first
324
+ else
325
+ # @todo Resolve relative namespaces
326
+ api_map.get_path_pins(tag.owner.to_s).first
327
+ end
328
+ next unless ref
329
+
330
+ docstring.add_tag(*ref.docstring.tags(:param))
331
+ end
332
+ self
333
+ end
334
+
316
335
  protected
317
336
 
318
337
  attr_writer :block
319
338
 
320
- attr_writer :parameters
321
-
322
339
  attr_writer :signatures
323
340
 
324
341
  attr_writer :signature_help
@@ -450,7 +467,7 @@ module Solargraph
450
467
  end
451
468
  result.push ComplexType::NIL if has_nil
452
469
  return ComplexType::UNDEFINED if result.empty?
453
- ComplexType.try_parse(*result.map(&:tag).uniq)
470
+ ComplexType.new(result.uniq)
454
471
  end
455
472
 
456
473
  # @param [ApiMap] api_map
@@ -465,7 +482,7 @@ module Solargraph
465
482
  types.push type if type.defined?
466
483
  end
467
484
  return ComplexType::UNDEFINED if types.empty?
468
- ComplexType.try_parse(*types.map(&:tag).uniq)
485
+ ComplexType.new(types.uniq)
469
486
  end
470
487
 
471
488
  # When YARD parses an overload tag, it includes rest modifiers in the parameters names.
@@ -473,6 +490,7 @@ module Solargraph
473
490
  # @param name [String]
474
491
  # @return [::Array(String, ::Symbol)]
475
492
  def parse_overload_param(name)
493
+ # @todo this needs to handle mandatory vs not args, kwargs, blocks, etc
476
494
  if name.start_with?('**')
477
495
  [name[2..-1], :kwrestarg]
478
496
  elsif name.start_with?('*')
@@ -494,6 +512,10 @@ module Solargraph
494
512
  .join("\n")
495
513
  .concat("```\n")
496
514
  end
515
+
516
+ protected
517
+
518
+ attr_writer :signatures
497
519
  end
498
520
  end
499
521
  end
@@ -41,11 +41,11 @@ module Solargraph
41
41
  end
42
42
 
43
43
  def to_rbs
44
- "#{@type.to_s} #{generics_as_rbs}#{return_type.to_rbs}"
44
+ "#{@type.to_s} #{return_type.all_params.first.to_rbs}#{rbs_generics}".strip
45
45
  end
46
46
 
47
47
  def desc
48
- if name.nil?
48
+ if name.nil? || name.empty?
49
49
  '(top-level)'
50
50
  else
51
51
  to_rbs
@@ -57,7 +57,7 @@ module Solargraph
57
57
  end
58
58
 
59
59
  def full_context
60
- @full_context ||= ComplexType.try_parse("#{type.to_s.capitalize}<#{path}>")
60
+ @full_context ||= ComplexType.try_parse("::#{type.to_s.capitalize}<#{path}>")
61
61
  end
62
62
 
63
63
  def binder
@@ -83,7 +83,7 @@ module Solargraph
83
83
  end
84
84
 
85
85
  def return_type
86
- @return_type ||= ComplexType.try_parse( (type == :class ? 'Class' : 'Module') + "<#{path}>" )
86
+ @return_type ||= ComplexType.try_parse( (type == :class ? '::Class' : '::Module') + "<::#{path}>")
87
87
  end
88
88
 
89
89
  # @return [Array<String>]
@@ -27,6 +27,10 @@ module Solargraph
27
27
  decl == :kwrestarg || (assignment && [:HASH, :hash].include?(assignment.type))
28
28
  end
29
29
 
30
+ def arg?
31
+ decl == :arg
32
+ end
33
+
30
34
  def restarg?
31
35
  decl == :restarg
32
36
  end
@@ -76,6 +80,7 @@ module Solargraph
76
80
  end
77
81
  end
78
82
 
83
+ # @return [ComplexType]
79
84
  def return_type
80
85
  if @return_type.nil?
81
86
  @return_type = ComplexType::UNDEFINED
@@ -83,11 +88,11 @@ module Solargraph
83
88
  @return_type = ComplexType.try_parse(*found.types) unless found.nil? or found.types.nil?
84
89
  if @return_type.undefined?
85
90
  if decl == :restarg
86
- @return_type = ComplexType.try_parse('Array')
91
+ @return_type = ComplexType.try_parse('::Array')
87
92
  elsif decl == :kwrestarg
88
- @return_type = ComplexType.try_parse('Hash')
93
+ @return_type = ComplexType.try_parse('::Hash')
89
94
  elsif decl == :blockarg
90
- @return_type = ComplexType.try_parse('Proc')
95
+ @return_type = ComplexType.try_parse('::Proc')
91
96
  end
92
97
  end
93
98
  end
@@ -99,7 +104,9 @@ module Solargraph
99
104
  #
100
105
  # @return [Integer]
101
106
  def index
102
- closure.parameter_names.index(name)
107
+ # @type [Method, Block]
108
+ method_pin = closure
109
+ method_pin.parameter_names.index(name)
103
110
  end
104
111
 
105
112
  # @param api_map [ApiMap]
@@ -123,50 +130,18 @@ module Solargraph
123
130
 
124
131
  # @return [YARD::Tags::Tag, nil]
125
132
  def param_tag
126
- found = nil
127
133
  params = closure.docstring.tags(:param)
128
134
  params.each do |p|
129
- next unless p.name == name
130
- found = p
131
- break
132
- end
133
- if found.nil? and !index.nil?
134
- found = params[index] if params[index] && (params[index].name.nil? || params[index].name.empty?)
135
+ return p if p.name == name
135
136
  end
136
- found
137
+ params[index] if index && params[index] && (params[index].name.nil? || params[index].name.empty?)
137
138
  end
138
139
 
139
140
  # @param api_map [ApiMap]
140
141
  # @return [ComplexType]
141
142
  def typify_block_param api_map
142
143
  if closure.is_a?(Pin::Block) && closure.receiver
143
- chain = Parser.chain(closure.receiver, filename, closure.node)
144
- clip = api_map.clip_at(location.filename, location.range.start)
145
- locals = clip.locals - [self]
146
- meths = chain.define(api_map, closure, locals)
147
- receiver_type = chain.base.infer(api_map, closure, locals)
148
- meths.each do |meth|
149
- block_signature = meth.block
150
- if block_signature
151
- yield_type = block_signature.parameters[index]&.return_type
152
- else
153
- # @todo move the yieldparam tag parsing logic into the
154
- # creation of Method pins so we don't need this else
155
- # statement
156
- yps = meth.docstring.tags(:yieldparam)
157
- unless yps[index].nil? or yps[index].types.nil? or yps[index].types.empty?
158
- yield_type = ComplexType.try_parse(yps[index].types.first)
159
- end
160
- end
161
- unless yield_type.nil?
162
- if yield_type.generic? && receiver_type.defined?
163
- namespace_pin = api_map.get_namespace_pins(meth.namespace, closure.namespace).first
164
- return yield_type.resolve_generics(namespace_pin, receiver_type)
165
- else
166
- return yield_type.self_to(chain.base.infer(api_map, closure, locals).namespace).qualify(api_map, meth.context.namespace)
167
- end
168
- end
169
- end
144
+ return closure.typify_parameters(api_map)[index]
170
145
  end
171
146
  ComplexType::UNDEFINED
172
147
  end
@@ -18,7 +18,7 @@ module Solargraph
18
18
  def self.anonymous return_type
19
19
  parts = return_type.namespace.split('::')
20
20
  namespace = parts[0..-2].join('::').to_s
21
- name = parts.last.to_s
21
+ # name = parts.last.to_s
22
22
  # ProxyType.new(nil, namespace, name, return_type)
23
23
  ProxyType.new(
24
24
  closure: Solargraph::Pin::Namespace.new(name: namespace), return_type: return_type
@@ -1,143 +1,17 @@
1
1
  module Solargraph
2
2
  module Pin
3
- class Signature < Base
4
- # @return [::Array<Parameter>]
5
- attr_reader :parameters
6
-
7
- # @return [ComplexType]
8
- attr_reader :return_type
9
-
10
- # @return [self]
11
- attr_reader :block
12
-
13
- # @param generics [Array<String>]
14
- # @param parameters [Array<Parameter>]
15
- # @param return_type [ComplexType]
16
- # @param block [Signature, nil]
17
- def initialize generics, parameters, return_type, block = nil
18
- @generics = generics
19
- @parameters = parameters
20
- @return_type = return_type
21
- @block = block
3
+ class Signature < Callable
4
+ def initialize **splat
5
+ super(**splat)
22
6
  end
23
7
 
24
8
  def generics
25
9
  @generics ||= [].freeze
26
10
  end
27
11
 
28
- # @return [String]
29
- def to_rbs
30
- rbs_generics + '(' + parameters.map { |param| param.to_rbs }.join(', ') + ') ' + (block.nil? ? '' : '{ ' + block.to_rbs + ' } ') + '-> ' + return_type.to_rbs
31
- end
32
-
33
- # @return [String]
34
- def rbs_generics
35
- if generics.empty?
36
- return ''
37
- else
38
- return '[' + generics.map { |gen| gen.to_s }.join(', ') + '] '
39
- end
40
- end
41
-
42
- # @return [Array<String>]
43
- # @yieldparam [ComplexType]
44
- # @yieldreturn [ComplexType]
45
- # @return [self]
46
- def transform_types(&transform)
47
- # @todo 'super' alone should work here I think, but doesn't typecheck at level typed
48
- signature = super(&transform)
49
- signature.parameters = signature.parameters.map do |param|
50
- param.transform_types(&transform)
51
- end
52
- signature.block = block.transform_types(&transform) if signature.block?
53
- signature
54
- end
55
-
56
- # @param generics_to_resolve [Enumerable<String>]
57
- # @param arg_types [Array<ComplexType>, nil]
58
- # @param return_type_context [ComplexType, nil]
59
- # @param yield_arg_types [Array<ComplexType>, nil]
60
- # @param yield_return_type_context [ComplexType, nil]
61
- # @param context [ComplexType, nil]
62
- # @param resolved_generic_values [Hash{String => ComplexType}]
63
- # @return [self]
64
- def resolve_generics_from_context(generics_to_resolve,
65
- arg_types = nil,
66
- return_type_context = nil,
67
- yield_arg_types = nil,
68
- yield_return_type_context = nil,
69
- resolved_generic_values: {})
70
- signature = super(generics_to_resolve, return_type_context, resolved_generic_values: resolved_generic_values)
71
- signature.parameters = signature.parameters.each_with_index.map do |param, i|
72
- if arg_types.nil?
73
- param.dup
74
- else
75
- param.resolve_generics_from_context(generics_to_resolve,
76
- arg_types[i],
77
- resolved_generic_values: resolved_generic_values)
78
- end
79
- end
80
- signature.block = block.resolve_generics_from_context(generics_to_resolve,
81
- yield_arg_types,
82
- yield_return_type_context,
83
- resolved_generic_values: resolved_generic_values) if signature.block?
84
- signature
85
- end
86
-
87
- # @param generics_to_resolve [Enumerable<String>]
88
- # @param arg_types [Array<ComplexType>, nil]
89
- # @param return_type_context [ComplexType, nil]
90
- # @param yield_arg_types [Array<ComplexType>, nil]
91
- # @param yield_return_type_context [ComplexType, nil]
92
- # @param context [ComplexType, nil]
93
- # @param resolved_generic_values [Hash{String => ComplexType}]
94
- # @return [self]
95
- def resolve_generics_from_context_until_complete(generics_to_resolve,
96
- arg_types = nil,
97
- return_type_context = nil,
98
- yield_arg_types = nil,
99
- yield_return_type_context = nil,
100
- resolved_generic_values: {})
101
- # See
102
- # https://github.com/soutaro/steep/tree/master/lib/steep/type_inference
103
- # and
104
- # https://github.com/sorbet/sorbet/blob/master/infer/inference.cc
105
- # for other implementations
106
-
107
- return self if generics_to_resolve.empty?
108
-
109
- last_resolved_generic_values = resolved_generic_values.dup
110
- new_pin = resolve_generics_from_context(generics_to_resolve,
111
- arg_types,
112
- return_type_context,
113
- yield_arg_types,
114
- yield_return_type_context,
115
- resolved_generic_values: resolved_generic_values)
116
- if last_resolved_generic_values == resolved_generic_values
117
- # erase anything unresolved
118
- return new_pin.erase_generics(self.generics)
119
- end
120
- new_pin.resolve_generics_from_context_until_complete(generics_to_resolve,
121
- arg_types,
122
- return_type_context,
123
- yield_arg_types,
124
- yield_return_type_context,
125
- resolved_generic_values: resolved_generic_values)
126
- end
127
-
128
12
  def identity
129
13
  @identity ||= "signature#{object_id}"
130
14
  end
131
-
132
- def block?
133
- !!@block
134
- end
135
-
136
- protected
137
-
138
- attr_writer :block
139
-
140
- attr_writer :parameters
141
15
  end
142
16
  end
143
17
  end
@@ -3,7 +3,9 @@
3
3
  require 'yard'
4
4
 
5
5
  module Solargraph
6
- # The namespace for pins used in maps.
6
+ # The namespace for Pins used in SourceMaps.
7
+ #
8
+ # Pins represent declarations, from gems, Sources, and the Ruby core.
7
9
  #
8
10
  module Pin
9
11
  autoload :Common, 'solargraph/pin/common'
@@ -32,6 +34,7 @@ module Solargraph
32
34
  autoload :Singleton, 'solargraph/pin/singleton'
33
35
  autoload :KeywordParam, 'solargraph/pin/keyword_param'
34
36
  autoload :Search, 'solargraph/pin/search'
37
+ autoload :Callable, 'solargraph/pin/callable'
35
38
 
36
39
  ROOT_PIN = Pin::Namespace.new(type: :class, name: '', closure: nil)
37
40
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Solargraph
4
- # A pair of positions that compose a section of text.
4
+ # A pair of Positions that compose a section of text in code.
5
5
  #
6
6
  class Range
7
7
  # @return [Position]
@@ -65,9 +65,7 @@ module Solargraph
65
65
  # @param node [Parser::AST::Node]
66
66
  # @return [Range, nil]
67
67
  def self.from_node node
68
- if Parser.rubyvm? && node.is_a?(RubyVM::AbstractSyntaxTree::Node)
69
- Solargraph::Range.from_to(node.first_lineno - 1, node.first_column, node.last_lineno - 1, node.last_column)
70
- elsif node&.loc && node.loc.expression
68
+ if node&.loc && node.loc.expression
71
69
  from_expr(node.loc.expression)
72
70
  end
73
71
  end