class YARD::Parser::Ruby::Legacy::StatementList

def process_statement_end(tk)

Parameters:
  • tk (RubyToken::Token) -- the token to process
def process_statement_end(tk)
  # Whitespace means that we keep the same value of @new_statement as last token
  return if tk.class == TkSPACE
  return unless
    # We might be coming after a statement-ending token...
    (@last_tk && [TkSEMICOLON, TkNL, TkEND_OF_SCRIPT].include?(tk.class)) ||
    # Or we might be at the beginning of an argument list
    (@current_block == TkDEF && tk.class == TkRPAREN)
  # Continue line ending on . or ::
  return if @last_tk && [EXPR_DOT].include?(@last_tk.lex_state)
  # Continue a possible existing new statement unless we just finished an expression...
  return unless (@last_tk && [EXPR_END, EXPR_ARG].include?(@last_tk.lex_state)) ||
                # Or we've opened a block and are ready to move into the body
                (@current_block && [TkNL, TkSEMICOLON].include?(tk.class) &&
                 # Handle the case where the block statement's expression is on the next line
                 #
                 # while
                 #     foo
                 # end
                 @last_ns_tk.class != @current_block &&
                 # And the case where part of the expression is on the next line
                 #
                 # while foo ||
                 #     bar
                 # end
                 @last_tk.lex_state != EXPR_BEG)
  # Continue with the statement if we've hit a comma in a def
  return if @current_block == TkDEF && peek_no_space.class == TkCOMMA
  if [TkEND_OF_SCRIPT, TkNL, TkSEMICOLON].include?(tk.class) && @state == :block_statement &&
     [TkRBRACE, TkEND].include?(@last_ns_tk.class) && @level == 0
    @current_block = nil
  end
  unless @current_block
    @done = true
    return
  end
  @state = :pre_block
  @level += 1
  @block_num += 1
  unless @block
    @block = TokenList.new
    @statement << TkStatementEnd.new(tk.line_no, tk.char_no)
  end
end