ibex-runtime 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +21 -0
  3. data/README.md +337 -0
  4. data/lib/ibex/runtime/ast_data.rb +23 -0
  5. data/lib/ibex/runtime/cst/annotation.rb +16 -0
  6. data/lib/ibex/runtime/cst/cursor.rb +68 -0
  7. data/lib/ibex/runtime/cst/diff.rb +80 -0
  8. data/lib/ibex/runtime/cst/editing.rb +56 -0
  9. data/lib/ibex/runtime/cst/editor.rb +94 -0
  10. data/lib/ibex/runtime/cst/green/builder.rb +211 -0
  11. data/lib/ibex/runtime/cst/green/cache.rb +150 -0
  12. data/lib/ibex/runtime/cst/green/node.rb +78 -0
  13. data/lib/ibex/runtime/cst/green/token.rb +91 -0
  14. data/lib/ibex/runtime/cst/green/trivia.rb +36 -0
  15. data/lib/ibex/runtime/cst/incremental/blender.rb +233 -0
  16. data/lib/ibex/runtime/cst/incremental/lexed_syntax.rb +28 -0
  17. data/lib/ibex/runtime/cst/incremental/parse_memo.rb +95 -0
  18. data/lib/ibex/runtime/cst/incremental/relexer.rb +134 -0
  19. data/lib/ibex/runtime/cst/incremental/session.rb +229 -0
  20. data/lib/ibex/runtime/cst/incremental/token_memo.rb +66 -0
  21. data/lib/ibex/runtime/cst/kind.rb +133 -0
  22. data/lib/ibex/runtime/cst/parse_result.rb +41 -0
  23. data/lib/ibex/runtime/cst/rewriter.rb +75 -0
  24. data/lib/ibex/runtime/cst/serialize.rb +127 -0
  25. data/lib/ibex/runtime/cst/serialized_tree.rb +44 -0
  26. data/lib/ibex/runtime/cst/source_text.rb +112 -0
  27. data/lib/ibex/runtime/cst/syntax_node.rb +432 -0
  28. data/lib/ibex/runtime/cst/syntax_token.rb +160 -0
  29. data/lib/ibex/runtime/cst/text_edit.rb +77 -0
  30. data/lib/ibex/runtime/cst/typed_node.rb +87 -0
  31. data/lib/ibex/runtime/cst/validator.rb +428 -0
  32. data/lib/ibex/runtime/cst.rb +38 -0
  33. data/lib/ibex/runtime/event.rb +44 -0
  34. data/lib/ibex/runtime/event_jsonl_tracer.rb +37 -0
  35. data/lib/ibex/runtime/event_sanitizer.rb +273 -0
  36. data/lib/ibex/runtime/generated_lexer.rb +514 -0
  37. data/lib/ibex/runtime/jsonl_tracer.rb +75 -0
  38. data/lib/ibex/runtime/lexer_input.rb +107 -0
  39. data/lib/ibex/runtime/location_span.rb +114 -0
  40. data/lib/ibex/runtime/observation.rb +82 -0
  41. data/lib/ibex/runtime/parser.rb +3027 -0
  42. data/lib/ibex/runtime/parser_sync_recovery.rb +108 -0
  43. data/lib/ibex/runtime/repair.rb +126 -0
  44. data/lib/ibex/runtime/repair_priority_queue.rb +60 -0
  45. data/lib/ibex/runtime/repair_search.rb +318 -0
  46. data/lib/ibex/runtime/resource_limits.rb +64 -0
  47. data/lib/ibex/runtime/table_format.rb +11 -0
  48. data/lib/ibex/runtime/version.rb +7 -0
  49. data/lib/ibex/runtime.rb +27 -0
  50. data/lib/ibex/tables/compact.rb +186 -0
  51. data/lib/ibex/tables/compact_actions.rb +135 -0
  52. data/lib/ibex/tables/compact_productions.rb +167 -0
  53. data/sig/ibex/runtime/ast_data.rbs +12 -0
  54. data/sig/ibex/runtime/cst/annotation.rbs +13 -0
  55. data/sig/ibex/runtime/cst/cursor.rbs +34 -0
  56. data/sig/ibex/runtime/cst/diff.rbs +29 -0
  57. data/sig/ibex/runtime/cst/editing.rbs +23 -0
  58. data/sig/ibex/runtime/cst/editor.rbs +43 -0
  59. data/sig/ibex/runtime/cst/green/builder.rbs +84 -0
  60. data/sig/ibex/runtime/cst/green/cache.rbs +60 -0
  61. data/sig/ibex/runtime/cst/green/node.rbs +49 -0
  62. data/sig/ibex/runtime/cst/green/token.rbs +59 -0
  63. data/sig/ibex/runtime/cst/green/trivia.rbs +29 -0
  64. data/sig/ibex/runtime/cst/incremental/blender.rbs +114 -0
  65. data/sig/ibex/runtime/cst/incremental/lexed_syntax.rbs +20 -0
  66. data/sig/ibex/runtime/cst/incremental/parse_memo.rbs +59 -0
  67. data/sig/ibex/runtime/cst/incremental/relexer.rbs +54 -0
  68. data/sig/ibex/runtime/cst/incremental/session.rbs +89 -0
  69. data/sig/ibex/runtime/cst/incremental/token_memo.rbs +31 -0
  70. data/sig/ibex/runtime/cst/kind.rbs +93 -0
  71. data/sig/ibex/runtime/cst/parse_result.rbs +35 -0
  72. data/sig/ibex/runtime/cst/rewriter.rbs +31 -0
  73. data/sig/ibex/runtime/cst/serialize.rbs +39 -0
  74. data/sig/ibex/runtime/cst/serialized_tree.rbs +34 -0
  75. data/sig/ibex/runtime/cst/source_text.rbs +51 -0
  76. data/sig/ibex/runtime/cst/syntax_node.rbs +195 -0
  77. data/sig/ibex/runtime/cst/syntax_token.rbs +112 -0
  78. data/sig/ibex/runtime/cst/text_edit.rbs +33 -0
  79. data/sig/ibex/runtime/cst/typed_node.rbs +50 -0
  80. data/sig/ibex/runtime/cst/validator.rbs +108 -0
  81. data/sig/ibex/runtime/cst.rbs +9 -0
  82. data/sig/ibex/runtime/event.rbs +26 -0
  83. data/sig/ibex/runtime/event_jsonl_tracer.rbs +25 -0
  84. data/sig/ibex/runtime/event_sanitizer.rbs +92 -0
  85. data/sig/ibex/runtime/generated_lexer.rbs +169 -0
  86. data/sig/ibex/runtime/jsonl_tracer.rbs +42 -0
  87. data/sig/ibex/runtime/lexer_input.rbs +44 -0
  88. data/sig/ibex/runtime/location_span.rbs +64 -0
  89. data/sig/ibex/runtime/observation.rbs +35 -0
  90. data/sig/ibex/runtime/parser.rbs +926 -0
  91. data/sig/ibex/runtime/parser_sync_recovery.rbs +60 -0
  92. data/sig/ibex/runtime/repair.rbs +92 -0
  93. data/sig/ibex/runtime/repair_priority_queue.rbs +27 -0
  94. data/sig/ibex/runtime/repair_search.rbs +114 -0
  95. data/sig/ibex/runtime/resource_limits.rbs +39 -0
  96. data/sig/ibex/runtime/table_format.rbs +11 -0
  97. data/sig/ibex/runtime/version.rbs +7 -0
  98. data/sig/ibex/runtime.rbs +6 -0
  99. data/sig/ibex/tables/compact.rbs +70 -0
  100. data/sig/ibex/tables/compact_actions.rbs +57 -0
  101. data/sig/ibex/tables/compact_productions.rbs +68 -0
  102. metadata +144 -0
