class Yadriggy::Parameters

@abstract

Attributes

block_param[R]

@return [ASTnode|nil] the parameter preceded by an ampersand (`&`).

keywords[R]

@return [Array<Array<ASTnode>>] the keyword parameters.

Each element is `[keyword, value]`.
optionals[R]

@return [Array<Array<ASTnode>>] the list of parameters with default values.

Each element is `[name, value]`.
params[R]

@return [Array<ASTnode>] the parameter list.

params_after_rest[R]

@return [Array<ASTnode>] the parameters following the parameter

with asterisk (`*`).
rest_of_keywords[R]

@return [ASTnode|nil] the parameters preceded by two asterisks (`**`).

rest_of_params[R]

@return [ASTnode|nil] the parameter preceded by an asterisk (`*`).

Public Class Methods

new(params) click to toggle source

@param [Array] params `[:params, … ]`.

# File lib/yadriggy/ast.rb, line 1293
def initialize(params)
  initialize_params(params)
end

Public Instance Methods

initialize_params(params) click to toggle source
# File lib/yadriggy/ast.rb, line 1297
def initialize_params(params)
  if params.nil?
    @params = []
    @optionals = []
    @rest_of_params = nil
    @params_after_rest = []
    @keywords = []
    @rest_of_keywords = nil
    @block_param = nil
  else
    if params[1].nil?
      @params = []
    else
      @params = to_nodes(params[1])
      add_children(@params)
    end

    if params[2].nil?
      @optionals = []
    else
      # [[name, value], ...]
      @optionals = params[2].map {|p| to_nodes(p) }
      @optionals.map {|p| add_children(p) }
    end

    if params[3].nil?
      @rest_of_params = nil
    else
      @rest_of_params = to_node(has_tag?(params[3], :rest_param)[1])
      add_child(@rest_of_params)
    end

    if params[4].nil?
      @params_after_rest = []
    else
      @params_after_rest = to_nodes(params[4])
      add_children(@params_after_rest)
    end

    if params[5].nil?
      @keywords = []
    else
      # [[keyword, value], ...]      value may be nil
      @keywords = params[5].map do |p|
        default_value = if p[1] then to_node(p[1]) else nil end
        [ to_node(p[0]), default_value ]
      end
      @keywords.map {|p| add_children(p) }
    end

    if params[6].nil?
      @rest_of_keywords = nil
    else
      rkeys = if params[6][0] == :@ident
                params[6]  # Ruby 2.4 or earlier
              else
                has_tag?(params[6], :kwrest_param)[1]
              end
      @rest_of_keywords = to_node(has_tag?(rkeys, :@ident))
    end

    if params[7].nil?
      @block_param = nil
    else
      @block_param = to_node(has_tag?(params[7], :blockarg)[1])
      add_child(@block_param)
    end
  end
end