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,93 @@
1
+ # Generated from lib/ibex/runtime/cst/kind.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Runtime
5
+ module CST
6
+ # Flags cached on Green elements and propagated by Green nodes.
7
+ module Flags
8
+ CONTAINS_ERROR: Integer
9
+
10
+ CONTAINS_MISSING: Integer
11
+
12
+ CONTAINS_SKIPPED: Integer
13
+
14
+ HAS_ANNOTATION: Integer
15
+
16
+ SYNTHETIC: Integer
17
+
18
+ INCOMPLETE_INPUT: Integer
19
+ end
20
+
21
+ # Grammar-specific integer kind names and interval predicates.
22
+ class Kind
23
+ type kind_map = Hash[String, Integer]
24
+
25
+ type field_slot = Integer | { index: Integer, extraction: Symbol }
26
+
27
+ type slot = { node_kind: Integer, node_name: String, fields: Hash[String, field_slot] }
28
+
29
+ type metadata = { names: Array[String], terminal_range: Array[Integer], nonterminal_range: Array[Integer], named: kind_map, named_nonterminals: Hash[Integer, Integer], trivia: kind_map, synthetic: kind_map }
30
+
31
+ @field_slots: Hash[Integer, Hash[String, field_slot]]
32
+
33
+ @synthetic: Hash[String, Integer]
34
+
35
+ @trivia: Hash[String, Integer]
36
+
37
+ @named_nonterminals: Hash[Integer, Integer]
38
+
39
+ @named: Hash[String, Integer]
40
+
41
+ @nonterminal_range: Array[Integer]
42
+
43
+ @terminal_range: Array[Integer]
44
+
45
+ @names: Array[String]
46
+
47
+ # @rbs (metadata metadata, ?slots: Hash[Integer, slot]) -> void
48
+ def initialize: (metadata metadata, ?slots: Hash[Integer, slot]) -> void
49
+
50
+ # @rbs (Integer kind) -> String
51
+ def name: (Integer kind) -> String
52
+
53
+ # @rbs (String | Symbol name) -> Integer
54
+ def fetch: (String | Symbol name) -> Integer
55
+
56
+ # @rbs (Integer kind) -> bool
57
+ def terminal?: (Integer kind) -> bool
58
+
59
+ # @rbs (Integer kind) -> bool
60
+ def nonterminal?: (Integer kind) -> bool
61
+
62
+ # @rbs (Integer kind) -> bool
63
+ def trivia?: (Integer kind) -> bool
64
+
65
+ # @rbs (Integer kind) -> bool
66
+ def error?: (Integer kind) -> bool
67
+
68
+ # Map a named node kind to its physical nonterminal kind.
69
+ # @rbs (Integer kind) -> Integer
70
+ def nonterminal_of: (Integer kind) -> Integer
71
+
72
+ # Return the named field-to-physical-slot mapping for a kind.
73
+ # @rbs (Integer kind) -> Hash[String, field_slot]
74
+ def fields: (Integer kind) -> Hash[String, field_slot]
75
+
76
+ # Return the serialization-safe kind metadata.
77
+ # @rbs () -> metadata
78
+ def to_h: () -> metadata
79
+
80
+ private
81
+
82
+ # : Hash[String, field_slot]
83
+ EMPTY_FIELDS: untyped
84
+
85
+ # @rbs (Hash[Integer, slot] slots) -> Hash[Integer, Hash[String, field_slot]]
86
+ def build_field_slots: (Hash[Integer, slot] slots) -> Hash[Integer, Hash[String, field_slot]]
87
+
88
+ # @rbs (Array[Integer] range, Integer kind) -> bool
89
+ def within?: (Array[Integer] range, Integer kind) -> bool
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,35 @@
1
+ # Generated from lib/ibex/runtime/cst/parse_result.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Runtime
5
+ module CST
6
+ # Immutable result returned by syntax-aware parser entry points.
7
+ class ParseResult
8
+ attr_reader value: untyped
9
+
10
+ attr_reader syntax_root: SyntaxNode
11
+
12
+ attr_reader diagnostics: Array[untyped]
13
+
14
+ # @rbs (value: untyped, syntax_root: SyntaxNode, diagnostics: Array[untyped]) -> void
15
+ def initialize: (value: untyped, syntax_root: SyntaxNode, diagnostics: Array[untyped]) -> void
16
+ end
17
+
18
+ # Syntax-only result used by incremental sessions.
19
+ class SyntaxResult
20
+ attr_reader syntax_root: SyntaxNode
21
+
22
+ attr_reader diagnostics: Array[untyped]
23
+
24
+ attr_reader reused_ratio: Float
25
+
26
+ # @rbs (syntax_root: SyntaxNode, diagnostics: Array[untyped], reused_ratio: Float) -> void
27
+ def initialize: (syntax_root: SyntaxNode, diagnostics: Array[untyped], reused_ratio: Float) -> void
28
+ end
29
+ end
30
+
31
+ ParseResult: untyped
32
+
33
+ SyntaxResult: untyped
34
+ end
35
+ end
@@ -0,0 +1,31 @@
1
+ # Generated from lib/ibex/runtime/cst/rewriter.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Runtime
5
+ module CST
6
+ # Bottom-up syntax rewriter with kind-name dispatch.
7
+ class SyntaxRewriter
8
+ type element = SyntaxNode | SyntaxToken
9
+
10
+ type green = GreenNode | GreenToken
11
+
12
+ # @rbs (SyntaxNode root) -> SyntaxNode
13
+ def rewrite: (SyntaxNode root) -> SyntaxNode
14
+
15
+ # @rbs (element element) -> green
16
+ def visit: (element element) -> green
17
+
18
+ private
19
+
20
+ # @rbs (SyntaxNode node) -> GreenNode
21
+ def visit_children: (SyntaxNode node) -> GreenNode
22
+
23
+ # @rbs (element original, green rewritten) -> element
24
+ def rewritten_view: (element original, green rewritten) -> element
25
+
26
+ # @rbs (String name) -> String
27
+ def method_name: (String name) -> String
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,39 @@
1
+ # Generated from lib/ibex/runtime/cst/serialize.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Runtime
5
+ module CST
6
+ class SerializationError < StandardError
7
+ end
8
+
9
+ # Stable JSON serialization for `ibex_cst` schema version 1.
10
+ module Serialize
11
+ SCHEMA_VERSION: Integer
12
+
13
+ # @rbs (SyntaxNode | SerializedTree value, ?grammar_digest: String?, ?table_format: Integer?,
14
+ # ?state_count: Integer?, ?production_count: Integer?, ?memo: ParseMemo?) -> String
15
+ def self?.dump: (SyntaxNode | SerializedTree value, ?grammar_digest: String?, ?table_format: Integer?, ?state_count: Integer?, ?production_count: Integer?, ?memo: ParseMemo?) -> String
16
+
17
+ # @rbs (String source, ?grammar_digest: String?, ?state_count: Integer?,
18
+ # ?production_count: Integer?) -> SerializedTree
19
+ def self?.load: (String source, ?grammar_digest: String?, ?state_count: Integer?, ?production_count: Integer?) -> SerializedTree
20
+
21
+ # @rbs (SyntaxNode | SerializedTree value, grammar_digest: String?, table_format: Integer?,
22
+ # state_count: Integer?, production_count: Integer?, memo: ParseMemo?) -> SerializedTree
23
+ def self?.serialization_tree: (SyntaxNode | SerializedTree value, grammar_digest: String?, table_format: Integer?, state_count: Integer?, production_count: Integer?, memo: ParseMemo?) -> SerializedTree
24
+
25
+ # @rbs (Kind kinds) -> Hash[String, untyped]
26
+ def self?.kinds_document: (Kind kinds) -> Hash[String, untyped]
27
+
28
+ # @rbs (GreenNode | GreenToken element) -> Hash[String, untyped]
29
+ def self?.element_document: (GreenNode | GreenToken element) -> Hash[String, untyped]
30
+
31
+ # @rbs (GreenTrivia trivia) -> Array[untyped]
32
+ def self?.trivia_document: (GreenTrivia trivia) -> Array[untyped]
33
+
34
+ # @rbs (String text) -> (String | Hash[String, String])
35
+ def self?.encode_text: (String text) -> (String | Hash[String, String])
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,34 @@
1
+ # Generated from lib/ibex/runtime/cst/serialized_tree.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Runtime
5
+ module CST
6
+ # Validated CST serialization document and its reconstructed Red root.
7
+ class SerializedTree
8
+ attr_reader grammar_digest: String
9
+
10
+ attr_reader table_format: Integer
11
+
12
+ attr_reader state_count: Integer
13
+
14
+ attr_reader production_count: Integer
15
+
16
+ attr_reader trivia_policy: Symbol
17
+
18
+ attr_reader kinds: Kind
19
+
20
+ attr_reader green_root: GreenNode
21
+
22
+ attr_reader memo: ParseMemo?
23
+
24
+ # @rbs (grammar_digest: String, table_format: Integer, state_count: Integer,
25
+ # production_count: Integer, trivia_policy: Symbol, kinds: Kind, green_root: GreenNode,
26
+ # ?memo: ParseMemo?) -> void
27
+ def initialize: (grammar_digest: String, table_format: Integer, state_count: Integer, production_count: Integer, trivia_policy: Symbol, kinds: Kind, green_root: GreenNode, ?memo: ParseMemo?) -> void
28
+
29
+ # @rbs () -> SyntaxNode
30
+ def syntax_root: () -> SyntaxNode
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,51 @@
1
+ # Generated from lib/ibex/runtime/cst/source_text.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Runtime
5
+ module CST
6
+ # Immutable byte-oriented source with lazy line/column conversion.
7
+ class SourceText
8
+ type position = [ Integer, Integer ]
9
+
10
+ attr_reader text: String
11
+
12
+ attr_reader file: String?
13
+
14
+ # @rbs (String text, ?file: String?) -> void
15
+ def initialize: (String text, ?file: String?) -> void
16
+
17
+ # @rbs () -> Integer
18
+ def bytesize: () -> Integer
19
+
20
+ # Apply non-overlapping byte edits expressed against this source.
21
+ # @rbs (Array[TextEdit] edits) -> SourceText
22
+ def apply: (Array[TextEdit] edits) -> SourceText
23
+
24
+ # Return one-based line and Unicode-scalar column for a byte offset.
25
+ # Invalid UTF-8 bytes count as one replacement scalar each.
26
+ # @rbs (Integer offset) -> position
27
+ def position: (Integer offset) -> position
28
+
29
+ # @rbs (Range[Integer] range) -> Ibex::Location
30
+ def location: (Range[Integer] range) -> Ibex::Location
31
+
32
+ # @rbs (Integer line) -> String
33
+ def line_text: (Integer line) -> String
34
+
35
+ private
36
+
37
+ # @rbs () -> Array[Integer]
38
+ def build_line_starts: () -> Array[Integer]
39
+
40
+ # @rbs (Integer offset) -> void
41
+ def validate_offset: (Integer offset) -> void
42
+
43
+ # @rbs (Range[Integer] range) -> position
44
+ def normalized_range: (Range[Integer] range) -> position
45
+
46
+ # @rbs (String bytes) -> Integer
47
+ def unicode_scalar_length: (String bytes) -> Integer
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,195 @@
1
+ # Generated from lib/ibex/runtime/cst/syntax_node.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Runtime
5
+ module CST
6
+ # Lazy Red navigation facade for one Green node occurrence.
7
+ class SyntaxNode
8
+ include Enumerable[element]
9
+
10
+ type element = SyntaxNode | SyntaxToken
11
+
12
+ attr_reader green: GreenNode
13
+
14
+ attr_reader parent: SyntaxNode?
15
+
16
+ attr_reader index: Integer
17
+
18
+ attr_reader offset: Integer
19
+
20
+ attr_reader kinds: Kind
21
+
22
+ attr_reader trivia_policy: Symbol
23
+
24
+ attr_reader source_text: SourceText
25
+
26
+ # @rbs (green: GreenNode, kinds: Kind, ?parent: SyntaxNode?, ?index: Integer, ?offset: Integer,
27
+ # ?trivia_policy: Symbol, ?source_text: SourceText?) -> void
28
+ def initialize: (green: GreenNode, kinds: Kind, ?parent: SyntaxNode?, ?index: Integer, ?offset: Integer, ?trivia_policy: Symbol, ?source_text: SourceText?) -> void
29
+
30
+ # @rbs () -> Integer
31
+ def kind: () -> Integer
32
+
33
+ # @rbs () -> String
34
+ def kind_name: () -> String
35
+
36
+ # Compatibility name for the physical grammar symbol.
37
+ # @rbs () -> String
38
+ def symbol: () -> String
39
+
40
+ # Green kinds replace occurrence-local production ids. Keep the legacy
41
+ # key and reader with the historical synthetic sentinel.
42
+ # @rbs () -> Integer
43
+ def production_id: () -> Integer
44
+
45
+ # @rbs () -> Array[element]
46
+ def children: () -> Array[element]
47
+
48
+ def each: () -> Enumerator[element, self]
49
+ | () { (element) -> void } -> self
50
+
51
+ # @rbs (Integer child_index) -> element
52
+ def child_at: (Integer child_index) -> element
53
+
54
+ # @rbs () -> Array[SyntaxNode]
55
+ def child_nodes: () -> Array[SyntaxNode]
56
+
57
+ # @rbs () -> Array[SyntaxToken]
58
+ def tokens: () -> Array[SyntaxToken]
59
+
60
+ # @rbs () -> SyntaxToken?
61
+ def first_token: () -> SyntaxToken?
62
+
63
+ # @rbs () -> SyntaxToken?
64
+ def last_token: () -> SyntaxToken?
65
+
66
+ # @rbs () -> element?
67
+ def next_sibling: () -> element?
68
+
69
+ # @rbs () -> element?
70
+ def prev_sibling: () -> element?
71
+
72
+ # @rbs () -> Enumerator[SyntaxNode, void]
73
+ def ancestors: () -> Enumerator[SyntaxNode, void]
74
+
75
+ # @rbs () -> Enumerator[element, void]
76
+ def descendants: () -> Enumerator[element, void]
77
+
78
+ # @rbs () -> SyntaxNode
79
+ def root: () -> SyntaxNode
80
+
81
+ # @rbs () -> Range[Integer]
82
+ def full_span: () -> Range[Integer]
83
+
84
+ # @rbs () -> Range[Integer]
85
+ def span: () -> Range[Integer]
86
+
87
+ # @rbs () -> Ibex::Location
88
+ def location: () -> Ibex::Location
89
+
90
+ # @rbs () -> String
91
+ def full_text: () -> String
92
+
93
+ alias to_source full_text
94
+
95
+ # @rbs () -> String
96
+ def text: () -> String
97
+
98
+ # Compatibility view of file-tail trivia. The Red/Green layout owns it
99
+ # on EOF rather than on the start node.
100
+ # @rbs () -> Array[GreenTrivia]
101
+ def trailing_trivia: () -> Array[GreenTrivia]
102
+
103
+ # @rbs () -> bool
104
+ def error?: () -> bool
105
+
106
+ # @rbs () -> bool
107
+ def missing?: () -> bool
108
+
109
+ # @rbs () -> bool
110
+ def contains_error?: () -> bool
111
+
112
+ # @rbs () -> bool
113
+ def incomplete_input?: () -> bool
114
+
115
+ # @rbs (GreenNode | GreenToken | SyntaxNode | SyntaxToken replacement) -> SyntaxNode
116
+ def replace_with: (GreenNode | GreenToken | SyntaxNode | SyntaxToken replacement) -> SyntaxNode
117
+
118
+ # @rbs (Integer child_index, GreenNode | GreenToken | SyntaxNode | SyntaxToken child) -> SyntaxNode
119
+ def with_child: (Integer child_index, GreenNode | GreenToken | SyntaxNode | SyntaxToken child) -> SyntaxNode
120
+
121
+ # @rbs (Integer child_index, GreenNode | GreenToken | SyntaxNode | SyntaxToken child) -> SyntaxNode
122
+ def insert_child: (Integer child_index, GreenNode | GreenToken | SyntaxNode | SyntaxToken child) -> SyntaxNode
123
+
124
+ # @rbs (Integer child_index) -> SyntaxNode
125
+ def remove_child: (Integer child_index) -> SyntaxNode
126
+
127
+ # @rbs (SyntaxAnnotation annotation) -> SyntaxNode
128
+ def annotate: (SyntaxAnnotation annotation) -> SyntaxNode
129
+
130
+ # @rbs (SyntaxAnnotation annotation) -> Enumerator[SyntaxNode, void]
131
+ def annotated: (SyntaxAnnotation annotation) -> Enumerator[SyntaxNode, void]
132
+
133
+ # Find the full-span-owning token for a byte offset.
134
+ # @rbs (Integer source_offset) -> SyntaxToken?
135
+ def token_at: (Integer source_offset) -> SyntaxToken?
136
+
137
+ # Return the smallest syntax element whose full span covers a range.
138
+ # @rbs (Range[Integer] range) -> element?
139
+ def covering: (Range[Integer] range) -> element?
140
+
141
+ # @rbs (kind: Integer | String | Symbol) -> Enumerator[element, void]
142
+ def find: (kind: Integer | String | Symbol) -> Enumerator[element, void]
143
+
144
+ # @rbs () -> Enumerator[element, void]
145
+ # @rbs () { (element) -> void } -> self
146
+ def each_error: () -> Enumerator[element, void]
147
+ | () { (element) -> void } -> self
148
+
149
+ # @rbs () { (Symbol, element) -> void } -> self
150
+ def walk: () { (Symbol, element) -> void } -> self
151
+
152
+ # @rbs () -> Cursor
153
+ def cursor: () -> Cursor
154
+
155
+ # @rbs (SyntaxNode other) -> bool
156
+ def same_node?: (SyntaxNode other) -> bool
157
+
158
+ # @rbs (untyped other) -> bool
159
+ def ==: (untyped other) -> bool
160
+
161
+ # @rbs () -> Array[element]
162
+ def deconstruct: () -> Array[element]
163
+
164
+ # @rbs (Array[Symbol]?) -> Hash[Symbol, untyped]
165
+ def deconstruct_keys: (Array[Symbol]?) -> Hash[Symbol, untyped]
166
+
167
+ # @rbs () -> Hash[Symbol, untyped]
168
+ def to_h: () -> Hash[Symbol, untyped]
169
+
170
+ # @rbs (Integer source_offset) -> element?
171
+ def child_covering_offset: (Integer source_offset) -> element?
172
+
173
+ private
174
+
175
+ # @rbs () -> SyntaxToken?
176
+ def compatibility_eof: () -> SyntaxToken?
177
+
178
+ # @rbs () -> String
179
+ def root_source: () -> String
180
+
181
+ # @rbs (Integer child_index) -> Integer
182
+ def offset_for: (Integer child_index) -> Integer
183
+
184
+ # @rbs () -> void
185
+ def ensure_coordinates!: () -> void
186
+
187
+ # @rbs (Range[Integer] range) -> [Integer, Integer]
188
+ def normalize_range: (Range[Integer] range) -> [ Integer, Integer ]
189
+
190
+ # @rbs (Integer start_offset, Integer end_offset) -> bool
191
+ def covers_offsets?: (Integer start_offset, Integer end_offset) -> bool
192
+ end
193
+ end
194
+ end
195
+ end
@@ -0,0 +1,112 @@
1
+ # Generated from lib/ibex/runtime/cst/syntax_token.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Runtime
5
+ module CST
6
+ # Raised when source-coordinate APIs are used on a trivia-dropped tree.
7
+ class TriviaDroppedError < StandardError
8
+ end
9
+
10
+ # Lightweight Red facade for one Green token occurrence.
11
+ class SyntaxToken
12
+ attr_reader green: GreenToken
13
+
14
+ attr_reader parent: SyntaxNode
15
+
16
+ attr_reader index: Integer
17
+
18
+ attr_reader offset: Integer
19
+
20
+ # @rbs (green: GreenToken, parent: SyntaxNode, index: Integer, offset: Integer) -> void
21
+ def initialize: (green: GreenToken, parent: SyntaxNode, index: Integer, offset: Integer) -> void
22
+
23
+ # @rbs () -> Integer
24
+ def kind: () -> Integer
25
+
26
+ # @rbs () -> String
27
+ def kind_name: () -> String
28
+
29
+ # @rbs () -> String
30
+ def symbol: () -> String
31
+
32
+ # @rbs () -> String
33
+ def text: () -> String
34
+
35
+ # Compatibility projection for the legacy token API. Semantic lexer
36
+ # values remain on the parser value path; syntax exposes source bytes.
37
+ # @rbs () -> String
38
+ def value: () -> String
39
+
40
+ # @rbs () -> Array[GreenTrivia]
41
+ def leading_trivia: () -> Array[GreenTrivia]
42
+
43
+ # @rbs () -> Array[untyped]
44
+ def children: () -> Array[untyped]
45
+
46
+ # @rbs () -> String
47
+ def full_text: () -> String
48
+
49
+ alias to_source full_text
50
+
51
+ # @rbs () -> Range[Integer]
52
+ def full_span: () -> Range[Integer]
53
+
54
+ # @rbs () -> Range[Integer]
55
+ def span: () -> Range[Integer]
56
+
57
+ # @rbs () -> Ibex::Location
58
+ def location: () -> Ibex::Location
59
+
60
+ # @rbs () -> bool
61
+ def error?: () -> bool
62
+
63
+ # @rbs () -> bool
64
+ def missing?: () -> bool
65
+
66
+ # @rbs () -> bool
67
+ def contains_error?: () -> bool
68
+
69
+ # @rbs (GreenNode | GreenToken | SyntaxNode | SyntaxToken replacement) -> SyntaxNode
70
+ def replace_with: (GreenNode | GreenToken | SyntaxNode | SyntaxToken replacement) -> SyntaxNode
71
+
72
+ # @rbs (String value) -> SyntaxNode
73
+ def with_text: (String value) -> SyntaxNode
74
+
75
+ # @rbs (Array[GreenTrivia] trivia) -> SyntaxNode
76
+ def with_leading: (Array[GreenTrivia] trivia) -> SyntaxNode
77
+
78
+ # @rbs (Array[GreenTrivia] trivia) -> SyntaxNode
79
+ def with_trailing: (Array[GreenTrivia] trivia) -> SyntaxNode
80
+
81
+ # @rbs () -> (SyntaxNode | SyntaxToken)?
82
+ def next_sibling: () -> (SyntaxNode | SyntaxToken)?
83
+
84
+ # @rbs () -> (SyntaxNode | SyntaxToken)?
85
+ def prev_sibling: () -> (SyntaxNode | SyntaxToken)?
86
+
87
+ # @rbs () -> SyntaxNode
88
+ def root: () -> SyntaxNode
89
+
90
+ # @rbs (SyntaxToken other) -> bool
91
+ def same_node?: (SyntaxToken other) -> bool
92
+
93
+ # @rbs (untyped other) -> bool
94
+ def ==: (untyped other) -> bool
95
+
96
+ # @rbs () -> Array[untyped]
97
+ def deconstruct: () -> Array[untyped]
98
+
99
+ # @rbs (Array[Symbol]?) -> Hash[Symbol, untyped]
100
+ def deconstruct_keys: (Array[Symbol]?) -> Hash[Symbol, untyped]
101
+
102
+ # @rbs () -> Hash[Symbol, untyped]
103
+ def to_h: () -> Hash[Symbol, untyped]
104
+
105
+ private
106
+
107
+ # @rbs () -> void
108
+ def ensure_coordinates!: () -> void
109
+ end
110
+ end
111
+ end
112
+ end
@@ -0,0 +1,33 @@
1
+ # Generated from lib/ibex/runtime/cst/text_edit.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Runtime
5
+ module CST
6
+ # One byte-oriented source replacement.
7
+ class TextEdit
8
+ # Sort and merge adjacent edits while rejecting intersecting source ranges.
9
+ # All edits remain expressed against the unedited source.
10
+ # @rbs (Array[TextEdit] edits) -> Array[TextEdit]
11
+ def self.normalize: (Array[TextEdit] edits) -> Array[TextEdit]
12
+
13
+ # @rbs (Array[TextEdit] ordered) -> Array[TextEdit]
14
+ private def self.merge_adjacent: (Array[TextEdit] ordered) -> Array[TextEdit]
15
+
16
+ # @rbs (Array[TextEdit] normalized, TextEdit previous, TextEdit edit) -> void
17
+ private def self.merge_with_previous: (Array[TextEdit] normalized, TextEdit previous, TextEdit edit) -> void
18
+
19
+ attr_reader start: Integer
20
+
21
+ attr_reader delete_length: Integer
22
+
23
+ attr_reader insert_text: String
24
+
25
+ # @rbs (start: Integer, delete_length: Integer, insert_text: String) -> void
26
+ def initialize: (start: Integer, delete_length: Integer, insert_text: String) -> void
27
+
28
+ # @rbs () -> Range[Integer]
29
+ def range: () -> Range[Integer]
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,50 @@
1
+ # Generated from lib/ibex/runtime/cst/typed_node.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Runtime
5
+ module CST
6
+ # Grammar-generated typed view over one Red syntax node.
7
+ class TypedNode
8
+ type element = SyntaxNode | SyntaxToken
9
+
10
+ attr_reader node: SyntaxNode
11
+
12
+ # @rbs (SyntaxNode node) -> void
13
+ def initialize: (SyntaxNode node) -> void
14
+
15
+ # @rbs () -> Integer
16
+ def kind: () -> Integer
17
+
18
+ # @rbs () -> String
19
+ def kind_name: () -> String
20
+
21
+ # @rbs (Integer index) -> element
22
+ def child_at_slot: (Integer index) -> element
23
+
24
+ # @rbs (Integer index) -> SyntaxNode
25
+ def node_at_slot: (Integer index) -> SyntaxNode
26
+
27
+ # @rbs (Integer index) -> SyntaxToken
28
+ def token_at_slot: (Integer index) -> SyntaxToken
29
+
30
+ # @rbs () -> Array[element]
31
+ def deconstruct: () -> Array[element]
32
+
33
+ # @rbs (Array[Symbol]?) -> Hash[Symbol, untyped]
34
+ def deconstruct_keys: (Array[Symbol]?) -> Hash[Symbol, untyped]
35
+
36
+ # @rbs () -> String
37
+ def to_source: () -> String
38
+
39
+ # Flatten a lowered repetition helper and enumerate elements or separators.
40
+ # @rbs (Integer index, separated: bool, ?separators: bool) -> Enumerator[element, void]
41
+ def list_items: (Integer index, separated: bool, ?separators: bool) -> Enumerator[element, void]
42
+
43
+ private
44
+
45
+ # @rbs (SyntaxNode current, Integer helper_kind, Array[element] result) -> void
46
+ def flatten_list: (SyntaxNode current, Integer helper_kind, Array[element] result) -> void
47
+ end
48
+ end
49
+ end
50
+ end