ibex-runtime 0.2.0 → 0.4.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 (71) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +100 -272
  3. data/lib/ibex/runtime/cst/green/node.rb +1 -1
  4. data/lib/ibex/runtime/cst/green/token.rb +1 -1
  5. data/lib/ibex/runtime/cst/green/trivia.rb +1 -1
  6. data/lib/ibex/runtime/cst/incremental/blender.rb +1 -1
  7. data/lib/ibex/runtime/cst/incremental/lexed_syntax.rb +2 -2
  8. data/lib/ibex/runtime/cst/incremental/parse_memo.rb +2 -2
  9. data/lib/ibex/runtime/cst/incremental/relexer.rb +3 -0
  10. data/lib/ibex/runtime/cst/incremental/session.rb +26 -2
  11. data/lib/ibex/runtime/cst/parse_result.rb +7 -7
  12. data/lib/ibex/runtime/cst/serialize.rb +6 -3
  13. data/lib/ibex/runtime/cst/syntax_node.rb +4 -4
  14. data/lib/ibex/runtime/cst/syntax_token.rb +5 -5
  15. data/lib/ibex/runtime/cst/typed_node.rb +1 -1
  16. data/lib/ibex/runtime/cst/validator.rb +40 -30
  17. data/lib/ibex/runtime/embedded_source.rb +98 -0
  18. data/lib/ibex/runtime/event.rb +7 -4
  19. data/lib/ibex/runtime/event_jsonl_tracer.rb +1 -1
  20. data/lib/ibex/runtime/event_sanitizer.rb +32 -26
  21. data/lib/ibex/runtime/generated_lexer.rb +23 -16
  22. data/lib/ibex/runtime/lexer_input.rb +1 -1
  23. data/lib/ibex/runtime/location_span.rb +15 -15
  24. data/lib/ibex/runtime/observation.rb +1 -1
  25. data/lib/ibex/runtime/parser.rb +309 -191
  26. data/lib/ibex/runtime/parser_sync_recovery.rb +19 -15
  27. data/lib/ibex/runtime/repair.rb +36 -5
  28. data/lib/ibex/runtime/repair_priority_queue.rb +10 -6
  29. data/lib/ibex/runtime/repair_search.rb +92 -29
  30. data/lib/ibex/runtime/syntax_repair.rb +490 -0
  31. data/lib/ibex/runtime/syntax_session.rb +416 -0
  32. data/lib/ibex/runtime/table_format.rb +1 -1
  33. data/lib/ibex/runtime/version.rb +1 -1
  34. data/lib/ibex/runtime.rb +2 -1
  35. data/lib/ibex/tables/compact.rb +16 -12
  36. data/lib/ibex/tables/compact_actions.rb +45 -33
  37. data/lib/ibex/tables/compact_productions.rb +18 -15
  38. data/sig/ibex/runtime/cst/green/node.rbs +2 -2
  39. data/sig/ibex/runtime/cst/green/token.rbs +2 -2
  40. data/sig/ibex/runtime/cst/green/trivia.rbs +2 -2
  41. data/sig/ibex/runtime/cst/incremental/blender.rbs +2 -2
  42. data/sig/ibex/runtime/cst/incremental/lexed_syntax.rbs +3 -3
  43. data/sig/ibex/runtime/cst/incremental/parse_memo.rbs +4 -4
  44. data/sig/ibex/runtime/cst/incremental/session.rbs +8 -2
  45. data/sig/ibex/runtime/cst/parse_result.rbs +9 -9
  46. data/sig/ibex/runtime/cst/serialize.rbs +8 -6
  47. data/sig/ibex/runtime/cst/syntax_node.rbs +6 -6
  48. data/sig/ibex/runtime/cst/syntax_token.rbs +10 -10
  49. data/sig/ibex/runtime/cst/typed_node.rbs +2 -2
  50. data/sig/ibex/runtime/cst/validator.rbs +46 -42
  51. data/sig/ibex/runtime/embedded_source.rbs +21 -0
  52. data/sig/ibex/runtime/event.rbs +7 -5
  53. data/sig/ibex/runtime/event_jsonl_tracer.rbs +1 -1
  54. data/sig/ibex/runtime/event_sanitizer.rbs +50 -44
  55. data/sig/ibex/runtime/generated_lexer.rbs +31 -24
  56. data/sig/ibex/runtime/lexer_input.rbs +2 -2
  57. data/sig/ibex/runtime/location_span.rbs +28 -28
  58. data/sig/ibex/runtime/observation.rbs +2 -2
  59. data/sig/ibex/runtime/parser.rbs +266 -252
  60. data/sig/ibex/runtime/parser_sync_recovery.rbs +15 -15
  61. data/sig/ibex/runtime/repair.rbs +28 -8
  62. data/sig/ibex/runtime/repair_priority_queue.rbs +9 -7
  63. data/sig/ibex/runtime/repair_search.rbs +38 -19
  64. data/sig/ibex/runtime/syntax_repair.rbs +177 -0
  65. data/sig/ibex/runtime/syntax_session.rbs +186 -0
  66. data/sig/ibex/tables/compact.rbs +12 -12
  67. data/sig/ibex/tables/compact_actions.rbs +10 -17
  68. data/sig/ibex/tables/compact_productions.rbs +19 -19
  69. metadata +12 -6
  70. data/lib/ibex/runtime/jsonl_tracer.rb +0 -75
  71. data/sig/ibex/runtime/jsonl_tracer.rbs +0 -42
