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

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

Returns:

  • (Boolean)


8
9
10
# File 'lib/milk_tea/core/lexer/trivia.rb', line 8

def with_trivia?
  @mode == :with_trivia
end