solargraph 0.32.5 → 0.33.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 (125) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/README.md +2 -11
  4. data/lib/solargraph.rb +1 -2
  5. data/lib/solargraph/api_map.rb +93 -63
  6. data/lib/solargraph/api_map/cache.rb +16 -1
  7. data/lib/solargraph/api_map/source_to_yard.rb +16 -7
  8. data/lib/solargraph/api_map/store.rb +55 -12
  9. data/lib/solargraph/complex_type.rb +58 -14
  10. data/lib/solargraph/complex_type/type_methods.rb +2 -2
  11. data/lib/solargraph/complex_type/unique_type.rb +33 -4
  12. data/lib/solargraph/core_fills.rb +40 -12
  13. data/lib/solargraph/diagnostics.rb +4 -3
  14. data/lib/solargraph/diagnostics/base.rb +6 -0
  15. data/lib/solargraph/diagnostics/require_not_found.rb +17 -10
  16. data/lib/solargraph/diagnostics/rubocop_helpers.rb +2 -0
  17. data/lib/solargraph/diagnostics/type_check.rb +51 -0
  18. data/lib/solargraph/diagnostics/update_errors.rb +1 -0
  19. data/lib/solargraph/language_server/host.rb +55 -25
  20. data/lib/solargraph/language_server/host/diagnoser.rb +1 -2
  21. data/lib/solargraph/language_server/host/dispatch.rb +4 -8
  22. data/lib/solargraph/language_server/host/sources.rb +1 -1
  23. data/lib/solargraph/language_server/message.rb +1 -0
  24. data/lib/solargraph/language_server/message/completion_item/resolve.rb +4 -2
  25. data/lib/solargraph/language_server/message/initialize.rb +9 -0
  26. data/lib/solargraph/language_server/message/initialized.rb +1 -0
  27. data/lib/solargraph/language_server/message/text_document.rb +1 -0
  28. data/lib/solargraph/language_server/message/text_document/code_action.rb +15 -0
  29. data/lib/solargraph/language_server/message/text_document/completion.rb +1 -1
  30. data/lib/solargraph/language_server/message/text_document/definition.rb +25 -5
  31. data/lib/solargraph/language_server/message/text_document/hover.rb +1 -1
  32. data/lib/solargraph/language_server/message/text_document/signature_help.rb +4 -0
  33. data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +8 -4
  34. data/lib/solargraph/language_server/transport/adapter.rb +12 -15
  35. data/lib/solargraph/library.rb +23 -6
  36. data/lib/solargraph/location.rb +4 -0
  37. data/lib/solargraph/pin.rb +7 -3
  38. data/lib/solargraph/pin/attribute.rb +14 -13
  39. data/lib/solargraph/pin/base.rb +56 -43
  40. data/lib/solargraph/pin/base_method.rb +41 -18
  41. data/lib/solargraph/pin/base_variable.rb +17 -15
  42. data/lib/solargraph/pin/block.rb +22 -4
  43. data/lib/solargraph/pin/closure.rb +28 -0
  44. data/lib/solargraph/pin/common.rb +59 -0
  45. data/lib/solargraph/pin/constant.rb +4 -4
  46. data/lib/solargraph/pin/conversions.rb +8 -8
  47. data/lib/solargraph/pin/duck_method.rb +3 -3
  48. data/lib/solargraph/pin/instance_variable.rb +30 -0
  49. data/lib/solargraph/pin/keyword.rb +1 -1
  50. data/lib/solargraph/pin/local_variable.rb +3 -3
  51. data/lib/solargraph/pin/localized.rb +9 -5
  52. data/lib/solargraph/pin/method.rb +26 -40
  53. data/lib/solargraph/pin/method_alias.rb +9 -6
  54. data/lib/solargraph/pin/namespace.rb +33 -10
  55. data/lib/solargraph/pin/parameter.rb +150 -0
  56. data/lib/solargraph/pin/proxy_type.rb +8 -8
  57. data/lib/solargraph/pin/reference.rb +1 -12
  58. data/lib/solargraph/pin/reference/override.rb +18 -0
  59. data/lib/solargraph/pin/reference/require.rb +2 -1
  60. data/lib/solargraph/pin/singleton.rb +9 -0
  61. data/lib/solargraph/pin/symbol.rb +9 -4
  62. data/lib/solargraph/pin/yard_pin/constant.rb +12 -3
  63. data/lib/solargraph/pin/yard_pin/method.rb +18 -6
  64. data/lib/solargraph/pin/yard_pin/namespace.rb +13 -1
  65. data/lib/solargraph/position.rb +1 -1
  66. data/lib/solargraph/range.rb +4 -0
  67. data/lib/solargraph/shell.rb +83 -4
  68. data/lib/solargraph/source.rb +32 -12
  69. data/lib/solargraph/source/chain.rb +48 -28
  70. data/lib/solargraph/source/chain/call.rb +37 -38
  71. data/lib/solargraph/source/chain/constant.rb +1 -1
  72. data/lib/solargraph/source/chain/head.rb +2 -8
  73. data/lib/solargraph/source/chain/instance_variable.rb +1 -1
  74. data/lib/solargraph/source/chain/link.rb +2 -0
  75. data/lib/solargraph/source/cursor.rb +59 -24
  76. data/lib/solargraph/source/node_chainer.rb +0 -2
  77. data/lib/solargraph/source/node_methods.rb +12 -6
  78. data/lib/solargraph/source/source_chainer.rb +38 -44
  79. data/lib/solargraph/source_map.rb +11 -18
  80. data/lib/solargraph/source_map/clip.rb +13 -15
  81. data/lib/solargraph/source_map/mapper.rb +37 -26
  82. data/lib/solargraph/source_map/node_processor.rb +13 -8
  83. data/lib/solargraph/source_map/node_processor/alias_node.rb +8 -8
  84. data/lib/solargraph/source_map/node_processor/args_node.rb +10 -16
  85. data/lib/solargraph/source_map/node_processor/base.rb +47 -4
  86. data/lib/solargraph/source_map/node_processor/block_node.rb +9 -4
  87. data/lib/solargraph/source_map/node_processor/casgn_node.rb +7 -2
  88. data/lib/solargraph/source_map/node_processor/cvasgn_node.rb +8 -3
  89. data/lib/solargraph/source_map/node_processor/def_node.rb +45 -38
  90. data/lib/solargraph/source_map/node_processor/defs_node.rb +16 -6
  91. data/lib/solargraph/source_map/node_processor/gvasgn_node.rb +8 -1
  92. data/lib/solargraph/source_map/node_processor/ivasgn_node.rb +20 -6
  93. data/lib/solargraph/source_map/node_processor/lvasgn_node.rb +10 -4
  94. data/lib/solargraph/source_map/node_processor/namespace_node.rb +18 -12
  95. data/lib/solargraph/source_map/node_processor/orasgn_node.rb +1 -1
  96. data/lib/solargraph/source_map/node_processor/resbody_node.rb +30 -0
  97. data/lib/solargraph/source_map/node_processor/sclass_node.rb +7 -1
  98. data/lib/solargraph/source_map/node_processor/send_node.rb +102 -52
  99. data/lib/solargraph/source_map/node_processor/sym_node.rb +4 -1
  100. data/lib/solargraph/source_map/region.rb +9 -8
  101. data/lib/solargraph/type_checker.rb +282 -0
  102. data/lib/solargraph/type_checker/param_def.rb +47 -0
  103. data/lib/solargraph/type_checker/problem.rb +25 -0
  104. data/lib/solargraph/version.rb +1 -1
  105. data/lib/solargraph/views/environment.erb +1 -1
  106. data/lib/solargraph/workspace.rb +2 -2
  107. data/lib/solargraph/workspace/config.rb +0 -8
  108. data/lib/solargraph/yard_map.rb +25 -69
  109. data/lib/solargraph/yard_map/core_docs.rb +8 -3
  110. data/lib/solargraph/yard_map/core_gen.rb +1 -3
  111. data/lib/solargraph/yard_map/mapper.rb +85 -0
  112. data/lib/yard-solargraph.rb +2 -0
  113. metadata +14 -14
  114. data/lib/solargraph/diagnostics/type_not_defined.rb +0 -108
  115. data/lib/solargraph/live_map.rb +0 -126
  116. data/lib/solargraph/live_map/cache.rb +0 -38
  117. data/lib/solargraph/pin/block_parameter.rb +0 -103
  118. data/lib/solargraph/pin/method_parameter.rb +0 -40
  119. data/lib/solargraph/pin/plugin/method.rb +0 -25
  120. data/lib/solargraph/plugin.rb +0 -8
  121. data/lib/solargraph/plugin/base.rb +0 -41
  122. data/lib/solargraph/plugin/canceler.rb +0 -11
  123. data/lib/solargraph/plugin/process.rb +0 -172
  124. data/lib/solargraph/plugin/runtime.rb +0 -134
  125. data/lib/yard-coregen.rb +0 -16
@@ -9,38 +9,21 @@ module Solargraph
9
9
  # @return [Parser::AST::Node]
10
10
  attr_reader :node
11
11
 
12
- def initialize location, namespace, name, comments, scope, visibility, args, node = nil
13
- super(location, namespace, name, comments)
14
- @scope = scope
15
- @visibility = visibility
12
+ def initialize args: [], node: nil, **splat
13
+ super(splat)
16
14
  @parameters = args
17
15
  @node = node
18
16
  end
19
17
 
20
18
  # @return [Array<String>]
21
19
  def parameter_names
22
- @parameter_names ||= parameters.map{|p| p.split(/[ =:]/).first}
20
+ @parameter_names ||= parameters.map{|p| p.split(/[ =:]/).first.gsub(/^(\*{1,2}|&)/, '')}
23
21
  end
24
22
 
25
23
  def kind
26
24
  Solargraph::Pin::METHOD
27
25
  end
28
26
 
29
- def path
30
- @path ||= namespace + (scope == :instance ? '#' : '.') + name
31
- end
32
-
33
- def context
34
- @context ||= begin
35
- if scope == :class
36
- # @todo Determine whether the namespace is a class or a module
37
- ComplexType.try_parse("Class<#{namespace}>")
38
- else
39
- ComplexType.try_parse(namespace)
40
- end
41
- end
42
- end
43
-
44
27
  def completion_item_kind
