Class: YARD::Handlers::Ruby::Legacy::ClassConditionHandler
- Defined in:
- lib/yard/handlers/ruby/legacy/class_condition_handler.rb
Overview
Matches if/unless conditions inside classes and attempts to process only one branch (by evaluating the condition if possible).
Constant Summary
Constants included from Parser::Ruby::Legacy::RubyToken
Parser::Ruby::Legacy::RubyToken::EXPR_ARG, Parser::Ruby::Legacy::RubyToken::EXPR_BEG, Parser::Ruby::Legacy::RubyToken::EXPR_CLASS, Parser::Ruby::Legacy::RubyToken::EXPR_DOT, Parser::Ruby::Legacy::RubyToken::EXPR_END, Parser::Ruby::Legacy::RubyToken::EXPR_FNAME, Parser::Ruby::Legacy::RubyToken::EXPR_MID, Parser::Ruby::Legacy::RubyToken::NEWLINE_TOKEN, Parser::Ruby::Legacy::RubyToken::TkReading2Token, Parser::Ruby::Legacy::RubyToken::TkSymbol2Token
Constants included from CodeObjects
CodeObjects::BUILTIN_ALL, CodeObjects::BUILTIN_CLASSES, CodeObjects::BUILTIN_EXCEPTIONS, CodeObjects::BUILTIN_EXCEPTIONS_HASH, CodeObjects::BUILTIN_MODULES, CodeObjects::CONSTANTMATCH, CodeObjects::CONSTANTSTART, CodeObjects::CSEP, CodeObjects::CSEPQ, CodeObjects::ISEP, CodeObjects::ISEPQ, CodeObjects::METHODMATCH, CodeObjects::METHODNAMEMATCH, CodeObjects::NAMESPACEMATCH, CodeObjects::NSEP, CodeObjects::NSEPQ
Instance Method Summary collapse
- 
  
    
      #parse_condition  ⇒ true, ... 
    
    
  
  
  
  
  protected
  
  
  
  
    Parses the condition part of the if/unless statement. 
- #parse_else_block ⇒ Object protected
- #parse_then_block ⇒ Object protected
- 
  
    
      #process  ⇒ void 
    
    
  
  
  
  
  
  
  
  
  
    Main processing callback. 
Methods included from CodeObjects::NamespaceMapper
#clear_separators, #default_separator, on_invalidate, #register_separator, #separators, #separators_for_type, #separators_match, #types_for_separator, #unregister_separator_by_type
Constructor Details
This class inherits a constructor from YARD::Handlers::Base
Instance Method Details
#parse_condition ⇒ true, ... (protected)
Parses the condition part of the if/unless statement
| 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | # File 'lib/yard/handlers/ruby/legacy/class_condition_handler.rb', line 29 def parse_condition condition = nil # Right now we can handle very simple unary conditions like: # if true # if false # if 0 # if 100 (not 0) # if defined? SOME_CONSTANT # # The last case will do a lookup in the registry and then one # in the Ruby world (using eval). case statement.tokens[1..-1].to_s.strip when /^(\d+)$/ condition = $1 != "0" when /^defined\?\s*\(?\s*([A-Za-z0-9:_]+?)\s*\)?$/ # defined? keyword used, let's see if we can look up the name # in the registry, then we'll try using Ruby's powers. eval() is not # *too* dangerous here since code is not actually executed. name = $1 obj = YARD::Registry.resolve(namespace, name, true) begin condition = true if obj || Object.instance_eval("defined? #{name}") rescue SyntaxError, NameError condition = false end when "true" condition = true when "false" condition = false end if TkUNLESS === statement.tokens.first condition = !condition unless condition.nil? end condition end | 
#parse_else_block ⇒ Object (protected)
| 73 74 75 76 77 78 79 80 81 82 | # File 'lib/yard/handlers/ruby/legacy/class_condition_handler.rb', line 73 def parse_else_block return unless statement.block stmtlist = YARD::Parser::Ruby::Legacy::StatementList stmtlist.new(statement.block).each do |stmt| next unless TkELSE === stmt.tokens.first push_state(:visibility => visibility) do parser.process(stmtlist.new(stmt.block)) end end end | 
#parse_then_block ⇒ Object (protected)
| 68 69 70 | # File 'lib/yard/handlers/ruby/legacy/class_condition_handler.rb', line 68 def parse_then_block parse_block(:visibility => visibility) end | 
#process ⇒ void
This method returns an undefined value.
Main processing callback
| 8 9 10 11 12 13 14 15 16 17 18 19 | # File 'lib/yard/handlers/ruby/legacy/class_condition_handler.rb', line 8 process do condition = parse_condition if condition.nil? # Parse both blocks if we're unsure of the condition parse_then_block parse_else_block elsif condition parse_then_block else parse_else_block end end |