@@ -0,0 +1,84 @@
1
+ # Generated from lib/ibex/runtime/cst/green/builder.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Runtime
5
+ module CST
6
+ # LR bottom-up builder backed by a Green element stack.
7
+ # rubocop:disable Naming/PredicateMethod -- mutation methods report whether they found a target.
8
+ class GreenBuilder
9
+ type child = GreenNode | GreenToken
10
+
11
+ # @type var empty_trivia: Array[GreenTrivia]
12
+ EMPTY_TRIVIA: Array[GreenTrivia]
13
+
14
+ @stack: Array[child]
15
+
16
+ @cache: NodeCache
17
+
18
+ @kinds: Kind
19
+
20
+ # @rbs (kinds: Kind, ?cache: NodeCache) -> void
21
+ def initialize: (kinds: Kind, ?cache: NodeCache) -> void
22
+
23
+ # @rbs (Integer kind, String text, ?leading: Array[GreenTrivia], ?trailing: Array[GreenTrivia],
24
+ # ?flags: Integer) -> GreenToken
25
+ def token: (Integer kind, String text, ?leading: Array[GreenTrivia], ?trailing: Array[GreenTrivia], ?flags: Integer) -> GreenToken
26
+
27
+ # Construct an interned token without changing the builder stack.
28
+ # @rbs (Integer kind, String text, ?leading: Array[GreenTrivia], ?trailing: Array[GreenTrivia],
29
+ # ?flags: Integer) -> GreenToken
30
+ def make_token: (Integer kind, String text, ?leading: Array[GreenTrivia], ?trailing: Array[GreenTrivia], ?flags: Integer) -> GreenToken
31
+
32
+ # @rbs (Integer kind, Integer arity, ?flags: Integer) -> GreenNode
33
+ def node: (Integer kind, Integer arity, ?flags: Integer) -> GreenNode
34
+
35
+ # Push one already validated nonterminal without rebuilding its descendants.
36
+ # @rbs (GreenNode value) -> GreenNode
37
+ def subtree: (GreenNode value) -> GreenNode
38
+
39
+ # @rbs (Integer expected_kind) -> GreenToken
40
+ def missing: (Integer expected_kind) -> GreenToken
41
+
42
+ # @rbs (String text, ?leading: Array[GreenTrivia]) -> GreenToken
43
+ def lexical_error: (String text, ?leading: Array[GreenTrivia]) -> GreenToken
44
+
45
+ # Preserve popped and discarded Green elements in one error node.
46
+ # @rbs (Integer pop_count, ?skipped: Array[child]) -> GreenNode
47
+ def absorb_into_error: (Integer pop_count, ?skipped: Array[child]) -> GreenNode
48
+
49
+ # Wrap the completed start node and explicit EOF token.
50
+ # @rbs (GreenToken eof_token, ?incomplete: bool) -> GreenNode
51
+ def finish_source_file: (GreenToken eof_token, ?incomplete: bool) -> GreenNode
52
+
53
+ # Preserve every available fragment when parsing terminates without a start node.
54
+ # @rbs (?Array[child] trailing, ?incomplete: bool) -> GreenNode
55
+ def finish_synthetic_root: (?Array[child] trailing, ?incomplete: bool) -> GreenNode
56
+
57
+ # Append discarded input to the most recent error node on the stack.
58
+ # @rbs (child skipped) -> bool
59
+ def append_to_last_error: (child skipped) -> bool
60
+
61
+ # Path-copy the right edge to attach balanced trailing trivia.
62
+ # @rbs (Array[GreenTrivia] trivia) -> bool
63
+ def append_trailing_to_last_token: (Array[GreenTrivia] trivia) -> bool
64
+
65
+ # @rbs () -> Array[child]
66
+ def snapshot: () -> Array[child]
67
+
68
+ # @rbs (Array[child] elements) -> void
69
+ def restore: (Array[child] elements) -> void
70
+
71
+ # @rbs () -> Integer
72
+ def size: () -> Integer
73
+
74
+ # @rbs () -> Array[child]
75
+ def elements: () -> Array[child]
76
+
77
+ private
78
+
79
+ # @rbs (child element, Array[GreenTrivia] trivia) -> child?
80
+ def with_rightmost_trailing: (child element, Array[GreenTrivia] trivia) -> child?
81
+ end
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,60 @@
1
+ # Generated from lib/ibex/runtime/cst/green/cache.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Runtime
5
+ module CST
6
+ # Session-owned hash-consing cache for immutable Green elements.
7
+ class NodeCache
8
+ DEFAULT_NODE_ARITY_LIMIT: Integer
9
+
10
+ DEFAULT_NODE_DESCENDANT_LIMIT: Integer
11
+
12
+ # @type var empty_trivia: Array[GreenTrivia]
13
+ EMPTY_TRIVIA: Array[GreenTrivia]
14
+
15
+ @nodes: Hash[GreenNode, GreenNode]
16
+
17
+ @tokens: Hash[Integer, Array[GreenToken]]
18
+
19
+ @trivia: Hash[Integer, Array[GreenTrivia]]
20
+
21
+ @node_descendant_limit: Integer
22
+
23
+ @node_arity_limit: Integer
24
+
25
+ @enabled: bool
26
+
27
+ # @rbs (?enabled: bool, ?node_arity_limit: Integer, ?node_descendant_limit: Integer) -> void
28
+ def initialize: (?enabled: bool, ?node_arity_limit: Integer, ?node_descendant_limit: Integer) -> void
29
+
30
+ # Intern trivia before constructing it, using byte-equivalent text within this session.
31
+ # @rbs (kind: Integer, text: String) -> GreenTrivia
32
+ def intern_trivia_fields: (kind: Integer, text: String) -> GreenTrivia
33
+
34
+ # @rbs (GreenToken token) -> GreenToken
35
+ def intern_token: (GreenToken token) -> GreenToken
36
+
37
+ # Intern a token before constructing it, avoiding discarded duplicate immutable values.
38
+ # @rbs (kind: Integer, text: String, ?leading: Array[GreenTrivia], ?trailing: Array[GreenTrivia],
39
+ # ?flags: Integer, ?expected_kind: Integer?) -> GreenToken
40
+ def intern_token_fields: (kind: Integer, text: String, ?leading: Array[GreenTrivia], ?trailing: Array[GreenTrivia], ?flags: Integer, ?expected_kind: Integer?) -> GreenToken
41
+
42
+ # @rbs (GreenNode node) -> GreenNode
43
+ def intern_node: (GreenNode node) -> GreenNode
44
+
45
+ # @rbs () -> void
46
+ def clear: () -> void
47
+
48
+ private
49
+
50
+ # @rbs (Integer kind, String text, Array[GreenTrivia] leading, Array[GreenTrivia] trailing,
51
+ # Integer flags, Integer? expected_kind) -> Integer
52
+ def token_signature: (Integer kind, String text, Array[GreenTrivia] leading, Array[GreenTrivia] trailing, Integer flags, Integer? expected_kind) -> Integer
53
+
54
+ # @rbs (Array[GreenToken]? bucket, Integer kind, String text, Array[GreenTrivia] leading,
55
+ # Array[GreenTrivia] trailing, Integer flags, Integer? expected_kind) -> GreenToken?
56
+ def find_token: (Array[GreenToken]? bucket, Integer kind, String text, Array[GreenTrivia] leading, Array[GreenTrivia] trailing, Integer flags, Integer? expected_kind) -> GreenToken?
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,49 @@
1
+ # Generated from lib/ibex/runtime/cst/green/node.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Runtime
5
+ module CST
6
+ # Immutable position-independent syntax node.
7
+ class GreenNode
8
+ type child = GreenNode | GreenToken
9
+
10
+ attr_reader kind: Integer
11
+
12
+ attr_reader children: Array[child]
13
+
14
+ attr_reader flags: Integer
15
+
16
+ attr_reader intrinsic_flags: Integer
17
+
18
+ attr_reader annotations: Array[SyntaxAnnotation]
19
+
20
+ attr_reader full_width: Integer
21
+
22
+ attr_reader leading_width: Integer
23
+
24
+ attr_reader trailing_width: Integer
25
+
26
+ attr_reader descendant_count: Integer
27
+
28
+ # @rbs (kind: Integer, children: Array[child], ?flags: Integer, ?annotations: Array[SyntaxAnnotation]) -> void
29
+ def initialize: (kind: Integer, children: Array[child], ?flags: Integer, ?annotations: Array[SyntaxAnnotation]) -> void
30
+
31
+ # @rbs () -> String
32
+ def to_source: () -> String
33
+
34
+ # @rbs (untyped other) -> bool
35
+ def ==: (untyped other) -> bool
36
+
37
+ alias eql? ==
38
+
39
+ # @rbs () -> Integer
40
+ def hash: () -> Integer
41
+
42
+ private
43
+
44
+ # @rbs (Enumerable[child] children, Symbol reader) -> Integer
45
+ def edge_width: (Enumerable[child] children, Symbol reader) -> Integer
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,59 @@
1
+ # Generated from lib/ibex/runtime/cst/green/token.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Runtime
5
+ module CST
6
+ # Immutable position-independent terminal occurrence.
7
+ class GreenToken
8
+ # @type var empty_trivia: Array[GreenTrivia]
9
+ EMPTY_TRIVIA: Array[GreenTrivia]
10
+
11
+ attr_reader kind: Integer
12
+
13
+ attr_reader text: String
14
+
15
+ attr_reader leading: Array[GreenTrivia]
16
+
17
+ attr_reader trailing: Array[GreenTrivia]
18
+
19
+ attr_reader flags: Integer
20
+
21
+ attr_reader full_width: Integer
22
+
23
+ attr_reader leading_width: Integer
24
+
25
+ attr_reader trailing_width: Integer
26
+
27
+ attr_reader expected_kind: Integer?
28
+
29
+ attr_reader hash: Integer
30
+
31
+ # @rbs (kind: Integer, text: String, ?leading: Array[GreenTrivia], ?trailing: Array[GreenTrivia],
32
+ # ?flags: Integer, ?expected_kind: Integer?) -> void
33
+ def initialize: (kind: Integer, text: String, ?leading: Array[GreenTrivia], ?trailing: Array[GreenTrivia], ?flags: Integer, ?expected_kind: Integer?) -> void
34
+
35
+ # @rbs (kind: Integer, expected_kind: Integer) -> GreenToken
36
+ def self.missing: (kind: Integer, expected_kind: Integer) -> GreenToken
37
+
38
+ # @rbs (kind: Integer, text: String, ?leading: Array[GreenTrivia]) -> GreenToken
39
+ def self.lexical_error: (kind: Integer, text: String, ?leading: Array[GreenTrivia]) -> GreenToken
40
+
41
+ # @rbs () -> Integer
42
+ def descendant_count: () -> Integer
43
+
44
+ # @rbs () -> String
45
+ def to_source: () -> String
46
+
47
+ # @rbs (untyped other) -> bool
48
+ def ==: (untyped other) -> bool
49
+
50
+ alias eql? ==
51
+
52
+ private
53
+
54
+ # @rbs (Array[GreenTrivia] trivia) -> Integer
55
+ def trivia_width: (Array[GreenTrivia] trivia) -> Integer
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,29 @@
1
+ # Generated from lib/ibex/runtime/cst/green/trivia.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Runtime
5
+ module CST
6
+ # Immutable source text ignored by the grammar but owned by a token.
7
+ class GreenTrivia
8
+ attr_reader kind: Integer
9
+
10
+ attr_reader text: String
11
+
12
+ attr_reader full_width: Integer
13
+
14
+ attr_reader hash: Integer
15
+
16
+ # @rbs (kind: Integer, text: String) -> void
17
+ def initialize: (kind: Integer, text: String) -> void
18
+
19
+ # @rbs () -> String
20
+ def to_source: () -> String
21
+
22
+ # @rbs (untyped other) -> bool
23
+ def ==: (untyped other) -> bool
24
+
25
+ alias eql? ==
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,114 @@
1
+ # Generated from lib/ibex/runtime/cst/incremental/blender.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Runtime
5
+ module CST
6
+ # A Green nonterminal that can replace its old LR shift/reduce sequence.
7
+ class ReusableSubtree
8
+ attr_reader green: GreenNode
9
+
10
+ attr_reader lhs: Integer
11
+
12
+ attr_reader left_state: Integer
13
+
14
+ attr_reader left_states: Array[Integer?]
15
+
16
+ attr_reader previous_trailing: Array[GreenTrivia]
17
+
18
+ # @rbs (green: GreenNode, lhs: Integer, left_state: Integer, left_states: Array[Integer?],
19
+ # previous_trailing: Array[GreenTrivia]) -> void
20
+ def initialize: (green: GreenNode, lhs: Integer, left_state: Integer, left_states: Array[Integer?], previous_trailing: Array[GreenTrivia]) -> void
21
+ end
22
+
23
+ # A state-aware token source that substitutes validated old subtrees.
24
+ class Blender
25
+ class Candidate
26
+ attr_reader entry: ReusableSubtree
27
+
28
+ attr_reader token_count: Integer
29
+
30
+ # @rbs (entry: ReusableSubtree, token_count: Integer) -> void
31
+ def initialize: (entry: ReusableSubtree, token_count: Integer) -> void
32
+ end
33
+
34
+ UNSAFE_FLAGS: Integer
35
+
36
+ attr_reader reused_descendants: Integer
37
+
38
+ attr_reader decomposed_nodes: Integer
39
+
40
+ attr_reader fallback_reason: Symbol?
41
+
42
+ @token_index: Integer
43
+
44
+ @old_tokens: Array[GreenToken]
45
+
46
+ @new_offsets: Hash[Integer, Integer]
47
+
48
+ @candidates: Hash[Integer, Array[Candidate]]
49
+
50
+ @enabled: bool
51
+
52
+ @max_decomposed_nodes: Integer
53
+
54
+ @edits: Array[TextEdit]
55
+
56
+ @lexed: LexedSyntax
57
+
58
+ @parse_memo: ParseMemo
59
+
60
+ @old_root: SyntaxNode
61
+
62
+ # @rbs (old_root: SyntaxNode, parse_memo: ParseMemo, lexed: LexedSyntax, edits: Array[TextEdit],
63
+ # max_decomposed_nodes: Integer, ?enabled: bool) -> void
64
+ def initialize: (old_root: SyntaxNode, parse_memo: ParseMemo, lexed: LexedSyntax, edits: Array[TextEdit], max_decomposed_nodes: Integer, ?enabled: bool) -> void
65
+
66
+ # Return the next token or a whole nonterminal valid in the current LR state.
67
+ # @rbs (Integer state) -> (Array[untyped] | ReusableSubtree | false)
68
+ def next_for_state: (Integer state) -> (Array[untyped] | ReusableSubtree | false)
69
+
70
+ # @rbs () -> Integer
71
+ def token_count: () -> Integer
72
+
73
+ private
74
+
75
+ # @rbs () -> bool
76
+ def reusable_root?: () -> bool
77
+
78
+ # @rbs () -> void
79
+ def build_candidates: () -> void
80
+
81
+ # @rbs (GreenNode | GreenToken element, offset: Integer, preorder: Integer, token_index: Integer) ->
82
+ # [Integer, Integer, Integer]
83
+ def walk: (GreenNode | GreenToken element, offset: Integer, preorder: Integer, token_index: Integer) -> [ Integer, Integer, Integer ]
84
+
85
+ # @rbs (GreenNode node, Integer preorder, Integer old_offset, Integer start_token, Integer end_token) -> void
86
+ def add_candidate: (GreenNode node, Integer preorder, Integer old_offset, Integer start_token, Integer end_token) -> void
87
+
88
+ # @rbs (GreenNode node, Integer old_offset) -> bool
89
+ def reusable_node?: (GreenNode node, Integer old_offset) -> bool
90
+
91
+ # @rbs (Integer start_offset, Integer finish_offset) -> bool
92
+ def outside_damage?: (Integer start_offset, Integer finish_offset) -> bool
93
+
94
+ # @rbs (Integer old_offset) -> Integer
95
+ def translated_offset: (Integer old_offset) -> Integer
96
+
97
+ # @rbs (Integer old_index, Integer new_index, Integer count) -> bool
98
+ def matching_tokens?: (Integer old_index, Integer new_index, Integer count) -> bool
99
+
100
+ # @rbs (Integer old_index, Integer new_index) -> bool
101
+ def matching_follow_token?: (Integer old_index, Integer new_index) -> bool
102
+
103
+ # @rbs (Integer token_index) -> Array[GreenTrivia]
104
+ def previous_trailing: (Integer token_index) -> Array[GreenTrivia]
105
+
106
+ # @rbs (Array[Integer] offsets) -> Hash[Integer, Integer]
107
+ def offset_index: (Array[Integer] offsets) -> Hash[Integer, Integer]
108
+
109
+ # @rbs () -> void
110
+ def consume_decomposition_budget!: () -> void
111
+ end
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,20 @@
1
+ # Generated from lib/ibex/runtime/cst/incremental/lexed_syntax.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Runtime
5
+ module CST
6
+ # One complete generated-lexer pass, including the explicit EOF token.
7
+ class LexedSyntax
8
+ attr_reader raw_tokens: Array[Array[untyped]]
9
+
10
+ attr_reader memo: TokenMemo
11
+
12
+ # @rbs (raw_tokens: Array[Array[untyped]], memo: TokenMemo) -> void
13
+ def initialize: (raw_tokens: Array[Array[untyped]], memo: TokenMemo) -> void
14
+
15
+ # @rbs (TokenMemo replacement) -> LexedSyntax
16
+ def with_memo: (TokenMemo replacement) -> LexedSyntax
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,59 @@
1
+ # Generated from lib/ibex/runtime/cst/incremental/parse_memo.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Runtime
5
+ module CST
6
+ # Parser-state metadata parallel to Green preorder occurrences.
7
+ class ParseMemo
8
+ VERSION: Integer
9
+
10
+ ENTRY_BYTES: Integer
11
+
12
+ attr_reader left_states: Array[Integer?]
13
+
14
+ attr_reader grammar_digest: String
15
+
16
+ attr_reader state_count: Integer
17
+
18
+ attr_reader production_count: Integer
19
+
20
+ # @rbs (left_states: Array[Integer?], grammar_digest: String, state_count: Integer,
21
+ # production_count: Integer) -> void
22
+ def initialize: (left_states: Array[Integer?], grammar_digest: String, state_count: Integer, production_count: Integer) -> void
23
+
24
+ # @rbs (Integer preorder_index) -> Integer?
25
+ def left_state: (Integer preorder_index) -> Integer?
26
+
27
+ # @rbs (Integer preorder_index, GreenNode | GreenToken element) -> Array[Integer?]
28
+ def slice: (Integer preorder_index, GreenNode | GreenToken element) -> Array[Integer?]
29
+
30
+ # @rbs (Hash[Symbol, untyped] tables) -> bool
31
+ def compatible?: (Hash[Symbol, untyped] tables) -> bool
32
+
33
+ # @rbs () -> Integer
34
+ def estimated_bytes: () -> Integer
35
+
36
+ # @rbs () -> Hash[String, untyped]
37
+ def to_h: () -> Hash[String, untyped]
38
+
39
+ # Lightweight construction tree flattened once when a parse completes.
40
+ class Entry
41
+ # @type var empty_children: Array[Entry]
42
+ EMPTY_CHILDREN: Array[Entry]
43
+
44
+ @state: Integer?
45
+
46
+ @children: Array[Entry]
47
+
48
+ @segment: Array[Integer?]?
49
+
50
+ # @rbs (Integer? state, ?children: Array[Entry], ?segment: Array[Integer?]?) -> void
51
+ def initialize: (Integer? state, ?children: Array[Entry], ?segment: Array[Integer?]?) -> void
52
+
53
+ # @rbs (Array[Integer?] output) -> void
54
+ def append_to: (Array[Integer?] output) -> void
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,54 @@
1
+ # Generated from lib/ibex/runtime/cst/incremental/relexer.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Runtime
5
+ module CST
6
+ # Result of comparing one fresh lexical pass with the prior token memo.
7
+ class RelexResult
8
+ attr_reader memo: TokenMemo
9
+
10
+ attr_reader reused_count: Integer
11
+
12
+ attr_reader scanned_count: Integer
13
+
14
+ attr_reader resynchronized_at: Integer?
15
+
16
+ # @rbs (memo: TokenMemo, reused_count: Integer, scanned_count: Integer,
17
+ # resynchronized_at: Integer?) -> void
18
+ def initialize: (memo: TokenMemo, reused_count: Integer, scanned_count: Integer, resynchronized_at: Integer?) -> void
19
+
20
+ # @rbs () -> Float
21
+ def reused_ratio: () -> Float
22
+ end
23
+
24
+ # Sound Stage-A comparison: scan from the beginning and reuse only exact
25
+ # token/state/boundary matches, then recognize a shifted suffix boundary.
26
+ class Relexer
27
+ # @rbs (TokenMemo previous, TokenMemo current, Array[TextEdit] edits) -> RelexResult
28
+ def self.reconcile: (TokenMemo previous, TokenMemo current, Array[TextEdit] edits) -> RelexResult
29
+
30
+ # @rbs (Array[TextEdit] edits) -> [Integer, Integer, Integer]
31
+ def self.edit_window: (Array[TextEdit] edits) -> [ Integer, Integer, Integer ]
32
+
33
+ # @rbs (TokenMemo memo) -> Hash[Integer, Integer]
34
+ def self.offset_index: (TokenMemo memo) -> Hash[Integer, Integer]
35
+
36
+ # @rbs (TokenMemo previous, TokenMemo current, Array[GreenToken] tokens,
37
+ # Hash[Integer, Integer] old_by_offset, Integer damage, Integer delta, Integer resync_boundary) ->
38
+ # [Integer, Integer, Integer?]
39
+ def self.reuse_tokens: (TokenMemo previous, TokenMemo current, Array[GreenToken] tokens, Hash[Integer, Integer] old_by_offset, Integer damage, Integer delta, Integer resync_boundary) -> [ Integer, Integer, Integer? ]
40
+
41
+ # @rbs (TokenMemo previous, TokenMemo current, Integer index, Integer new_offset, Integer delta,
42
+ # Integer boundary, Hash[Integer, Integer] old_by_offset) -> [Integer, Integer]?
43
+ def self.reusable_suffix: (TokenMemo previous, TokenMemo current, Integer index, Integer new_offset, Integer delta, Integer boundary, Hash[Integer, Integer] old_by_offset) -> [ Integer, Integer ]?
44
+
45
+ # @rbs (Array[GreenToken] target, Array[GreenToken] source, Integer target_index,
46
+ # Integer source_index, Integer length) -> void
47
+ def self.copy_suffix: (Array[GreenToken] target, Array[GreenToken] source, Integer target_index, Integer source_index, Integer length) -> void
48
+
49
+ # @rbs (TokenMemo previous, Integer old_index, TokenMemo current, Integer new_index) -> bool
50
+ def self.reusable_token?: (TokenMemo previous, Integer old_index, TokenMemo current, Integer new_index) -> bool
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,89 @@
1
+ # Generated from lib/ibex/runtime/cst/incremental/session.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Runtime
5
+ module CST
6
+ # Raised when incremental parsing cannot preserve its syntax-only contract.
7
+ class IncrementalUnsupportedError < ArgumentError
8
+ end
9
+
10
+ # A mutable, single-owner session around immutable source and syntax results.
11
+ class IncrementalParseSession
12
+ attr_reader source_text: SourceText
13
+
14
+ attr_reader result: SyntaxResult
15
+
16
+ attr_reader token_memo: TokenMemo
17
+
18
+ attr_reader parse_memo: ParseMemo
19
+
20
+ attr_reader last_relex_result: RelexResult?
21
+
22
+ attr_reader last_blender: Blender?
23
+
24
+ @mutex: Mutex
25
+
26
+ @blender_enabled: bool
27
+
28
+ @cache: NodeCache
29
+
30
+ @parser: Parser
31
+
32
+ @resource_limits: ResourceLimits
33
+
34
+ # @rbs (Class parser_class, SourceText source_text, ?resource_limits: ResourceLimits?, ?blender: bool) -> void
35
+ def initialize: (Class parser_class, SourceText source_text, ?resource_limits: ResourceLimits?, ?blender: bool) -> void
36
+
37
+ # Apply edits expressed against the current source and return syntax only.
38
+ # @rbs (Array[TextEdit] edits) -> SyntaxResult
39
+ def edit: (Array[TextEdit] edits) -> SyntaxResult
40
+
41
+ # Observe parser and incremental runtime events.
42
+ # @rbs () { (Event) -> void } -> Observation::Subscription
43
+ def observe: () { (Event) -> void } -> Observation::Subscription
44
+
45
+ # @rbs (Observation::Subscription subscription) -> bool
46
+ def unobserve: (Observation::Subscription subscription) -> bool
47
+
48
+ private
49
+
50
+ # @rbs (Array[TextEdit] edits) -> SyntaxResult
51
+ def edit_locked: (Array[TextEdit] edits) -> SyntaxResult
52
+
53
+ # @rbs () -> LexedSyntax?
54
+ def scan_current: () -> LexedSyntax?
55
+
56
+ # @rbs (SyntaxNode old_root, ParseMemo old_memo, LexedSyntax lexed, Array[TextEdit] edits) -> Blender
57
+ def build_blender: (SyntaxNode old_root, ParseMemo old_memo, LexedSyntax lexed, Array[TextEdit] edits) -> Blender
58
+
59
+ # @rbs (RelexResult relexed, Blender blender) -> SyntaxResult
60
+ def finish_blended_edit: (RelexResult relexed, Blender blender) -> SyntaxResult
61
+
62
+ # @rbs (Blender blender, GreenNode root, RelexResult relexed) -> Float
63
+ def blender_reused_ratio: (Blender blender, GreenNode root, RelexResult relexed) -> Float
64
+
65
+ # @rbs (Blender blender, RelexResult relexed, Float reused_ratio) -> void
66
+ def emit_reuse_event: (Blender blender, RelexResult relexed, Float reused_ratio) -> void
67
+
68
+ # @rbs () -> void
69
+ def validate_parser!: () -> void
70
+
71
+ # @rbs (Float reused_ratio) -> [SyntaxResult, TokenMemo, ParseMemo]
72
+ def parse_current: (Float reused_ratio) -> [ SyntaxResult, TokenMemo, ParseMemo ]
73
+
74
+ # Error trees cannot be reused, but retain position-aligned disposable memo storage.
75
+ # @rbs (GreenNode root) -> ParseMemo
76
+ def empty_parse_memo: (GreenNode root) -> ParseMemo
77
+
78
+ # @rbs (Blender blender) -> void
79
+ def report_blender_fallback: (Blender blender) -> void
80
+
81
+ # @rbs (TokenMemo previous_memo, Array[TextEdit] edits, Symbol reason) -> SyntaxResult
82
+ def finish_full_fallback: (TokenMemo previous_memo, Array[TextEdit] edits, Symbol reason) -> SyntaxResult
83
+
84
+ # @rbs () -> void
85
+ def enforce_memo_budget!: () -> void
86
+ end
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,31 @@
1
+ # Generated from lib/ibex/runtime/cst/incremental/token_memo.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Runtime
5
+ module CST
6
+ # Session-local token metadata used to validate lexical resynchronization.
7
+ class TokenMemo
8
+ ENTRY_BYTES: Integer
9
+
10
+ attr_reader tokens: Array[GreenToken]
11
+
12
+ attr_reader offsets: Array[Integer]
13
+
14
+ attr_reader states: Array[Symbol]
15
+
16
+ # @rbs (tokens: Array[GreenToken], offsets: Array[Integer], states: Array[Symbol]) -> void
17
+ def initialize: (tokens: Array[GreenToken], offsets: Array[Integer], states: Array[Symbol]) -> void
18
+
19
+ # @rbs (SyntaxNode root, ?states: Array[Symbol]) -> TokenMemo
20
+ def self.from_root: (SyntaxNode root, ?states: Array[Symbol]) -> TokenMemo
21
+
22
+ # The first token whose owned full span contains or follows an edit.
23
+ # @rbs (Array[TextEdit] edits) -> Integer?
24
+ def damage_index: (Array[TextEdit] edits) -> Integer?
25
+
26
+ # @rbs () -> Integer
27
+ def estimated_bytes: () -> Integer
28
+ end
29
+ end
30
+ end
31
+ end