45
28
  Solargraph::LanguageServer::CompletionItemKinds::METHOD
46
29
  end
@@ -59,14 +42,14 @@ module Solargraph
59
42
  lines = []
60
43
  param_tags.each do |p|
61
44
  l = "* #{p.name}"
62
- l += " [#{p.types.join(', ')}]" unless p.types.nil? or p.types.empty?
45
+ l += " [#{p.types.map { |t| HTMLEntities.new.encode(t) }.join(', ')}]" unless p.types.nil? or p.types.empty?
63
46
  l += " #{p.text}"
64
47
  lines.push l
65
48
  end
66
49
  @documentation += lines.join("\n")
67
50
  end
68
51
  end
69
- @documentation
52
+ @documentation.to_s
70
53
  end
71
54
 
72
55
  def nearly? other
@@ -80,14 +63,6 @@ module Solargraph
80
63
  infer_from_return_nodes(api_map)
81
64
  end
82
65
 
83
- # @deprecated Use #typify and/or #probe instead
84
- def infer api_map
85
- Solargraph::Logging.logger.warn 'WARNING: Pin #infer methods are deprecated. Use #typify or #probe instead.'
86
- type = typify(api_map)
87
- return type unless type.undefined?
88
- probe api_map
89
- end
90
-
91
66
  def try_merge! pin
92
67
  return false unless super
93
68
  @node = pin.node
@@ -96,7 +71,7 @@ module Solargraph
96
71
 
97
72
  private
98
73
 
99
- # @return [Parser::AST:Node, nil]
74
+ # @return [Parser::AST::Node, nil]
100
75
  def method_body_node
101
76
  return nil if node.nil?
102
77
  return node.children[2] if node.type == :def
@@ -108,18 +83,29 @@ module Solargraph
108
83
  # @return [ComplexType]
109
84
  def infer_from_return_nodes api_map
110
85
  result = []
86
+ has_nil = false
111
87
  returns_from(method_body_node).each do |n|
112
- next if n.loc.nil?
113
- clip = api_map.clip_at(
114
- location.filename,
115
- [n.loc.expression.last_line, n.loc.expression.last_column]
116
- )
117
- chain = Solargraph::Source::NodeChainer.chain(n, location.filename)
118
- type = chain.infer(api_map, self, clip.locals)
119
- result.push type unless type.undefined?
88
+ if n.nil? || n.type == :nil
89
+ has_nil = true
90
+ next
91
+ end
92
+ literal = infer_literal_node_type(n)
93
+ if literal
94
+ result.push ComplexType.try_parse(literal)
95
+ else
96
+ next if n.loc.nil? || n.loc.expression.nil?
97
+ clip = api_map.clip_at(
98
+ location.filename,
99
+ [n.loc.expression.last_line, n.loc.expression.last_column]
100
+ )
101
+ chain = Solargraph::Source::NodeChainer.chain(n, location.filename)
102
+ type = chain.infer(api_map, self, clip.locals)
103
+ result.push type unless type.undefined?
104
+ end
120
105
  end
