Module: L43Peg::Parsers::ListParser

Extended by:
ListParser
Included in:
ListParser
Defined in:
lib/l43_peg/parsers/list_parser.rb

Instance Method Summary collapse

Instance Method Details

#list_parser(element_parser:, name: nil, head_parser: nil, open_parser: nil, close_parser: nil, sep_parser: nil) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/l43_peg/parsers/list_parser.rb', line 7

def list_parser(
  element_parser:,
  name: nil, head_parser: nil, open_parser: nil, close_parser: nil, sep_parser: nil
)
  name = name || "list_parser(#{element_parser.name})"
  open_parser ||= char_parser(40).ignore # avoid literal open_paren for nvim indent for now
  close_parser ||= char_parser(41).ignore # idem
  sep_parser ||= ws_parser(min: 1).ignore
  head_parser ||= element_parser

  sequence(
    open_parser,
    head_parser,
    many(
      sequence(
        sep_parser,
        element_parser
      ).map(&:first)
    ),
    close_parser
  )
    .map { |h, t| [h, *t] }
end