@@ -5,7 +5,7 @@ module Ibex
5
5
  module Tables
6
6
  # Production metadata with parallel primitive arrays for the direct parser
7
7
  # and a compatible Array-of-Hash surface for generic runtime consumers.
8
- class CompactProductions < Array #[Hash[Symbol, untyped]]
8
+ class CompactProductions < Array #[Hash[Symbol, Object?]]
9
9
  VALUES_ACTION = 1 #: Integer
10
10
  BORROWED_VALUES_ACTION = 2 #: Integer
11
11
  LOCATION_ACTION = 4 #: Integer
@@ -24,17 +24,20 @@ module Ibex
24
24
  attr_reader :flags #: Array[Integer]
25
25
 
26
26
  class << self
27
- # @rbs (Array[Hash[Symbol, untyped]] productions) -> CompactProductions
27
+ # @rbs (Array[Hash[Symbol, Object?]] productions) -> CompactProductions
28
28
  def build(productions)
29
29
  lhs_ids = [] #: Array[Integer]
30
30
  lengths = [] #: Array[Integer]
31
31
  actions = [] #: Array[Symbol?]
32
32
  flags = [] #: Array[Integer]
33
- metadata = {} #: Hash[Integer, Hash[Symbol, untyped]]
33
+ metadata = {} #: Hash[Integer, Hash[Symbol, Object?]]
34
34
  productions.each_with_index do |production, index|
35
- lhs_ids << production.fetch(:lhs)
36
- lengths << production.fetch(:length)
37
- actions << production[:action]
35
+ lhs = production.fetch(:lhs) #: Integer
36
+ length = production.fetch(:length) #: Integer
37
+ action = production[:action] #: Symbol?
38
+ lhs_ids << lhs
39
+ lengths << length
40
+ actions << action
38
41
  flags << flags_for(production)
