• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

type-ruby / t-ruby / 20560723383

28 Dec 2025 10:58PM UTC coverage: 79.074% (+1.7%) from 77.331%
20560723383

Pull #29

github

web-flow
Merge 5876e651d into fda099366
Pull Request #29: refactor: migrate parser from regex to token-based parser combinator

1848 of 2097 new or added lines in 53 files covered. (88.13%)

6 existing lines in 2 files now uncovered.

6643 of 8401 relevant lines covered (79.07%)

908.2 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

84.0
/lib/t_ruby/parser_combinator/token/token_parser.rb
1
# frozen_string_literal: true
2

3
module TRuby
1✔
4
  module ParserCombinator
1✔
5
    # Base class for token parsers
6
    class TokenParser
1✔
7
      def parse(tokens, position = 0)
1✔
NEW
8
        raise NotImplementedError
×
9
      end
10

11
      # Sequence: run this parser, then the other
12
      def >>(other)
1✔
13
        TokenSequence.new(self, other)
24✔
14
      end
15

16
      # Alternative: try this parser, if it fails try the other
17
      def |(other)
1✔
18
        TokenAlternative.new(self, other)
6✔
19
      end
20

21
      # Map: transform the result
22
      def map(&block)
1✔
23
        TokenMap.new(self, block)
1✔
24
      end
25

26
      # Many: zero or more repetitions
27
      def many
1✔
28
        TokenMany.new(self)
2✔
29
      end
30

31
      # Many1: one or more repetitions
32
      def many1
1✔
NEW
33
        TokenMany1.new(self)
×
34
      end
35

36
      # Optional: zero or one
37
      def optional
1✔
38
        TokenOptional.new(self)
4✔
39
      end
40

41
      # Separated by: parse items separated by delimiter
42
      def sep_by(delimiter)
1✔
43
        TokenSepBy.new(self, delimiter)
3✔
44
      end
45

46
      # Separated by 1: at least one item
47
      def sep_by1(delimiter)
1✔
NEW
48
        TokenSepBy1.new(self, delimiter)
×
49
      end
50

51
      # Skip right: parse both, keep left result
52
      def <<(other)
1✔
53
        TokenSkipRight.new(self, other)
1✔
54
      end
55

56
      # Label: add a descriptive label for error messages
57
      def label(name)
1✔
NEW
58
        TokenLabel.new(self, name)
×
59
      end
60
    end
61
  end
62
end
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc