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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 219a0ee4cbe1b140e1adb5f885b95764258bad4ac416ad361167dcdf5464e64b
4
- data.tar.gz: db323360955a244c7f6ddbf6cdcd1ae333fc21aa039ce0364ac143789d17f5c5
3
+ metadata.gz: a93347db05aac0a7ae24208706f40fd65586b4b7bb4872ce21443db80d21e9ed
4
+ data.tar.gz: ecfbe7e5722cbfcbc16066e95f8b6a5c42d49e5d1ea50f06029072ef27fbec08
5
5
  SHA512:
6
- metadata.gz: c937eee31a97be97fa71e4830db4f40122acb1aae720fb1dba78a67b1039cc21cd9042d3ae0884d67cda3dbddcf47e6e193a805218d2f68f93946f90649060a2
7
- data.tar.gz: 21b2ae87d652bc2ffb66489ea0a504033baaa65c6d74ee9168a7a8420d38de3d04c005b1ae21acc10c49656a3c8dee242a2e47425e007cdb3058b389c40de5f1
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
- key_token_type = current_token.type
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
- skip_comments_and_newlines
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
- case current_token.type
620
- when :arrow
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
- raise_parse_error("Expected '=>' in hash pair") unless key_token_type == :label
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,
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Kumi
4
4
  module Parser
5
- VERSION = '0.0.21'
5
+ VERSION = '0.0.23'
6
6
  end
7
7
  end
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.21
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-02 00:00:00.000000000 Z
11
+ date: 2025-10-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parslet