39
42
  extra = production.except(
40
43
  :lhs, :length, :action, :values_action, :borrowed_values_action, :location_action, :composition_action
@@ -45,7 +48,7 @@ module Ibex
45
48
  end
46
49
 
47
50
  # @rbs (String lhs_ids, String lengths, String flags,
48
- # ?metadata: Hash[Integer, Hash[Symbol, untyped]]) -> CompactProductions
51
+ # ?metadata: Hash[Integer, Hash[Symbol, Object?]]) -> CompactProductions
49
52
  def packed(lhs_ids, lengths, flags, metadata: {})
50
53
  decoded_flags = PackedIntegers.decode_required(flags)
51
54
  actions = decoded_flags.each_index.map do |index|
@@ -62,7 +65,7 @@ module Ibex
62
65
 
63
66
  private
64
67
 
65
- # @rbs (Hash[Symbol, untyped] production) -> Integer
68
+ # @rbs (Hash[Symbol, Object?] production) -> Integer
66
69
  def flags_for(production)
67
70
  value = 0
68
71
  value |= VALUES_ACTION if production[:values_action] == true
@@ -74,7 +77,7 @@ module Ibex
74
77
  end
75
78
 
76
79
  # @rbs (lhs_ids: Array[Integer], lengths: Array[Integer], actions: Array[Symbol?],
77
- # flags: Array[Integer], ?metadata: Hash[Integer, Hash[Symbol, untyped]]) -> void
80
+ # flags: Array[Integer], ?metadata: Hash[Integer, Hash[Symbol, Object?]]) -> void
78
81
  def initialize(lhs_ids:, lengths:, actions:, flags:, metadata: {})
79
82
  size = lhs_ids.length
80
83
  unless lengths.length == size && actions.length == size && flags.length == size
@@ -98,21 +101,21 @@ module Ibex
98
101
 
99
102
  private
100
103
 
101
- # @rbs (untyped value, String name) -> Integer
104
+ # @rbs (Object? value, String name) -> Integer
102
105
  def nonnegative_integer!(value, name)
103
106
  return value if value.is_a?(Integer) && !value.negative?
104
107
 
105
108
  raise ArgumentError, "compact production #{name} must be a nonnegative Integer"
106
109
  end
107
110
 
108
- # @rbs (untyped value) -> Symbol?
111
+ # @rbs (Object? value) -> Symbol?
109
112
  def action!(value)
110
113
  return value if value.nil? || value.is_a?(Symbol)
111
114
 
112
115
  raise ArgumentError, "compact production action must be a Symbol or nil"
113
116
  end
114
117
 
115
- # @rbs (untyped value) -> Integer
118
+ # @rbs (Object? value) -> Integer
116
119
  def flags!(value)
117
120
  return value if value.is_a?(Integer) && !value.negative? && value.nobits?(~VALID_FLAGS)
118
121
 
@@ -135,7 +138,7 @@ module Ibex
135
138
  end
136
139
  end
137
140
 
138
- # @rbs (Hash[Integer, Hash[Symbol, untyped]] metadata, Integer size) -> void
141
+ # @rbs (Hash[Integer, Hash[Symbol, Object?]] metadata, Integer size) -> void
139
142
  def validate_metadata!(metadata, size)
140
143
  metadata.each do |index, entry|
141
144
  unless index.is_a?(Integer) && index.between?(0, size - 1) && entry.is_a?(Hash)
@@ -147,9 +150,9 @@ module Ibex
147
150
  end
148
151
  end
149
152
 
150
- # @rbs (Integer index, Hash[Symbol, untyped]? metadata) -> Hash[Symbol, untyped]
153
+ # @rbs (Integer index, Hash[Symbol, Object?]? metadata) -> Hash[Symbol, Object?]
151
154
  def decode(index, metadata)
152
- entry = {} #: Hash[Symbol, untyped]
155
+ entry = {} #: Hash[Symbol, Object?]
153
156
  entry[:lhs] = @lhs_ids[index]
154
157
  entry[:length] = @lengths[index]
155
158
  entry[:action] = @actions[index]
@@ -31,8 +31,8 @@ module Ibex
31
31
  # @rbs () -> String
32
32
  def to_source: () -> String
33
33
 
34
- # @rbs (untyped other) -> bool
35
- def ==: (untyped other) -> bool
34
+ # @rbs (Object? other) -> bool
35
+ def ==: (Object? other) -> bool
36
36
 
37
37
  alias eql? ==
38
38
 
@@ -44,8 +44,8 @@ module Ibex
44
44
  # @rbs () -> String
45
45
  def to_source: () -> String
46
46
 
47
- # @rbs (untyped other) -> bool
48
- def ==: (untyped other) -> bool
47
+ # @rbs (Object? other) -> bool
48
+ def ==: (Object? other) -> bool
49
49
 
50
50
  alias eql? ==
51
51
 
@@ -19,8 +19,8 @@ module Ibex
19
19
  # @rbs () -> String
20
20
  def to_source: () -> String
21
21
 
22
- # @rbs (untyped other) -> bool
23
- def ==: (untyped other) -> bool
22
+ # @rbs (Object? other) -> bool
23
+ def ==: (Object? other) -> bool
24
24
 
25
25
  alias eql? ==
26
26
  end
@@ -64,8 +64,8 @@ module Ibex
64
64
  def initialize: (old_root: SyntaxNode, parse_memo: ParseMemo, lexed: LexedSyntax, edits: Array[TextEdit], max_decomposed_nodes: Integer, ?enabled: bool) -> void
65
65
 
66
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)
67
+ # @rbs (Integer state) -> (Array[Object?] | ReusableSubtree | false)
68
+ def next_for_state: (Integer state) -> (Array[Object?] | ReusableSubtree | false)
69
69
 
70
70
  # @rbs () -> Integer
71
71
  def token_count: () -> Integer
@@ -5,12 +5,12 @@ module Ibex
5
5
  module CST
6
6
  # One complete generated-lexer pass, including the explicit EOF token.
7
7
  class LexedSyntax
8
- attr_reader raw_tokens: Array[Array[untyped]]
8
+ attr_reader raw_tokens: Array[Array[Object?]]
9
9
 
10
10
  attr_reader memo: TokenMemo
11
11
 
12
- # @rbs (raw_tokens: Array[Array[untyped]], memo: TokenMemo) -> void
13
- def initialize: (raw_tokens: Array[Array[untyped]], memo: TokenMemo) -> void
12
+ # @rbs (raw_tokens: Array[Array[Object?]], memo: TokenMemo) -> void
13
+ def initialize: (raw_tokens: Array[Array[Object?]], memo: TokenMemo) -> void
14
14
 
15
15
  # @rbs (TokenMemo replacement) -> LexedSyntax
16
16
  def with_memo: (TokenMemo replacement) -> LexedSyntax
@@ -27,14 +27,14 @@ module Ibex
27
27
  # @rbs (Integer preorder_index, GreenNode | GreenToken element) -> Array[Integer?]
28
28
  def slice: (Integer preorder_index, GreenNode | GreenToken element) -> Array[Integer?]
29
29
 
30
- # @rbs (Hash[Symbol, untyped] tables) -> bool
31
- def compatible?: (Hash[Symbol, untyped] tables) -> bool
30
+ # @rbs (Hash[Symbol, String | Integer] tables) -> bool
31
+ def compatible?: (Hash[Symbol, String | Integer] tables) -> bool
32
32
 
33
33
  # @rbs () -> Integer
34
34
  def estimated_bytes: () -> Integer
35
35
 
36
- # @rbs () -> Hash[String, untyped]
37
- def to_h: () -> Hash[String, untyped]
36
+ # @rbs () -> Hash[String, Integer | Array[Integer?]]
37
+ def to_h: () -> Hash[String, Integer | Array[Integer?]]
38
38
 
39
39
  # Lightweight construction tree flattened once when a parse completes.
40
40
  class Entry
@@ -31,8 +31,9 @@ module Ibex
31
31
 
32
32
  @resource_limits: ResourceLimits
33
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
34
+ # @rbs (Class parser_class, SourceText source_text, ?resource_limits: ResourceLimits?,
35
+ # ?blender: bool, ?event_observer: Proc?) -> void
36
+ def initialize: (Class parser_class, SourceText source_text, ?resource_limits: ResourceLimits?, ?blender: bool, ?event_observer: Proc?) -> void
36
37
 
37
38
  # Apply edits expressed against the current source and return syntax only.
38
39
  # @rbs (Array[TextEdit] edits) -> SyntaxResult
@@ -45,6 +46,11 @@ module Ibex
45
46
  # @rbs (Observation::Subscription subscription) -> bool
46
47
  def unobserve: (Observation::Subscription subscription) -> bool
47
48
 
49
+ # Whether the last completed edit discarded all incremental reuse and
50
+ # reparsed the current source from a fresh token stream.
51
+ # @rbs () -> bool
52
+ def last_full_fallback?: () -> bool
53
+
48
54
  private
49
55
 
50
56
  # @rbs (Array[TextEdit] edits) -> SyntaxResult
@@ -5,31 +5,31 @@ module Ibex
5
5
  module CST
6
6
  # Immutable result returned by syntax-aware parser entry points.
7
7
  class ParseResult
8
- attr_reader value: untyped
8
+ attr_reader value: Object
9
9
 
10
10
  attr_reader syntax_root: SyntaxNode
11
11
 
12
- attr_reader diagnostics: Array[untyped]
12
+ attr_reader diagnostics: Array[Object]
13
13
 
14
- # @rbs (value: untyped, syntax_root: SyntaxNode, diagnostics: Array[untyped]) -> void
15
- def initialize: (value: untyped, syntax_root: SyntaxNode, diagnostics: Array[untyped]) -> void
14
+ # @rbs (value: Object, syntax_root: SyntaxNode, diagnostics: Array[Object]) -> void
15
+ def initialize: (value: Object, syntax_root: SyntaxNode, diagnostics: Array[Object]) -> void
16
16
  end
17
17
 
18
18
  # Syntax-only result used by incremental sessions.
19
19
  class SyntaxResult
20
20
  attr_reader syntax_root: SyntaxNode
21
21
 
22
- attr_reader diagnostics: Array[untyped]
22
+ attr_reader diagnostics: Array[Object]
23
23
 
24
24
  attr_reader reused_ratio: Float
25
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
26
+ # @rbs (syntax_root: SyntaxNode, diagnostics: Array[Object], reused_ratio: Float) -> void
27
+ def initialize: (syntax_root: SyntaxNode, diagnostics: Array[Object], reused_ratio: Float) -> void
28
28
  end
