class Solargraph::Arc::Autoload

Public Class Methods

instance() click to toggle source
# File lib/solargraph/arc/autoload.rb, line 4
def self.instance
  @instance ||= self.new
end

Public Instance Methods

namespace_stubs(root_ns, ns) click to toggle source
# File lib/solargraph/arc/autoload.rb, line 16
def namespace_stubs(root_ns, ns)
  parts = ns.path.split("::")

  candidates = parts.each_with_index.reduce([]) do |acc, (_, i)|
    acc + [parts[0..i].join("::")]
  end.reject {|el| el == ns.path }

  previous_ns = root_ns
  pins = []

  parts[0..-2].each_with_index do |name, i|
    gates = candidates[0..i].reverse + [""]
    path = gates.first
    next if path == ns.path

    previous_ns = Solargraph::Pin::Namespace.new(
      type:       :class,
      location:   ns.location,
      closure:    previous_ns,
      name:       name,
      comments:   ns.comments,
      visibility: :public,
      gates:      gates[1..-1]
    )

    pins << previous_ns
  end

  pins
end
process(source_map, ns, ds) click to toggle source
# File lib/solargraph/arc/autoload.rb, line 8
def process(source_map, ns, ds)
  return [] unless ds.size == 1 && ns.path.include?("::")
  Solargraph.logger.debug("[Arc][Autoload] seeding class tree for #{ns.path}")

  root_ns = source_map.pins.find {|p| p.path == "" }
  namespace_stubs(root_ns, ns)
end