class Solargraph::Parser::Rubyvm::NodeProcessors::KwArgNode

Public Instance Methods

process() click to toggle source
# File lib/solargraph/parser/rubyvm/node_processors/kw_arg_node.rb, line 7
def process
  locals.push Solargraph::Pin::Parameter.new(
    location: region.closure.location,
    closure: region.closure,
    comments: comments_for(node),
    name: node.children[0].children[0].to_s,
    assignment: require_keyword?(node) ? nil : node.children[0].children[1],
    asgn_code: require_keyword?(node) ? nil : region.code_for(node.children[0].children[1]),
    presence: region.closure.location.range,
    decl: require_keyword?(node) ? :kwarg : :kwoptarg
  )
  idx = region.closure.parameters.find_index { |par| [:kwrestarg, :blockarg].include?(par.decl) }
  if idx
    region.closure.parameters.insert idx, locals.last
  else
    region.closure.parameters.push locals.last
  end
  node.children[1] && NodeProcessor.process(node.children[1], region, pins, locals)
end

Private Instance Methods

require_keyword?(node) click to toggle source
# File lib/solargraph/parser/rubyvm/node_processors/kw_arg_node.rb, line 29
def require_keyword? node
  # Ruby 2.7 changed required keywords to use a magic symbol instead
  # of nil in the assignment node
  node.children[0].children[1].nil? || node.children[0].children[1] == :NODE_SPECIAL_REQUIRED_KEYWORD
end