29
29
  end
30
30
 
31
- ParseResult: untyped
31
+ ParseResult: singleton(CST::ParseResult)
32
32
 
33
- SyntaxResult: untyped
33
+ SyntaxResult: singleton(CST::SyntaxResult)
34
34
  end
35
35
  end
@@ -8,6 +8,8 @@ module Ibex
8
8
 
9
9
  # Stable JSON serialization for `ibex_cst` schema version 1.
10
10
  module Serialize
11
+ type json_value = String | Integer | bool | nil | Array[json_value] | Hash[String, json_value]
12
+
11
13
  SCHEMA_VERSION: Integer
12
14
 
13
15
  # @rbs (SyntaxNode | SerializedTree value, ?grammar_digest: String?, ?table_format: Integer?,
@@ -22,14 +24,14 @@ module Ibex
22
24
  # state_count: Integer?, production_count: Integer?, memo: ParseMemo?) -> SerializedTree
23
25
  def self?.serialization_tree: (SyntaxNode | SerializedTree value, grammar_digest: String?, table_format: Integer?, state_count: Integer?, production_count: Integer?, memo: ParseMemo?) -> SerializedTree
24
26
 
25
- # @rbs (Kind kinds) -> Hash[String, untyped]
26
- def self?.kinds_document: (Kind kinds) -> Hash[String, untyped]
27
+ # @rbs (Kind kinds) -> Hash[String, json_value]
28
+ def self?.kinds_document: (Kind kinds) -> Hash[String, json_value]
27
29
 
28
- # @rbs (GreenNode | GreenToken element) -> Hash[String, untyped]
29
- def self?.element_document: (GreenNode | GreenToken element) -> Hash[String, untyped]
30
+ # @rbs (GreenNode | GreenToken element) -> Hash[String, json_value]
31
+ def self?.element_document: (GreenNode | GreenToken element) -> Hash[String, json_value]
30
32
 
31
- # @rbs (GreenTrivia trivia) -> Array[untyped]
32
- def self?.trivia_document: (GreenTrivia trivia) -> Array[untyped]
33
+ # @rbs (GreenTrivia trivia) -> Array[json_value]
34
+ def self?.trivia_document: (GreenTrivia trivia) -> Array[json_value]
33
35
 
34
36
  # @rbs (String text) -> (String | Hash[String, String])
35
37
  def self?.encode_text: (String text) -> (String | Hash[String, String])
@@ -155,17 +155,17 @@ module Ibex
155
155
  # @rbs (SyntaxNode other) -> bool
156
156
  def same_node?: (SyntaxNode other) -> bool
157
157
 
158
- # @rbs (untyped other) -> bool
159
- def ==: (untyped other) -> bool
158
+ # @rbs (Object? other) -> bool
159
+ def ==: (Object? other) -> bool
160
160
 
161
161
  # @rbs () -> Array[element]
162
162
  def deconstruct: () -> Array[element]
163
163
 
164
- # @rbs (Array[Symbol]?) -> Hash[Symbol, untyped]
165
- def deconstruct_keys: (Array[Symbol]?) -> Hash[Symbol, untyped]
164
+ # @rbs (Array[Symbol]?) -> Hash[Symbol, Object?]
165
+ def deconstruct_keys: (Array[Symbol]?) -> Hash[Symbol, Object?]
166
166
 
167
- # @rbs () -> Hash[Symbol, untyped]
168
- def to_h: () -> Hash[Symbol, untyped]
167
+ # @rbs () -> Hash[Symbol, Object?]
168
+ def to_h: () -> Hash[Symbol, Object?]
169
169
 
170
170
  # @rbs (Integer source_offset) -> element?
171
171
  def child_covering_offset: (Integer source_offset) -> element?
@@ -40,8 +40,8 @@ module Ibex
40
40
  # @rbs () -> Array[GreenTrivia]
41
41
  def leading_trivia: () -> Array[GreenTrivia]
42
42
 
43
- # @rbs () -> Array[untyped]
44
- def children: () -> Array[untyped]
43
+ # @rbs () -> Array[Object?]
44
+ def children: () -> Array[Object?]
45
45
 
46
46
  # @rbs () -> String
47
47
  def full_text: () -> String
@@ -90,17 +90,17 @@ module Ibex
90
90
  # @rbs (SyntaxToken other) -> bool
91
91
  def same_node?: (SyntaxToken other) -> bool
92
92
 
