Class: JsDuck::TypeParser
- Inherits:
 - 
      Object
      
        
- Object
 - JsDuck::TypeParser
 
 
- Defined in:
 - lib/jsduck/type_parser.rb
 
Overview
Validates the syntax of type definitions.
The parser supports a combination of two syntaxes:
- 
Traditional type expressions found in ExtJS code:
"string" 3.14 SomeType Name.spaced.Type Number[] String/RegExp Type... - 
Google Closure Compiler Type Expressions:
boolean Window goog.ui.Menu Array.<string> Object.<string, number> {myNum: number, myObject} (number|boolean) ?number !Object ...number * function(string, boolean): number function(new:goog.ui.Menu, string) function(this:goog.ui.Menu, string) function(?string=, number=) function(string, ...[number]) 
Instance Attribute Summary collapse
- 
  
    
      #error  ⇒ Object 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    
Allows to check the type of error that was encountered.
 - 
  
    
      #out  ⇒ Object 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    
When parsing was successful, then contains the output HTML - the input type-definition with types themselves replaced with links.
 
Instance Method Summary collapse
- 
  
    
      #initialize(formatter)  ⇒ TypeParser 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    
Initializes the parser with a Format::Doc instance.
 - 
  
    
      #parse(str)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
Parses the type definition.
 
Constructor Details
#initialize(formatter) ⇒ TypeParser
Initializes the parser with a Format::Doc instance.
      54 55 56 57 58 59 60 61 62 63 64 65  | 
    
      # File 'lib/jsduck/type_parser.rb', line 54 def initialize(formatter) @relations = formatter.relations @formatter = formatter @primitives = { "boolean" => "Boolean", "number" => "Number", "string" => "String", "null" => "null", "undefined" => "undefined", "void" => "void", } end  | 
  
Instance Attribute Details
#error ⇒ Object (readonly)
Allows to check the type of error that was encountered. It will be either of the two:
- 
:syntax - type definition syntax is incorrect
 - 
:name - one of the names of the types is unknown
 
      47 48 49  | 
    
      # File 'lib/jsduck/type_parser.rb', line 47 def error @error end  | 
  
#out ⇒ Object (readonly)
When parsing was successful, then contains the output HTML - the input type-definition with types themselves replaced with links.
      51 52 53  | 
    
      # File 'lib/jsduck/type_parser.rb', line 51 def out @out end  | 
  
Instance Method Details
#parse(str) ⇒ Object
Parses the type definition
<type> ::= <alteration-type>
  
      71 72 73 74 75 76 77 78 79 80 81 82 83 84  | 
    
      # File 'lib/jsduck/type_parser.rb', line 71 def parse(str) @input = StringScanner.new(str) @error = :syntax @out = [] # Return immediately if the base type doesn't match return false unless alteration_type # Concatenate all output @out = @out.join # Success if we have reached the end of input return @input.eos? end  |