module Solargraph::ApiMap::SourceToYard

Public Instance Methods

code_object_at(path) click to toggle source

Get the YARD CodeObject at the specified path.

@param path [String] @return [YARD::CodeObjects::Base]

# File lib/solargraph/api_map/source_to_yard.rb, line 11
def code_object_at path
  code_object_map[path]
end
code_object_paths() click to toggle source

@return [Array<String>]

# File lib/solargraph/api_map/source_to_yard.rb, line 16
def code_object_paths
  code_object_map.keys
end
rake_yard(store) click to toggle source

@param store [ApiMap::Store] ApiMap pin store @return [void]

# File lib/solargraph/api_map/source_to_yard.rb, line 22
def rake_yard store
  YARD::Registry.clear
  code_object_map.clear
  store.namespace_pins.each do |pin|
    next if pin.path.nil? || pin.path.empty?
    if pin.code_object
      code_object_map[pin.path] ||= pin.code_object
      next
    end
    if pin.type == :class
      code_object_map[pin.path] ||= YARD::CodeObjects::ClassObject.new(root_code_object, pin.path) { |obj|
        next if pin.location.nil? || pin.location.filename.nil?
        obj.add_file(pin.location.filename, pin.location.range.start.line, !pin.comments.empty?)
      }
    else
      code_object_map[pin.path] ||= YARD::CodeObjects::ModuleObject.new(root_code_object, pin.path) { |obj|
        next if pin.location.nil? || pin.location.filename.nil?
        obj.add_file(pin.location.filename, pin.location.range.start.line, !pin.comments.empty?)
      }
    end
    code_object_map[pin.path].docstring = pin.docstring
    store.get_includes(pin.path).each do |ref|
      code_object_map[pin.path].instance_mixins.push code_object_map[ref] unless code_object_map[ref].nil? or code_object_map[pin.path].nil?
    end
    store.get_extends(pin.path).each do |ref|
      code_object_map[pin.path].instance_mixins.push code_object_map[ref] unless code_object_map[ref].nil? or code_object_map[pin.path].nil?
      code_object_map[pin.path].class_mixins.push code_object_map[ref] unless code_object_map[ref].nil? or code_object_map[pin.path].nil?
    end
  end
  store.method_pins.each do |pin|
    if pin.code_object
      code_object_map[pin.path] ||= pin.code_object
      next
    end
    code_object_map[pin.path] ||= YARD::CodeObjects::MethodObject.new(code_object_at(pin.namespace), pin.name, pin.scope) { |obj|
      next if pin.location.nil? || pin.location.filename.nil?
      obj.add_file pin.location.filename, pin.location.range.start.line
    }
    code_object_map[pin.path].docstring = pin.docstring
    code_object_map[pin.path].visibility = pin.visibility || :public
    code_object_map[pin.path].parameters = pin.parameters.map do |p|
      [p.name, p.asgn_code]
    end
  end
end

Private Instance Methods

code_object_map() click to toggle source

@return [Hash{String => YARD::CodeObjects::Base}]

# File lib/solargraph/api_map/source_to_yard.rb, line 71
def code_object_map
  @code_object_map ||= {}
end
root_code_object() click to toggle source

@return [YARD::CodeObjects::RootObject]

# File lib/solargraph/api_map/source_to_yard.rb, line 76
def root_code_object
  @root_code_object ||= YARD::CodeObjects::RootObject.new(nil, 'root')
end