93
- # @rbs (untyped other) -> bool
94
- def ==: (untyped other) -> bool
93
+ # @rbs (Object? other) -> bool
94
+ def ==: (Object? other) -> bool
95
95
 
96
- # @rbs () -> Array[untyped]
97
- def deconstruct: () -> Array[untyped]
96
+ # @rbs () -> Array[Object?]
97
+ def deconstruct: () -> Array[Object?]
98
98
 
99
- # @rbs (Array[Symbol]?) -> Hash[Symbol, untyped]
100
- def deconstruct_keys: (Array[Symbol]?) -> Hash[Symbol, untyped]
99
+ # @rbs (Array[Symbol]?) -> Hash[Symbol, Object?]
100
+ def deconstruct_keys: (Array[Symbol]?) -> Hash[Symbol, Object?]
101
101
 
102
- # @rbs () -> Hash[Symbol, untyped]
103
- def to_h: () -> Hash[Symbol, untyped]
102
+ # @rbs () -> Hash[Symbol, Object?]
103
+ def to_h: () -> Hash[Symbol, Object?]
104
104
 
105
105
  private
106
106
 
@@ -30,8 +30,8 @@ module Ibex
30
30
  # @rbs () -> Array[element]
31
31
  def deconstruct: () -> Array[element]
32
32
 
33
- # @rbs (Array[Symbol]?) -> Hash[Symbol, untyped]
34
- def deconstruct_keys: (Array[Symbol]?) -> Hash[Symbol, untyped]
33
+ # @rbs (Array[Symbol]?) -> Hash[Symbol, Object?]
34
+ def deconstruct_keys: (Array[Symbol]?) -> Hash[Symbol, Object?]
35
35
 
36
36
  # @rbs () -> String
37
37
  def to_source: () -> String
@@ -3,18 +3,22 @@
3
3
  module Ibex
4
4
  module Runtime
5
5
  module CST
6
+ type json_value = String | Integer | Float | bool | nil | Array[json_value] | Hash[String, json_value]
7
+
8
+ type json_object = Hash[String, json_value]
9
+
6
10
  # Structured failure raised for an invalid or incompatible CST document.
7
11
  class ValidationError < StandardError
8
12
  attr_reader code: Symbol
9
13
 
10
14
  attr_reader path: String
11
15
 
12
- attr_reader expected: untyped
16
+ attr_reader expected: json_value
13
17
 
14
- attr_reader actual: untyped
18
+ attr_reader actual: json_value
15
19
 
16
- # @rbs (code: Symbol, path: String, message: String, ?expected: untyped, ?actual: untyped) -> void
17
- def initialize: (code: Symbol, path: String, message: String, ?expected: untyped, ?actual: untyped) -> void
20
+ # @rbs (code: Symbol, path: String, message: String, ?expected: json_value, ?actual: json_value) -> void
21
+ def initialize: (code: Symbol, path: String, message: String, ?expected: json_value, ?actual: json_value) -> void
18
22
  end
19
23
 
20
24
  # Validates schema-v1 CST documents while rebuilding all derived Green data.
@@ -30,27 +34,27 @@ module Ibex
30
34
  # ?production_count: Integer?) -> SerializedTree
31
35
  def self?.validate: (String source, ?grammar_digest: String?, ?state_count: Integer?, ?production_count: Integer?) -> SerializedTree
32
36
 
33
- # @rbs (untyped value) -> Kind
34
- def self?.load_kinds: (untyped value) -> Kind
37
+ # @rbs (json_value value) -> Kind
38
+ def self?.load_kinds: (json_value value) -> Kind
35
39
 
36
- # @rbs (untyped value, GreenNode root, String digest, Integer state_count, Integer production_count,
40
+ # @rbs (json_value value, GreenNode root, String digest, Integer state_count, Integer production_count,
37
41
  # expected_state_count: Integer?, expected_production_count: Integer?) -> ParseMemo?
38
- def self?.load_memo: (untyped value, GreenNode root, String digest, Integer state_count, Integer production_count, expected_state_count: Integer?, expected_production_count: Integer?) -> ParseMemo?
42
+ def self?.load_memo: (json_value value, GreenNode root, String digest, Integer state_count, Integer production_count, expected_state_count: Integer?, expected_production_count: Integer?) -> ParseMemo?
39
43
 
40
- # @rbs (untyped value, Integer state_count) -> Array[Integer?]
41
- def self?.load_memo_states: (untyped value, Integer state_count) -> Array[Integer?]
44
+ # @rbs (json_value value, Integer state_count) -> Array[Integer?]
45
+ def self?.load_memo_states: (json_value value, Integer state_count) -> Array[Integer?]
42
46
 
