Module: MilkTea::Lexer::Trivia
- Included in:
- MilkTea::Lexer
- Defined in:
- lib/milk_tea/core/lexer/trivia.rb
Overview
Trivia collection (comments, blank lines, whitespace) used only when lexing in :with_trivia mode for the concrete syntax tree / formatter.
Instance Method Summary collapse
- #append_trailing_or_pending(trivia) ⇒ Object
- #push_pending_leading_trivia(trivia) ⇒ Object
- #register_detached_line_trivia(kind, line, line_number, line_offset, has_newline:) ⇒ Object
- #with_trivia? ⇒ Boolean
Instance Method Details
#append_trailing_or_pending(trivia) ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/milk_tea/core/lexer/trivia.rb', line 34 def append_trailing_or_pending(trivia) return unless with_trivia? @trivia << trivia if @tokens.empty? @pending_leading_trivia << trivia else trailing = @pending_leading_trivia @pending_leading_trivia = [] token = @tokens[-1] trailing.each { |entry| token = token.with_appended_trailing_trivia(entry) } token = token.with_appended_trailing_trivia(trivia) @tokens[-1] = token end end |
#push_pending_leading_trivia(trivia) ⇒ Object
27 28 29 30 31 32 |
# File 'lib/milk_tea/core/lexer/trivia.rb', line 27 def push_pending_leading_trivia(trivia) return unless with_trivia? @trivia << trivia @pending_leading_trivia << trivia end |
#register_detached_line_trivia(kind, line, line_number, line_offset, has_newline:) ⇒ Object
12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/milk_tea/core/lexer/trivia.rb', line 12 def register_detached_line_trivia(kind, line, line_number, line_offset, has_newline:) return unless with_trivia? text = has_newline ? (line + "\n") : line trivia = TriviaToken.new( kind:, text:, line: line_number, column: 1, start_offset: line_offset, end_offset: line_offset + text.bytesize, ) push_pending_leading_trivia(trivia) end |
#with_trivia? ⇒ Boolean
8 9 10 |
# File 'lib/milk_tea/core/lexer/trivia.rb', line 8 def with_trivia? @mode == :with_trivia end |