Class: Cyclomagic::ParseBlock

Inherits:
EndableParseState show all
Defined in:
lib/cyclomagic.rb

Instance Attribute Summary

Attributes inherited from ParseState

#children, #complexity, #lines, #name, #parent

Instance Method Summary collapse

Methods inherited from EndableParseState

#do_end_token

Methods inherited from ParseState

#calc_complexity, #calc_lines, #compute_state, #compute_state_for_global, #count_tokens?, #do_begin_token, #do_block_token, #do_case_token, #do_class_token, #do_comment_token, #do_conditional_do_control_token, #do_conditional_token, #do_constant_token, #do_def_token, #do_else_token, #do_end_token, #do_identifier_token, #do_module_token, #do_one_line_conditional_token, #do_symbol_token, #end_debug, get_token_counter, #lexer=, #lexer_loop?, #make_state, make_top_state, #parse, set_token_counter, #top_state?

Constructor Details

#initialize(lexer, parent = nil) ⇒ ParseBlock

Returns a new instance of ParseBlock.



524
525
526
527
528
# File 'lib/cyclomagic.rb', line 524

def initialize(lexer,parent=nil)
  super(lexer,parent)
  @complexity = 1
  @lbraces = Array.new
end

Instance Method Details

#do_right_brace_token(token) ⇒ Object



548
549
550
551
552
# File 'lib/cyclomagic.rb', line 548

def do_right_brace_token(token)
  # we are done ? what about a hash in a block :-/
  @run = false
  nil
end

#parse_token(token) ⇒ Object

Because the token for a block and hash right brace is the same, we need to track the hash left braces to determine when an end is encountered.



533
534
535
536
537
538
539
540
541
542
543
544
545
546
# File 'lib/cyclomagic.rb', line 533

def parse_token(token)
  if token.is_a?(TkLBRACE)
    @lbraces.push(true)
  elsif token.is_a?(TkRBRACE)
    if @lbraces.empty?
      do_right_brace_token(token)
      #do_end_token(token)
    else
      @lbraces.pop
    end
  else
    super(token)
  end
end