43
47
  # @rbs (Array[Integer?] states, GreenNode root) -> void
44
48
  def self?.validate_memo_length!: (Array[Integer?] states, GreenNode root) -> void
45
49
 
46
- # @rbs (untyped value, Kind kinds, String path) -> (GreenNode | GreenToken)
47
- def self?.load_element: (untyped value, Kind kinds, String path) -> (GreenNode | GreenToken)
50
+ # @rbs (json_value value, Kind kinds, String path) -> (GreenNode | GreenToken)
51
+ def self?.load_element: (json_value value, Kind kinds, String path) -> (GreenNode | GreenToken)
48
52
 
49
- # @rbs (untyped value, Kind kinds, String path) -> Array[GreenTrivia]
50
- def self?.load_trivia: (untyped value, Kind kinds, String path) -> Array[GreenTrivia]
53
+ # @rbs (json_value value, Kind kinds, String path) -> Array[GreenTrivia]
54
+ def self?.load_trivia: (json_value value, Kind kinds, String path) -> Array[GreenTrivia]
51
55
 
52
- # @rbs (untyped value, String path) -> String
53
- def self?.decode_text: (untyped value, String path) -> String
56
+ # @rbs (json_value value, String path) -> String
57
+ def self?.decode_text: (json_value value, String path) -> String
54
58
 
55
59
  # @rbs (GreenNode | GreenToken element, String path) -> void
56
60
  def self?.validate_derived!: (GreenNode | GreenToken element, String path) -> void
@@ -58,35 +62,35 @@ module Ibex
58
62
  # @rbs (Integer kind, Kind kinds, String path) -> void
59
63
  def self?.validate_kind!: (Integer kind, Kind kinds, String path) -> void
60
64
 
61
- # @rbs (untyped value, String path) -> Hash[String, untyped]
62
- def self?.object!: (untyped value, String path) -> Hash[String, untyped]
65
+ # @rbs (json_value value, String path) -> json_object
66
+ def self?.object!: (json_value value, String path) -> json_object
63
67
 
64
- # @rbs (untyped value, String path) -> Array[untyped]
65
- def self?.array!: (untyped value, String path) -> Array[untyped]
68
+ # @rbs (json_value value, String path) -> Array[json_value]
69
+ def self?.array!: (json_value value, String path) -> Array[json_value]
66
70
 
67
- # @rbs (untyped value, String path) -> String
68
- def self?.string!: (untyped value, String path) -> String
71
+ # @rbs (json_value value, String path) -> String
72
+ def self?.string!: (json_value value, String path) -> String
69
73
 
70
- # @rbs (untyped value, String path) -> Integer
71
- def self?.nonnegative_integer!: (untyped value, String path) -> Integer
74
+ # @rbs (json_value value, String path) -> Integer
75
+ def self?.nonnegative_integer!: (json_value value, String path) -> Integer
72
76
 
73
- # @rbs (untyped value, String path) -> Integer
74
- def self?.positive_integer!: (untyped value, String path) -> Integer
77
+ # @rbs (json_value value, String path) -> Integer
78
+ def self?.positive_integer!: (json_value value, String path) -> Integer
75
79
 
76
- # @rbs (untyped value, String path) -> Symbol
77
- def self?.trivia_policy!: (untyped value, String path) -> Symbol
80
+ # @rbs (json_value value, String path) -> Symbol
81
+ def self?.trivia_policy!: (json_value value, String path) -> Symbol
78
82
 
79
- # @rbs (untyped value, String path) -> Integer
80
- def self?.flags!: (untyped value, String path) -> Integer
83
+ # @rbs (json_value value, String path) -> Integer
84
+ def self?.flags!: (json_value value, String path) -> Integer
81
85
 
82
- # @rbs (untyped value, String path) -> Array[Integer]
83
- def self?.integer_pair!: (untyped value, String path) -> Array[Integer]
86
+ # @rbs (json_value value, String path) -> Array[Integer]
87
+ def self?.integer_pair!: (json_value value, String path) -> Array[Integer]
84
88
 
85
- # @rbs (untyped value, String path) -> Hash[String, Integer]
86
- def self?.string_integer_map!: (untyped value, String path) -> Hash[String, Integer]
89
+ # @rbs (json_value value, String path) -> Hash[String, Integer]
90
+ def self?.string_integer_map!: (json_value value, String path) -> Hash[String, Integer]
87
91
 