106
+ result.push ComplexType::NIL if has_nil
121
107
  return ComplexType::UNDEFINED if result.empty?
122
- ComplexType.try_parse(*result.map(&:tag))
108
+ ComplexType.try_parse(*result.map(&:tag).uniq)
123
109
  end
124
110
  end
125
111
  end
@@ -4,16 +4,15 @@ module Solargraph
4
4
  # examples that defer mapping are aliases for superclass methods or
5
5
  # methods from included modules.
6
6
  #
7
- class MethodAlias < Base
7
+ class MethodAlias < BaseMethod
8
+ # @return [::Symbol]
8
9
  attr_reader :scope
9
10
 
11
+ # @return [String]
10
12
  attr_reader :original
11
13
 
12
- def initialize location, namespace, name, scope, original
13
- # @todo Determine how to handle these parameters. Among other things,
14
- # determine if the visibility is defined by the location of the
15
- # alias call or the original method.
16
- super(location, namespace, name, '')
14
+ def initialize scope: :instance, original: nil, **splat
15
+ super(splat)
17
16
  @scope = scope
18
17
  @original = original
19
18
  end
@@ -22,6 +21,10 @@ module Solargraph
22
21
  Pin::METHOD_ALIAS
23
22
  end
24
23
 
24
+ def visibility
25
+ :public
26
+ end
27
+
25
28
  def path
26
29
  @path ||= namespace + (scope == :instance ? '#' : '.') + name
27
30
  end
@@ -1,24 +1,47 @@
1
1
  module Solargraph
2
2
  module Pin
3
- class Namespace < Pin::Base
4
- # @return [Symbol] :public or :private
3
+ class Namespace < Closure
4
+ # @return [::Symbol] :public or :private
5
5
  attr_reader :visibility
6
6
 
7
- # @return [Symbol] :class or :module
7
+ # @return [::Symbol] :class or :module
8
8
  attr_reader :type
9
9
 
10
- def initialize location, namespace, name, comments, type, visibility
11
- super(location, namespace, name, comments)
10
+ # def initialize location, namespace, name, comments, type, visibility
11
+ def initialize type: :class, visibility: :public, **splat
12
+ # super(location, namespace, name, comments)
13
+ super(splat)
12
14
  @type = type
13
15
  @visibility = visibility
16
+ if name.start_with?('::')
17
+ @name = name[2..-1]
18
+ @closure = Pin::ROOT_PIN
19
+ end
20
+ @gate = @name
21
+ if @gate.include?('::')
22
+ parts = @gate.split('::')
23
+ @name = parts.last
24
+ adjusted = (@closure ? @closure.path : Pin::ROOT_PIN.path).split('::') + parts[0..-2]
25
+ # @closure = Pin::Base.new(kind: NAMESPACE, name: adjusted.join('::'))
26
+ @closure = Pin::Namespace.new(name: adjusted.join('::'))
27
+ @context = nil
28
+ end
29
+ end
30
+
31
+ def namespace
32
+ context.namespace
14
33
  end
15
34
 
16
35
  def kind
17
36
  Pin::NAMESPACE
18
37
  end
19
38
 
20
- def context
21
- @context ||= ComplexType.try_parse("#{type.to_s.capitalize}<#{path}>")
39
+ def full_context
40
+ @full_context ||= ComplexType.try_parse("#{type.to_s.capitalize}<#{path}>")
41
+ end
42
+
43
+ def binder
44
+ full_context
22
45
  end
23
46
 
24
47
  def scope
@@ -38,8 +61,8 @@ module Solargraph
38
61
  @path ||= (namespace.empty? ? '' : "#{namespace}::") + name
39
62
  end
40
63
 
41
- def return_complex_type
42
- @return_complex_type ||= ComplexType.try_parse( (type == :class ? 'Class' : 'Module') + "<#{path}>" )
64
+ def return_type
65
+ @return_type ||= ComplexType.try_parse( (type == :class ? 'Class' : 'Module') + "<#{path}>" )
43
66
  end
