Class: RBS::Inline::AnnotationParser

Inherits:
Object
  • Object
show all
Includes:
Tokens
Defined in:
lib/rbs/inline/annotation_parser.rb,
lib/rbs/inline/annotation_parser/tokenizer.rb

Defined Under Namespace

Modules: Tokens Classes: ParsingResult, Tokenizer

Constant Summary

Constants included from Tokens

Tokens::K_AMP, Tokens::K_ARROW, Tokens::K_AS, Tokens::K_CLASS, Tokens::K_COLON, Tokens::K_COLON2, Tokens::K_COMMA, Tokens::K_DOT, Tokens::K_DOT3, Tokens::K_EOF, Tokens::K_GENERIC, Tokens::K_IN, Tokens::K_INHERITS, Tokens::K_LBRACE, Tokens::K_LBRACKET, Tokens::K_LPAREN, Tokens::K_LT, Tokens::K_MINUS2, Tokens::K_MODULE, Tokens::K_MODULE_SELF, Tokens::K_OUT, Tokens::K_OVERRIDE, Tokens::K_QUESTION, Tokens::K_RBRACKET, Tokens::K_RBS, Tokens::K_RBSE, Tokens::K_RETURN, Tokens::K_SELF, Tokens::K_SKIP, Tokens::K_STAR, Tokens::K_STAR2, Tokens::K_UNCHECKED, Tokens::K_USE, Tokens::K_VBAR, Tokens::K_YIELDS, Tokens::T_ANNOTATION, Tokens::T_ATIDENT, Tokens::T_BLOCKSTR, Tokens::T_COMMENT, Tokens::T_ELVAR, Tokens::T_IFIDENT, Tokens::T_LVAR, Tokens::T_SOURCE, Tokens::T_UIDENT, Tokens::T_WHITESPACE

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(input) ⇒ AnnotationParser

Returns a new instance of AnnotationParser.



108
109
110
# File 'lib/rbs/inline/annotation_parser.rb', line 108

def initialize(input) #: void
  @input = input
end

Instance Attribute Details

#inputObject (readonly)

: Array



105
106
107
# File 'lib/rbs/inline/annotation_parser.rb', line 105

def input
  @input
end

Class Method Details

.parse(input) ⇒ Object



114
115
116
# File 'lib/rbs/inline/annotation_parser.rb', line 114

def self.parse(input)
  new(input).parse
end

Instance Method Details

#parseObject



119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
# File 'lib/rbs/inline/annotation_parser.rb', line 119

def parse
  results = [] #: Array[ParsingResult]

  first_comment, *rest = input
  first_comment or return results

  result = ParsingResult.new(first_comment)
  results << result

  rest.each do |comment|
    unless result.add_comment(comment)
      result = ParsingResult.new(comment)
      results << result
    end
  end

  results.each do |result|
    each_annotation_paragraph(result) do |comments, annotation|
      lines = AST::CommentLines.new(comments)

      if annotation && annot = parse_annotation(lines)
        result.annotations << annot
      else
        result.annotations << lines
      end
    end
  end

  results
end