88
- # @rbs (untyped value, String path) -> Hash[Integer, Integer]
89
- def self?.integer_integer_map!: (untyped value, String path) -> Hash[Integer, Integer]
92
+ # @rbs (json_value value, String path) -> Hash[Integer, Integer]
93
+ def self?.integer_integer_map!: (json_value value, String path) -> Hash[Integer, Integer]
90
94
 
91
95
  # @rbs (Kind::metadata metadata) -> void
92
96
  def self?.validate_kind_metadata!: (Kind::metadata metadata) -> void
@@ -94,14 +98,14 @@ module Ibex
94
98
  # @rbs (Array[Integer] range, Integer limit, String path) -> void
95
99
  def self?.validate_kind_range!: (Array[Integer] range, Integer limit, String path) -> void
96
100
 
97
- # @rbs (Hash[String, untyped] value, Array[String] expected, String path) -> void
98
- def self?.exact_keys!: (Hash[String, untyped] value, Array[String] expected, String path) -> void
101
+ # @rbs (json_object value, Array[String] expected, String path) -> void
102
+ def self?.exact_keys!: (json_object value, Array[String] expected, String path) -> void
99
103
 
100
- # @rbs (Hash[String, untyped] value, String key, untyped expected, String path) -> void
101
- def self?.value!: (Hash[String, untyped] value, String key, untyped expected, String path) -> void
104
+ # @rbs (json_object value, String key, json_value expected, String path) -> void
105
+ def self?.value!: (json_object value, String key, json_value expected, String path) -> void
102
106
 
103
- # @rbs (Symbol code, String path, String message, ?expected: untyped, ?actual: untyped) -> bot
104
- def self?.fail_validation: (Symbol code, String path, String message, ?expected: untyped, ?actual: untyped) -> bot
107
+ # @rbs (Symbol code, String path, String message, ?expected: json_value, ?actual: json_value) -> bot
108
+ def self?.fail_validation: (Symbol code, String path, String message, ?expected: json_value, ?actual: json_value) -> bot
105
109
  end
106
110
  end
107
111
  end
@@ -0,0 +1,21 @@
1
+ # Generated from lib/ibex/runtime/embedded_source.rb with RBS::Inline
2
+
3
+ module Ibex
4
+ module Runtime
5
+ # Assembles the installed runtime into one dependency-free Ruby source.
6
+ module EmbeddedSource
7
+ FILES: Array[String]
8
+
9
+ REQUIRE_RELATIVE: ::Regexp
10
+
11
+ # @rbs () -> String
12
+ def self.render: () -> String
13
+
14
+ # @rbs (Array[String] paths) -> void
15
+ def self.validate_manifest!: (Array[String] paths) -> void
16
+
17
+ # @rbs (String path) -> String
18
+ def self.source: (String path) -> String
19
+ end
20
+ end
21
+ end
@@ -4,6 +4,8 @@ module Ibex
4
4
  module Runtime
5
5
  # One immutable versioned parser observation.
6
6
  class Event
7
+ type json_value = String | Integer | Float | bool | nil | Array[json_value] | Hash[String, json_value]
8
+
7
9
  SCHEMA_VERSION: Integer
8
10
 
9
11
  IDENTIFIER: String
@@ -14,13 +16,13 @@ module Ibex
14
16
 
15
17
  attr_reader sequence: Integer
16
18
 
17
- attr_reader data: Hash[String, untyped]
19
+ attr_reader data: Hash[String, json_value]
18
20
 
19
- # @rbs (type: Symbol, sequence: Integer, data: Hash[untyped, untyped]) -> void
20
- def initialize: (type: Symbol, sequence: Integer, data: Hash[untyped, untyped]) -> void
21
+ # @rbs (type: Symbol, sequence: Integer, data: Hash[Object?, Object?]) -> void
22
+ def initialize: (type: Symbol, sequence: Integer, data: Hash[Object?, Object?]) -> void
21
23
 
22
- # @rbs () -> Hash[String, untyped]
23
- def to_h: () -> Hash[String, untyped]
24
+ # @rbs () -> Hash[String, json_value]
25
+ def to_h: () -> Hash[String, json_value]
24
26
  end
25
27
  end
26
28
  end
@@ -5,7 +5,7 @@ module Ibex
5
5
  # Emits schema-v1 immutable runtime events as JSON Lines.
6
6
  class EventJSONLTracer
7
7
  interface _EventTraceOutput
8
- def puts: (String) -> untyped
8
+ def puts: (String) -> void
9
9
  end
10
10
 
11
11
  attr_reader parser: Parser