kumi-parser 0.0.21 → 0.0.23
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.
- checksums.yaml +4 -4
- data/lib/kumi/parser/direct_parser.rb +38 -19
- data/lib/kumi/parser/token_metadata.rb +5 -0
- data/lib/kumi/parser/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a93347db05aac0a7ae24208706f40fd65586b4b7bb4872ce21443db80d21e9ed
|
4
|
+
data.tar.gz: ecfbe7e5722cbfcbc16066e95f8b6a5c42d49e5d1ea50f06029072ef27fbec08
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 790e663404df430cf385eda58bea125a8467e1b587e6d4e98f4975b9ef125a61c5eadf19ac4398be543a2a17d251a3c1e091727e42b9599bc2c25135dda3017c
|
7
|
+
data.tar.gz: 5d32509d9b747d267fc2b2787c94484d434d88ced020f831b9230a866a60a51f95f34655c436c125a71f017f9dfae5feeedaeb5ad8420987626081d2d79b7071
|
@@ -61,10 +61,12 @@ module Kumi
|
|
61
61
|
trait_declarations = []
|
62
62
|
|
63
63
|
skip_comments_and_newlines
|
64
|
-
while %i[value trait].include?(current_token.type)
|
64
|
+
while %i[value trait let].include?(current_token.type)
|
65
65
|
case current_token.type
|
66
66
|
when :value
|
67
67
|
value_declarations << parse_value_declaration
|
68
|
+
when :let
|
69
|
+
value_declarations << parse_let_value_declaration
|
68
70
|
when :trait
|
69
71
|
trait_declarations << parse_trait_declaration
|
70
72
|
end
|
@@ -252,12 +254,8 @@ module Kumi
|
|
252
254
|
|
253
255
|
# Value declaration: 'value :name, expression' or 'value :name do ... end'
|
254
256
|
def parse_value_declaration
|
255
|
-
begin
|
256
257
|
value_token = expect_token(:value)
|
257
258
|
name_token = expect_token(:symbol)
|
258
|
-
rescue => e
|
259
|
-
binding.pry
|
260
|
-
end
|
261
259
|
|
262
260
|
if current_token.type == :do
|
263
261
|
expression = parse_cascade_expression
|
@@ -273,6 +271,25 @@ module Kumi
|
|
273
271
|
)
|
274
272
|
end
|
275
273
|
|
274
|
+
def parse_let_value_declaration
|
275
|
+
let_token = expect_token(:let)
|
276
|
+
name_token = expect_token(:symbol)
|
277
|
+
|
278
|
+
if current_token.type == :do
|
279
|
+
expression = parse_cascade_expression
|
280
|
+
else
|
281
|
+
expect_token(:comma)
|
282
|
+
expression = parse_expression
|
283
|
+
end
|
284
|
+
|
285
|
+
Kumi::Syntax::ValueDeclaration.new(
|
286
|
+
name_token.value,
|
287
|
+
expression,
|
288
|
+
hints:{inline: true},
|
289
|
+
loc: let_token.location
|
290
|
+
)
|
291
|
+
end
|
292
|
+
|
276
293
|
# Trait declaration: 'trait :name, expression'
|
277
294
|
def parse_trait_declaration
|
278
295
|
trait_token = expect_token(:trait)
|
@@ -604,28 +621,30 @@ module Kumi
|
|
604
621
|
end
|
605
622
|
|
606
623
|
def parse_hash_pair
|
607
|
-
|
608
|
-
key = case key_token_type
|
609
|
-
when :label, :string
|
610
|
-
value = current_token.value.to_sym if key_token_type == :label
|
611
|
-
advance
|
612
|
-
Kumi::Syntax::Literal.new(value, loc: current_token.location)
|
613
|
-
else
|
614
|
-
raise_parse_error("Hash keys must be symbols (:key) or strings (\"key\"), got #{current_token.type}")
|
615
|
-
end
|
624
|
+
key_token = current_token
|
616
625
|
|
617
|
-
|
626
|
+
key_value =
|
627
|
+
case key_token.type
|
628
|
+
when :label then key_token.value.to_sym # render:
|
629
|
+
when :string then key_token.value # "0" => ...
|
630
|
+
when :symbol then key_token.value.to_sym # optional support for :foo => ...
|
631
|
+
else
|
632
|
+
raise_parse_error('Hash keys must be symbols (:key) or strings ("key")')
|
633
|
+
end
|
618
634
|
|
619
|
-
|
620
|
-
|
635
|
+
advance
|
636
|
+
key = Kumi::Syntax::Literal.new(key_value, loc: key_token.location)
|
637
|
+
|
638
|
+
skip_comments_and_newlines
|
639
|
+
if current_token.type == :arrow
|
621
640
|
advance
|
622
641
|
else
|
623
|
-
|
642
|
+
# Only labels may omit => (Ruby-style `key:`)
|
643
|
+
raise_parse_error("Expected '=>' in hash pair") unless key_token.type == :label
|
624
644
|
end
|
625
645
|
|
626
646
|
skip_comments_and_newlines
|
627
647
|
value = parse_expression
|
628
|
-
|
629
648
|
[key, value]
|
630
649
|
end
|
631
650
|
|
@@ -90,6 +90,10 @@ module Kumi
|
|
90
90
|
expects_expression: true,
|
91
91
|
declaration_type: :value
|
92
92
|
},
|
93
|
+
let: {
|
94
|
+
category: :keyword,
|
95
|
+
expects_expression: true
|
96
|
+
},
|
93
97
|
trait: {
|
94
98
|
category: :keyword,
|
95
99
|
expects_expression: true,
|
@@ -404,6 +408,7 @@ module Kumi
|
|
404
408
|
'schema' => :schema,
|
405
409
|
'input' => :input,
|
406
410
|
'value' => :value,
|
411
|
+
'let' => :let,
|
407
412
|
'trait' => :trait,
|
408
413
|
'do' => :do,
|
409
414
|
'end' => :end,
|
data/lib/kumi/parser/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kumi-parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.23
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kumi Team
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-10-
|
11
|
+
date: 2025-10-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: parslet
|