44
67
 
45
68
  def domains
@@ -47,7 +70,7 @@ module Solargraph
47
70
  end
48
71
 
49
72
  def typify api_map
50
- return_complex_type
73
+ return_type
51
74
  end
52
75
  end
53
76
  end
@@ -0,0 +1,150 @@
1
+ module Solargraph
2
+ module Pin
3
+ class Parameter < LocalVariable
4
+ def return_type
5
+ if @return_type.nil?
6
+ @return_type = ComplexType.new
7
+ found = param_tag
8
+ @return_type = ComplexType.try_parse(*found.types) unless found.nil? or found.types.nil?
9
+ end
10
+ super
11
+ @return_type
12
+ end
13
+
14
+ # The parameter's zero-based location in the block's signature.
15
+ #
16
+ # @return [Integer]
17
+ def index
18
+ closure.parameter_names.index(name)
19
+ end
20
+
21
+ # @param api_map [ApiMap]
22
+ def typify api_map
23
+ return return_type.qualify(api_map, closure.context.namespace) unless return_type.undefined?
24
+ closure.is_a?(Pin::Block) ? typify_block_param(api_map) : typify_method_param(api_map)
25
+ end
26
+
27
+ def try_merge! pin
28
+ return false unless super && closure.nearly?(pin.closure)
29
+ @return_type = pin.return_type
30
+ reset_conversions
31
+ true
32
+ end
33
+
34
+ def documentation
35
+ tag = param_tag
36
+ return '' if tag.nil? || tag.text.nil?
37
+ tag.text
38
+ end
39
+
40
+ private
41
+
42
+ # @return [YARD::Tags::Tag]
43
+ def param_tag
44
+ found = nil
45
+ params = closure.docstring.tags(:param)
46
+ params.each do |p|
47
+ next unless p.name == name
48
+ found = p
49
+ break
50
+ end
51
+ if found.nil? and !index.nil?
52
+ found = params[index] if params[index] && (params[index].name.nil? || params[index].name.empty?)
53
+ end
54
+ found
55
+ end
56
+
57
+ # @param api_map [ApiMap]
58
+ # @return [ComplexType]
59
+ def typify_block_param api_map
60
+ if closure.is_a?(Pin::Block) && closure.receiver
61
+ chain = Source::NodeChainer.chain(closure.receiver, filename)
62
+ clip = api_map.clip_at(location.filename, location.range.start)
63
+ locals = clip.locals - [self]
64
+ meths = chain.define(api_map, closure, locals)
65
+ meths.each do |meth|
66
+ if (Solargraph::CoreFills::METHODS_WITH_YIELDPARAM_SUBTYPES.include?(meth.path))
67
+ bmeth = chain.base.define(api_map, closure, locals).first
68
+ return ComplexType::UNDEFINED if bmeth.nil? || bmeth.return_type.undefined? || bmeth.return_type.subtypes.empty?
69
+ return bmeth.return_type.subtypes.first.qualify(api_map, bmeth.context.namespace)
70
+ elsif (Solargraph::CoreFills::METHODS_WITH_YIELDPARAM_SELF.include?(meth.path))
71
+ bmeth = chain.base.define(api_map, closure, locals).first
72
+ return ComplexType::UNDEFINED if bmeth.nil?
73
+ return bmeth.typify(api_map)
74
+ else
75
+ yps = meth.docstring.tags(:yieldparam)
76
+ unless yps[index].nil? or yps[index].types.nil? or yps[index].types.empty?
77
+ return ComplexType.try_parse(yps[index].types.first).qualify(api_map, meth.context.namespace)
78
+ end
79
+ end
80
+ end
81
+ end
82
+ ComplexType::UNDEFINED
83
+ end
84
+
85
+ # @param api_map [ApiMap]
86
+ # @return [ComplexType]
87
+ def typify_method_param api_map
88
+ meths = api_map.get_method_stack(closure.full_context.namespace, closure.name, scope: closure.scope)
89
+ # meths.shift # Ignore the first one
90
+ meths.each do |meth|
91
+ found = nil
92
+ params = meth.docstring.tags(:param)
93
+ if params.empty?
94
+ params = see_reference(docstring, api_map)
95
+ end
96
+ params.each do |p|
97
+ next unless p.name == name
98
+ found = p
99
+ break
100
+ end
101
+ if found.nil? and !index.nil?
102
+ found = params[index] if params[index] && (params[index].name.nil? || params[index].name.empty?)
103
+ end
104
+ return ComplexType.try_parse(*found.types).qualify(api_map, meth.context.namespace) unless found.nil? || found.types.nil?
105
+ end
106
+ ComplexType::UNDEFINED
107
+ end
108
+
109
+ # @param heredoc [YARD::Docstring]
110
+ # @param api_map [ApiMap]
111
+ # @param skip [Array]
112
+ # @return [ComplexType]
113
+ def see_reference heredoc, api_map, skip = []
114
+ heredoc.ref_tags.each do |ref|
115
+ next unless ref.tag_name == 'param' && ref.owner
116
+ result = resolve_reference(ref.owner.to_s, api_map, skip)
117
+ return result unless result.nil?
118
+ end
119
+ []
120
+ end
121
+
122
+ # @param ref [String]
123
+ # @param api_map [ApiMap]
124
+ # @param skip [Array]
125
+ # @return [ComplexType]
126
+ def resolve_reference ref, api_map, skip
127
+ return nil if skip.include?(ref)
128
+ skip.push ref
129
+ parts = ref.split(/[\.#]/)
130
+ if parts.first.empty?
131
+ path = "#{namespace}#{ref}"
132
+ else
133
+ fqns = api_map.qualify(parts.first, namespace)
134
+ return ComplexType::UNDEFINED if fqns.nil?
135
+ path = fqns + ref[parts.first.length] + parts.last
136
+ end
137
+ pins = api_map.get_path_pins(path)
138
+ pins.each do |pin|
139
+ params = pin.docstring.tags(:param)
140
+ return params unless params.empty?
141
+ end
142
+ pins.each do |pin|
143
+ params = see_reference(pin.docstring, api_map, skip)
144
+ return params unless params.empty?
145
+ end
146
+ nil
147
+ end
148
+ end
149
+ end
150
+ end
@@ -1,13 +1,10 @@
1
1
  module Solargraph
2
2
  module Pin
3
3
  class ProxyType < Base
4
- # @param location [Solargraph::Location]
5
- # @param namespace [String]
6
- # @param name [String]
7
4
  # @param return_type [ComplexType]
8
- def initialize location, namespace, name, return_type
9
- super(location, namespace, name, '')
10
- @return_complex_type = return_type
5
+ def initialize return_type: ComplexType::UNDEFINED, **splat
6
+ super(splat)
7
+ @return_type = return_type
11
8
  end
12
9
 
13
10
  def path
@@ -19,7 +16,7 @@ module Solargraph
19
16
  end
20
17
 
21
18
  def context
22
- @return_complex_type
19
+ @return_type
23
20
  end
24
21
 
25
22
  # @param return_type [ComplexType]
@@ -28,7 +25,10 @@ module Solargraph
28
25
  parts = return_type.namespace.split('::')
29
26
  namespace = parts[0..-2].join('::').to_s
30
27
  name = parts.last.to_s
31
- ProxyType.new(nil, namespace, name, return_type)
28
+ # ProxyType.new(nil, namespace, name, return_type)
29
+ ProxyType.new(
30
+ closure: Solargraph::Pin::Namespace.new(name: namespace), return_type: return_type
31
+ )
32
32
  end
33
33
  end
34
34
  end
@@ -5,18 +5,7 @@ module Solargraph
5
5
  autoload :Superclass, 'solargraph/pin/reference/superclass'
6
6
  autoload :Include, 'solargraph/pin/reference/include'
7
7
  autoload :Extend, 'solargraph/pin/reference/extend'
8
-
9
- def initialize location, namespace, name
10
- super(location, namespace, name, '')
11
- end
12
-
13
- # @todo Should Reference.new be protected?
14
- # class << self
15
- # protected
16
- # def new *args
17
- # super
18
- # end
19
- # end
8
+ autoload :Override, 'solargraph/pin/reference/override'
20
9
  end
21
10
  end
22
11
  end
@@ -0,0 +1,18 @@
1
+ module Solargraph
2
+ module Pin
3
+ class Reference
4
+ class Override < Reference
5
+ attr_reader :tags
6
+
7
+ def initialize location, name, tags
8
+ super(location: location, name: name)
9
+ @tags = tags
10
+ end
11
+
12
+ def kind
13
+ Pin::OVERRIDE_REFERENCE
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end