28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
# File 'lib/solargraph/yard_map/mapper.rb', line 28
def generate_pins code_object
result = []
if code_object.is_a?(YARD::CodeObjects::NamespaceObject)
nspin = Solargraph::Pin::YardPin::Namespace.new(code_object, @spec, @namespace_pins[code_object.namespace.to_s])
@namespace_pins[code_object.path] = nspin
result.push nspin
if code_object.is_a?(YARD::CodeObjects::ClassObject) and !code_object.superclass.nil?
if code_object.superclass.is_a?(YARD::CodeObjects::Proxy)
superclass = "::#{code_object.superclass}"
else
superclass = code_object.superclass.to_s
end
result.push Solargraph::Pin::Reference::Superclass.new(name: superclass, closure: nspin)
end
code_object.class_mixins.each do |m|
result.push Solargraph::Pin::Reference::Extend.new(closure: nspin, name: m.path)
end
code_object.instance_mixins.each do |m|
result.push Solargraph::Pin::Reference::Include.new(
closure: nspin, name: m.path
)
end
elsif code_object.is_a?(YARD::CodeObjects::MethodObject)
closure = @namespace_pins[code_object.namespace.to_s]
if code_object.name == :initialize && code_object.scope == :instance
result.push Solargraph::Pin::YardPin::Method.new(code_object, 'new', :class, :public, closure, @spec)
result.push Solargraph::Pin::YardPin::Method.new(code_object, 'initialize', :instance, :private, closure, @spec)
else
result.push Solargraph::Pin::YardPin::Method.new(code_object, nil, nil, nil, closure, @spec)
end
elsif code_object.is_a?(YARD::CodeObjects::ConstantObject)
closure = @namespace_pins[code_object.namespace]
result.push Solargraph::Pin::YardPin::Constant.new(code_object, closure, @spec)
end
result
end
|