Class: Solargraph::Pin::Base
Overview
The base class for map pins.
Instance Attribute Summary collapse
Attributes included from Common
#closure
Instance Method Summary
collapse
#documentation
#completion_item, #detail, #link_documentation, #reset_conversions, #resolve_completion_item, #signature_help, #text_documentation
Methods included from Common
#binder, #context, #namespace
Constructor Details
#initialize(location: nil, closure: nil, name: '', comments: '') ⇒ Base
Returns a new instance of Base.
29
30
31
32
33
34
|
# File 'lib/solargraph/pin/base.rb', line 29
def initialize location: nil, closure: nil, name: '', comments: ''
@location = location
@closure = closure
@name = name
@comments =
end
|
Instance Attribute Details
#code_object ⇒ YARD::CodeObjects::Base
13
14
15
|
# File 'lib/solargraph/pin/base.rb', line 13
def code_object
@code_object
end
|
16
17
18
|
# File 'lib/solargraph/pin/base.rb', line 16
def location
@location
end
|
#name ⇒ String
19
20
21
|
# File 'lib/solargraph/pin/base.rb', line 19
def name
@name
end
|
#path ⇒ String
22
23
24
|
# File 'lib/solargraph/pin/base.rb', line 22
def path
@path
end
|
93
94
95
|
# File 'lib/solargraph/pin/base.rb', line 93
def return_type
@return_type ||= ComplexType::UNDEFINED
end
|
Instance Method Details
#==(other) ⇒ Object
Pin equality is determined using the #nearly? method and also requiring both pins to have the same location.
69
70
71
72
|
# File 'lib/solargraph/pin/base.rb', line 69
def == other
return false unless nearly? other
== other. and location == other.location
end
|
37
38
39
|
# File 'lib/solargraph/pin/base.rb', line 37
def
@comments ||= ''
end
|
#completion_item_kind ⇒ Integer
#deprecated? ⇒ Boolean
128
129
130
|
# File 'lib/solargraph/pin/base.rb', line 128
def deprecated?
@deprecated ||= docstring.has_tag?('deprecated')
end
|
#directives ⇒ Array<YARD::Tags::Directive>
104
105
106
107
|
# File 'lib/solargraph/pin/base.rb', line 104
def directives
unless defined?(@directives)
@directives
end
|
#docstring ⇒ YARD::Docstring
98
99
100
101
|
# File 'lib/solargraph/pin/base.rb', line 98
def docstring
unless defined?(@docstring)
@docstring ||= Solargraph::Source.parse_docstring('').to_docstring
end
|
#filename ⇒ String?
42
43
44
45
|
# File 'lib/solargraph/pin/base.rb', line 42
def filename
return nil if location.nil?
location.filename
end
|
#identity ⇒ Object
216
217
218
|
# File 'lib/solargraph/pin/base.rb', line 216
def identity
@identity ||= "#{closure.context.namespace}|#{name}"
end
|
Deprecated.
Use #typify and/or #probe instead
155
156
157
158
159
160
|
# File 'lib/solargraph/pin/base.rb', line 155
def infer api_map
Solargraph::Logging.logger.warn "WARNING: Pin #infer methods are deprecated. Use #typify or #probe instead."
type = typify(api_map)
return type unless type.undefined?
probe api_map
end
|
#inspect ⇒ Object
220
221
222
|
# File 'lib/solargraph/pin/base.rb', line 220
def inspect
"#<#{self.class} at #{self.location.inspect}>"
end
|
#macros ⇒ Array<YARD::Tags::MacroDirective>
110
111
112
|
# File 'lib/solargraph/pin/base.rb', line 110
def macros
@macros ||= collect_macros
end
|
#maybe_directives? ⇒ Boolean
Perform a quick check to see if this pin possibly includes YARD directives. This method does not require parsing the comments.
After the comments have been parsed, this method will return false if no directives were found, regardless of whether it previously appeared possible.
122
123
124
125
|
# File 'lib/solargraph/pin/base.rb', line 122
def maybe_directives?
return !@directives.empty? if defined?(@directives)
@maybe_directives ||= .include?('@!')
end
|
#nearly?(other) ⇒ Boolean
True if the specified pin is a near match to this one. A near match indicates that the pins contain mostly the same data. Any differences between them should not have an impact on the API surface.
80
81
82
83
84
85
86
87
88
|
# File 'lib/solargraph/pin/base.rb', line 80
def nearly? other
self.class == other.class &&
name == other.name &&
(closure == other.closure || (closure && closure.nearly?(other.closure))) &&
( == other. ||
(((maybe_directives? == false && other.maybe_directives? == false) || compare_directives(directives, other.directives)) &&
compare_docstring_tags(docstring, other.docstring))
)
end
|
Infer the pin’s return type via static code analysis.
148
149
150
|
# File 'lib/solargraph/pin/base.rb', line 148
def probe api_map
typify api_map
end
|
#probed? ⇒ Boolean
186
187
188
|
# File 'lib/solargraph/pin/base.rb', line 186
def probed?
@probed ||= false
end
|
#proxied? ⇒ Boolean
182
183
184
|
# File 'lib/solargraph/pin/base.rb', line 182
def proxied?
@proxied ||= false
end
|
#proxy(return_type) ⇒ self
Return a proxy for this pin with the specified return type. Other than the return type and the #proxied? setting, the proxy should be a clone of the original.
209
210
211
212
213
214
|
# File 'lib/solargraph/pin/base.rb', line 209
def proxy return_type
result = dup
result.return_type = return_type
result.proxied = true
result
end
|
#realize(api_map) ⇒ self
192
193
194
195
196
197
198
199
200
201
|
# File 'lib/solargraph/pin/base.rb', line 192
def realize api_map
return self if return_type.defined?
type = typify(api_map)
return proxy(type) if type.defined?
type = probe(api_map)
return self if type.undefined?
result = proxy(type)
result.probed = true
result
end
|
#symbol_kind ⇒ Integer?
53
54
55
|
# File 'lib/solargraph/pin/base.rb', line 53
def symbol_kind
nil
end
|
#to_s ⇒ Object
57
58
59
|
# File 'lib/solargraph/pin/base.rb', line 57
def to_s
name.to_s
end
|
#try_merge!(pin) ⇒ Boolean
Try to merge data from another pin. Merges are only possible if the pins are near matches (see the #nearly? method). The changes should not have any side effects on the API surface.
168
169
170
171
172
173
174
175
176
177
178
179
180
|
# File 'lib/solargraph/pin/base.rb', line 168
def try_merge! pin
return false unless nearly?(pin)
@location = pin.location
@closure = pin.closure
return true if == pin.
@comments = pin.
@docstring = pin.docstring
@return_type = pin.return_type
@documentation = nil
@deprecated = nil
reset_conversions
true
end
|
Get a fully qualified type from the pin’s return type.
The relative type is determined from YARD documentation (@return, @param, @type, etc.) and its namespaces are fully qualified using the provided ApiMap.
140
141
142
|
# File 'lib/solargraph/pin/base.rb', line 140
def typify api_map
return_type.qualify(api_map, namespace)
end
|
#variable? ⇒ Boolean
62
63
64
|
# File 'lib/solargraph/pin/base.rb', line 62
def variable?
false
end
|