class Solargraph::YardMap::Mapper
Public Class Methods
new(code_objects, spec = nil)
click to toggle source
@param code_objects [Array<YARD::CodeObjects::Base>] @param spec [Gem::Specification]
# File lib/solargraph/yard_map/mapper.rb, line 11 def initialize code_objects, spec = nil @code_objects = code_objects @spec = spec @pins = [] @namespace_pins = {} end
Public Instance Methods
map()
click to toggle source
@return [Array<Pin::Base>]
# File lib/solargraph/yard_map/mapper.rb, line 19 def map @code_objects.each do |co| @pins.concat generate_pins co end # Some yardocs contain documentation for dependencies that can be # ignored here. The YardMap will load dependencies separately. @pins.keep_if { |pin| pin.location.nil? || File.file?(pin.location.filename) } if @spec @pins end
Private Instance Methods
generate_pins(code_object)
click to toggle source
@param code_object [YARD::CodeObjects::Base] @return [Array<Pin::Base>]
# File lib/solargraph/yard_map/mapper.rb, line 33 def generate_pins code_object result = [] if code_object.is_a?(YARD::CodeObjects::NamespaceObject) nspin = ToNamespace.make(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? # This method of superclass detection is a bit of a hack. If # the superclass is a Proxy, it is assumed to be undefined in its # yardoc and converted to a fully qualified namespace. superclass = if code_object.superclass.is_a?(YARD::CodeObjects::Proxy) "::#{code_object.superclass}" else 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, # @todo Fix this 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 # @todo Check the visibility of <Class>.new result.push ToMethod.make(code_object, 'new', :class, :public, closure, @spec) result.push ToMethod.make(code_object, 'initialize', :instance, :private, closure, @spec) else result.push ToMethod.make(code_object, nil, nil, nil, closure, @spec) end elsif code_object.is_a?(YARD::CodeObjects::ConstantObject) closure = @namespace_pins[code_object.namespace] result.push ToConstant.make(code_object, closure, @spec) end result end