module Solargraph::Parser::ParserGem::NodeMethods

def find_recipient_node cursor

Returns:
  • (Parser::AST::Node, nil) -

Parameters:
  • cursor (Solargraph::Source::Cursor) --
def find_recipient_node cursor
  return repaired_find_recipient_node(cursor) if cursor.source.repaired? && cursor.source.code[cursor.offset - 1] == '('
  source = cursor.source
  position = cursor.position
  offset = cursor.offset
  tree = if source.synchronized?
    match = source.code[0..offset-1].match(/,\s*\z/)
    if match
      source.tree_at(position.line, position.column - match[0].length)
    else
      source.tree_at(position.line, position.column)
    end
  else
    source.tree_at(position.line, position.column - 1)
  end
  prev = nil
  tree.each do |node|
    if node.type == :send
      args = node.children[2..-1]
      if !args.empty?
        return node if prev && args.include?(prev)
      else
        if source.synchronized?
          return node if source.code[0..offset-1] =~ /\(\s*\z/ && source.code[offset..-1] =~ /^\s*\)/
        else
          return node if source.code[0..offset-1] =~ /\([^\(]*\z/
        end
      end
    end
    prev = node
  end
  nil
end