class Solargraph::Parser::ParserGem::NodeProcessors::SendNode

def process_module_function

Returns:
  • (void) -
def process_module_function
  if node.children[2].nil?
    # @todo Smelly instance variable access

    region.instance_variable_set(:@visibility, :module_function)
  elsif node.children[2].type == :sym || node.children[2].type == :str
    node.children[2..-1].each do |x|
      cn = x.children[0].to_s
      ref = pins.select{ |p| p.is_a?(Pin::Method) && p.namespace == region.closure.full_context.namespace && p.name == cn }.first
      unless ref.nil?
        pins.delete ref
        mm = Solargraph::Pin::Method.new(
          location: ref.location,
          closure: ref.closure,
          name: ref.name,
          parameters: ref.parameters,
          comments: ref.comments,
          scope: :class,
          visibility: :public,
          node: ref.node
        )
        cm = Solargraph::Pin::Method.new(
          location: ref.location,
          closure: ref.closure,
          name: ref.name,
          parameters: ref.parameters,
          comments: ref.comments,
          scope: :instance,
          visibility: :private,
          node: ref.node)
        pins.push mm, cm
        pins.select{|pin| pin.is_a?(Pin::InstanceVariable) && pin.closure.path == ref.path}.each do |ivar|
          pins.delete ivar
          pins.push Solargraph::Pin::InstanceVariable.new(
            location: ivar.location,
            closure: cm,
            name: ivar.name,
            comments: ivar.comments,
            assignment: ivar.assignment
          )
          pins.push Solargraph::Pin::InstanceVariable.new(
            location: ivar.location,
            closure: mm,
            name: ivar.name,
            comments: ivar.comments,
            assignment: ivar.assignment
          )
        end
      end
    end
  elsif node.children[2].type == :def
    NodeProcessor.process node.children[2], region.update(visibility: :module_function), pins, locals
  end
end