git.delta.rocks / jrsonnet / refs/commits / b89fdd32bd3a

difftreelog

refactor split literals and trivials

nyvtyzzzYaroslav Bolyukin2026-05-08parent: #d543e94.patch.diff
in: master

39 files changed

modifiedcrates/jrsonnet-ir-parser/src/lib.rsdiffbeforeafterboth
--- a/crates/jrsonnet-ir-parser/src/lib.rs
+++ b/crates/jrsonnet-ir-parser/src/lib.rs
@@ -1,9 +1,9 @@
 use jrsonnet_gcmodule::Acyclic;
 use jrsonnet_ir::{
 	ArgsDesc, AssertExpr, AssertStmt, BinaryOp, BinaryOpType, BindSpec, CompSpec, Destruct, Expr,
-	ExprParam, ExprParams, FieldMember, FieldName, ForSpecData, IStr, IfElse, IfSpecData,
-	ImportKind, IndexPart, LiteralType, Member, NumValue, ObjBody, ObjComp, ObjMembers, Slice,
-	SliceDesc, Source, Span, Spanned, UnaryOpType, Visibility, unescape,
+	ExprParam, ExprParams, FieldMember, FieldName, ForSpecData, IStr, IdentityKind, IfElse,
+	IfSpecData, ImportKind, IndexPart, Member, NumValue, ObjBody, ObjComp, ObjMembers, Slice,
+	SliceDesc, Source, Span, Spanned, TrivialVal, UnaryOpType, Visibility, unescape,
 };
 use jrsonnet_lexer::{Lexeme, Lexer, Span as LexSpan, SyntaxKind, T, collect_lexed_str_block};
 
@@ -247,19 +247,6 @@
 	Ok(IStr::from(text))
 }
 
-fn literal(p: &mut Parser<'_>) -> Option<(Span, LiteralType)> {
-	let t = match p.peek() {
-		T![self] => LiteralType::This,
-		T![super] => LiteralType::Super,
-		T!['$'] => LiteralType::Dollar,
-		T![null] => LiteralType::Null,
-		T![true] => LiteralType::True,
-		T![false] => LiteralType::False,
-		_ => return None,
-	};
-	Some((p.eat_any_spanned(), t))
-}
-
 fn assert_stmt(p: &mut Parser<'_>) -> Result<AssertStmt> {
 	p.eat(T![assert])?;
 	let assertion = spanned(p, expr)?;
@@ -688,18 +675,30 @@
 
 #[allow(clippy::too_many_lines)]
 fn expr_basic(p: &mut Parser<'_>) -> Result<Expr> {
-	if let Some((span, lit)) = literal(p) {
-		return Ok(Expr::Literal(span, lit));
-	}
+	match p.peek() {
+		T![self] => Ok(Expr::Identity(p.eat_any_spanned(), IdentityKind::This)),
+		T![super] => Ok(Expr::Identity(p.eat_any_spanned(), IdentityKind::Super)),
+		T!['$'] => Ok(Expr::Identity(p.eat_any_spanned(), IdentityKind::Dollar)),
+		T![null] => {
+			p.eat_any();
+			Ok(Expr::Trivial(TrivialVal::Null))
+		}
+		T![true] => {
+			p.eat_any();
+			Ok(Expr::Trivial(TrivialVal::Bool(true)))
+		}
+		T![false] => {
+			p.eat_any();
+			Ok(Expr::Trivial(TrivialVal::Bool(false)))
+		}
 
-	match p.peek() {
 		SyntaxKind::STRING_DOUBLE
 		| SyntaxKind::STRING_SINGLE
 		| SyntaxKind::STRING_DOUBLE_VERBATIM
 		| SyntaxKind::STRING_SINGLE_VERBATIM
-		| SyntaxKind::STRING_BLOCK => Ok(Expr::Str(parse_string_content(p)?)),
+		| SyntaxKind::STRING_BLOCK => Ok(Expr::Trivial(TrivialVal::Str(parse_string_content(p)?))),
 
-		SyntaxKind::FLOAT => Ok(Expr::Num(parse_number(p)?)),
+		SyntaxKind::FLOAT => Ok(Expr::Trivial(TrivialVal::Num(parse_number(p)?))),
 
 		T!['('] => {
 			p.eat(T!['('])?;
@@ -832,7 +831,7 @@
 	if parts.is_empty() {
 		return;
 	}
-	let old = std::mem::replace(e, Expr::Str(IStr::empty()));
+	let old = std::mem::replace(e, Expr::Trivial(TrivialVal::Null));
 	*e = Expr::Index {
 		indexable: Box::new(old),
 		parts: std::mem::take(parts),
@@ -863,7 +862,7 @@
 					});
 				} else {
 					// ?.field
-					let id_spanned = spanned(p, |p| Ok(Expr::Str(ident(p)?)))?;
+					let id_spanned = spanned(p, |p| Ok(Expr::Trivial(TrivialVal::Str(ident(p)?))))?;
 					parts.push(IndexPart {
 						span: id_spanned.span,
 						value: id_spanned.value,
@@ -878,7 +877,7 @@
 
 		if p.at(T![.]) {
 			p.eat(T![.])?;
-			let id_spanned = spanned(p, |p| Ok(Expr::Str(ident(p)?)))?;
+			let id_spanned = spanned(p, |p| Ok(Expr::Trivial(TrivialVal::Str(ident(p)?))))?;
 			parts.push(IndexPart {
 				span: id_spanned.span,
 				value: id_spanned.value,
@@ -1058,7 +1057,10 @@
 pub fn string_to_expr(s: IStr, settings: &ParserSettings) -> Spanned<Expr> {
 	let len = u32::try_from(s.len()).expect("code size is limited by 4gb");
 
-	Spanned::new(Expr::Str(s), Span(settings.source.clone(), 0, len))
+	Spanned::new(
+		Expr::Trivial(TrivialVal::Str(s)),
+		Span(settings.source.clone(), 0, len),
+	)
 }
 
 #[cfg(test)]
modifiedcrates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__basic_math.snapdiffbeforeafterboth
--- a/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__basic_math.snap
+++ b/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__basic_math.snap
@@ -1,21 +1,28 @@
 ---
 source: crates/jrsonnet-ir-parser/src/lib.rs
+assertion_line: 1094
 expression: "format!(\"{v:#?}\")"
 ---
 BinaryOp(
     BinaryOp {
-        lhs: Num(
-            2.0,
+        lhs: Trivial(
+            Num(
+                2.0,
+            ),
         ),
         op: Add,
         rhs: BinaryOp(
             BinaryOp {
-                lhs: Num(
-                    2.0,
+                lhs: Trivial(
+                    Num(
+                        2.0,
+                    ),
                 ),
                 op: Mul,
-                rhs: Num(
-                    2.0,
+                rhs: Trivial(
+                    Num(
+                        2.0,
+                    ),
                 ),
             },
         ),
modifiedcrates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__basic_test.snapdiffbeforeafterboth
--- a/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__basic_test.snap
+++ b/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__basic_test.snap
@@ -1,35 +1,40 @@
 ---
 source: crates/jrsonnet-ir-parser/src/lib.rs
+assertion_line: 1082
 expression: "format!(\"{v:#?}\")"
 ---
 AssertExpr(
     AssertExpr {
         assert: AssertStmt {
             assertion: Index {
-                indexable: Literal(
-                    virtual:<test>:7-11,
-                    True,
+                indexable: Trivial(
+                    Bool(
+                        true,
+                    ),
                 ),
                 parts: [
                     IndexPart {
                         span: virtual:<test>:12-17,
-                        value: Literal(
-                            virtual:<test>:12-17,
-                            False,
+                        value: Trivial(
+                            Bool(
+                                false,
+                            ),
                         ),
                     },
                 ],
             } from virtual:<test>:7-18,
             message: Some(
-                Literal(
-                    virtual:<test>:21-26,
-                    False,
+                Trivial(
+                    Bool(
+                        false,
+                    ),
                 ),
             ),
         },
-        rest: Literal(
-            virtual:<test>:29-33,
-            True,
+        rest: Trivial(
+            Bool(
+                true,
+            ),
         ),
     },
 )
modifiedcrates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__error_expr.snapdiffbeforeafterboth
--- a/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__error_expr.snap
+++ b/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__error_expr.snap
@@ -1,10 +1,13 @@
 ---
 source: crates/jrsonnet-ir-parser/src/lib.rs
+assertion_line: 1161
 expression: "format!(\"{v:#?}\")"
 ---
 ErrorStmt(
     virtual:<test>:0-5,
-    Str(
-        "bad",
+    Trivial(
+        Str(
+            "bad",
+        ),
     ),
 )
modifiedcrates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__function_and_call.snapdiffbeforeafterboth
--- a/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__function_and_call.snap
+++ b/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__function_and_call.snap
@@ -1,5 +1,6 @@
 ---
 source: crates/jrsonnet-ir-parser/src/lib.rs
+assertion_line: 1118
 expression: "format!(\"{v:#?}\")"
 ---
 LocalExpr(
@@ -19,8 +20,10 @@
                             "y" from virtual:<test>:11-12,
                         ),
                         default: Some(
-                            Num(
-                                1.0,
+                            Trivial(
+                                Num(
+                                    1.0,
+                                ),
                             ),
                         ),
                     },
@@ -62,16 +65,20 @@
         ),
         ArgsDesc {
             unnamed: [
-                Num(
-                    2.0,
+                Trivial(
+                    Num(
+                        2.0,
+                    ),
                 ),
             ],
             names: [
                 "y",
             ],
             values: [
-                Num(
-                    3.0,
+                Trivial(
+                    Num(
+                        3.0,
+                    ),
                 ),
             ],
         } from virtual:<test>:26-34,
modifiedcrates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__if_then_else.snapdiffbeforeafterboth
--- a/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__if_then_else.snap
+++ b/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__if_then_else.snap
@@ -1,22 +1,28 @@
 ---
 source: crates/jrsonnet-ir-parser/src/lib.rs
+assertion_line: 1124
 expression: "format!(\"{v:#?}\")"
 ---
 IfElse(
     IfElse {
         cond: IfSpecData {
             span: virtual:<test>:0-2,
-            cond: Literal(
-                virtual:<test>:3-7,
-                True,
+            cond: Trivial(
+                Bool(
+                    true,
+                ),
             ),
         },
-        cond_then: Num(
-            1.0,
+        cond_then: Trivial(
+            Num(
+                1.0,
+            ),
         ),
         cond_else: Some(
-            Num(
-                2.0,
+            Trivial(
+                Num(
+                    2.0,
+                ),
             ),
         ),
     },
modifiedcrates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__imports.snapdiffbeforeafterboth
--- a/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__imports.snap
+++ b/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__imports.snap
@@ -1,25 +1,32 @@
 ---
 source: crates/jrsonnet-ir-parser/src/lib.rs
+assertion_line: 1130
 expression: "format!(\"{v:#?}\")"
 ---
 Arr(
     [
         Import(
             Normal from virtual:<test>:1-7,
-            Str(
-                "a",
+            Trivial(
+                Str(
+                    "a",
+                ),
             ),
         ),
         Import(
             Str from virtual:<test>:13-22,
-            Str(
-                "b",
+            Trivial(
+                Str(
+                    "b",
+                ),
             ),
         ),
         Import(
             Bin from virtual:<test>:28-37,
-            Str(
-                "c",
+            Trivial(
+                Str(
+                    "c",
+                ),
             ),
         ),
     ],
modifiedcrates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__index_and_suffix.snapdiffbeforeafterboth
--- a/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__index_and_suffix.snap
+++ b/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__index_and_suffix.snap
@@ -1,5 +1,6 @@
 ---
 source: crates/jrsonnet-ir-parser/src/lib.rs
+assertion_line: 1143
 expression: "format!(\"{v:#?}\")"
 ---
 Index {
@@ -11,16 +12,20 @@
             parts: [
                 IndexPart {
                     span: virtual:<test>:4-8,
-                    value: Str(
-                        "test",
+                    value: Trivial(
+                        Str(
+                            "test",
+                        ),
                     ),
                 },
             ],
         },
         ArgsDesc {
             unnamed: [
-                Num(
-                    2.0,
+                Trivial(
+                    Num(
+                        2.0,
+                    ),
                 ),
             ],
             names: [],
@@ -31,14 +36,18 @@
     parts: [
         IndexPart {
             span: virtual:<test>:12-17,
-            value: Str(
-                "field",
+            value: Trivial(
+                Str(
+                    "field",
+                ),
             ),
         },
         IndexPart {
             span: virtual:<test>:18-19,
-            value: Num(
-                0.0,
+            value: Trivial(
+                Num(
+                    0.0,
+                ),
             ),
         },
     ],
modifiedcrates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__literals.snapdiffbeforeafterboth
--- a/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__literals.snap
+++ b/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__literals.snap
@@ -1,30 +1,32 @@
 ---
 source: crates/jrsonnet-ir-parser/src/lib.rs
+assertion_line: 1088
 expression: "format!(\"{v:#?}\")"
 ---
 Arr(
     [
-        Literal(
-            virtual:<test>:1-5,
+        Trivial(
             Null,
         ),
-        Literal(
-            virtual:<test>:7-11,
-            True,
+        Trivial(
+            Bool(
+                true,
+            ),
         ),
-        Literal(
-            virtual:<test>:13-18,
-            False,
+        Trivial(
+            Bool(
+                false,
+            ),
         ),
-        Literal(
+        Identity(
             virtual:<test>:20-24,
             This,
         ),
-        Literal(
+        Identity(
             virtual:<test>:26-31,
             Super,
         ),
-        Literal(
+        Identity(
             virtual:<test>:33-34,
             Dollar,
         ),
modifiedcrates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__obj_extend.snapdiffbeforeafterboth
--- a/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__obj_extend.snap
+++ b/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__obj_extend.snap
@@ -1,5 +1,6 @@
 ---
 source: crates/jrsonnet-ir-parser/src/lib.rs
+assertion_line: 1149
 expression: "format!(\"{v:#?}\")"
 ---
 ObjExtend(
@@ -24,8 +25,10 @@
                     plus: false,
                     params: None,
                     visibility: Normal,
-                    value: Num(
-                        1.0,
+                    value: Trivial(
+                        Num(
+                            1.0,
+                        ),
                     ),
                 },
             ],
modifiedcrates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__object.snapdiffbeforeafterboth
--- a/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__object.snap
+++ b/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__object.snap
@@ -1,5 +1,6 @@
 ---
 source: crates/jrsonnet-ir-parser/src/lib.rs
+assertion_line: 1112
 expression: "format!(\"{v:#?}\")"
 ---
 Obj(
@@ -15,8 +16,10 @@
                     plus: false,
                     params: None,
                     visibility: Normal,
-                    value: Num(
-                        1.0,
+                    value: Trivial(
+                        Num(
+                            1.0,
+                        ),
                     ),
                 },
                 FieldMember {
@@ -26,8 +29,10 @@
                     plus: false,
                     params: None,
                     visibility: Hidden,
-                    value: Num(
-                        2.0,
+                    value: Trivial(
+                        Num(
+                            2.0,
+                        ),
                     ),
                 },
                 FieldMember {
@@ -37,8 +42,10 @@
                     plus: false,
                     params: None,
                     visibility: Unhide,
-                    value: Num(
-                        3.0,
+                    value: Trivial(
+                        Num(
+                            3.0,
+                        ),
                     ),
                 },
             ],
modifiedcrates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__peg_snapshots@array_comp.jsonnet.snapdiffbeforeafterboth
--- a/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__peg_snapshots@array_comp.jsonnet.snap
+++ b/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__peg_snapshots@array_comp.jsonnet.snap
@@ -1,5 +1,6 @@
 ---
 source: crates/jrsonnet-ir-parser/src/lib.rs
+assertion_line: 1184
 expression: v
 input_file: crates/jrsonnet-peg-parser/src/tests/array_comp.jsonnet
 ---
@@ -14,8 +15,10 @@
                     parts: [
                         IndexPart {
                             span: virtual:<test>:7-15,
-                            value: Str(
-                                "deepJoin",
+                            value: Trivial(
+                                Str(
+                                    "deepJoin",
+                                ),
                             ),
                         },
                     ],
modifiedcrates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__peg_snapshots@basic_math.jsonnet.snapdiffbeforeafterboth
--- a/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__peg_snapshots@basic_math.jsonnet.snap
+++ b/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__peg_snapshots@basic_math.jsonnet.snap
@@ -1,5 +1,6 @@
 ---
 source: crates/jrsonnet-ir-parser/src/lib.rs
+assertion_line: 1184
 expression: v
 input_file: crates/jrsonnet-peg-parser/src/tests/basic_math.jsonnet
 ---
@@ -7,18 +8,24 @@
     [
         BinaryOp(
             BinaryOp {
-                lhs: Num(
-                    2.0,
+                lhs: Trivial(
+                    Num(
+                        2.0,
+                    ),
                 ),
                 op: Add,
                 rhs: BinaryOp(
                     BinaryOp {
-                        lhs: Num(
-                            2.0,
+                        lhs: Trivial(
+                            Num(
+                                2.0,
+                            ),
                         ),
                         op: Mul,
-                        rhs: Num(
-                            2.0,
+                        rhs: Trivial(
+                            Num(
+                                2.0,
+                            ),
                         ),
                     },
                 ),
@@ -26,18 +33,24 @@
         ),
         BinaryOp(
             BinaryOp {
-                lhs: Num(
-                    2.0,
+                lhs: Trivial(
+                    Num(
+                        2.0,
+                    ),
                 ),
                 op: Add,
                 rhs: BinaryOp(
                     BinaryOp {
-                        lhs: Num(
-                            2.0,
+                        lhs: Trivial(
+                            Num(
+                                2.0,
+                            ),
                         ),
                         op: Mul,
-                        rhs: Num(
-                            2.0,
+                        rhs: Trivial(
+                            Num(
+                                2.0,
+                            ),
                         ),
                     },
                 ),
@@ -47,24 +60,32 @@
             BinaryOp {
                 lhs: BinaryOp(
                     BinaryOp {
-                        lhs: Num(
-                            2.0,
+                        lhs: Trivial(
+                            Num(
+                                2.0,
+                            ),
                         ),
                         op: Add,
-                        rhs: Num(
-                            2.0,
+                        rhs: Trivial(
+                            Num(
+                                2.0,
+                            ),
                         ),
                     },
                 ),
                 op: Add,
                 rhs: BinaryOp(
                     BinaryOp {
-                        lhs: Num(
-                            2.0,
+                        lhs: Trivial(
+                            Num(
+                                2.0,
+                            ),
                         ),
                         op: Mul,
-                        rhs: Num(
-                            2.0,
+                        rhs: Trivial(
+                            Num(
+                                2.0,
+                            ),
                         ),
                     },
                 ),
@@ -72,24 +93,32 @@
         ),
         BinaryOp(
             BinaryOp {
-                lhs: Num(
-                    2.0,
+                lhs: Trivial(
+                    Num(
+                        2.0,
+                    ),
                 ),
                 op: Add,
                 rhs: BinaryOp(
                     BinaryOp {
-                        lhs: Num(
-                            2.0,
+                        lhs: Trivial(
+                            Num(
+                                2.0,
+                            ),
                         ),
                         op: Add,
                         rhs: BinaryOp(
                             BinaryOp {
-                                lhs: Num(
-                                    2.0,
+                                lhs: Trivial(
+                                    Num(
+                                        2.0,
+                                    ),
                                 ),
                                 op: Mul,
-                                rhs: Num(
-                                    2.0,
+                                rhs: Trivial(
+                                    Num(
+                                        2.0,
+                                    ),
                                 ),
                             },
                         ),
@@ -99,18 +128,24 @@
         ),
         BinaryOp(
             BinaryOp {
-                lhs: Num(
-                    2.0,
+                lhs: Trivial(
+                    Num(
+                        2.0,
+                    ),
                 ),
                 op: Add,
                 rhs: BinaryOp(
                     BinaryOp {
-                        lhs: Num(
-                            3.0,
+                        lhs: Trivial(
+                            Num(
+                                3.0,
+                            ),
                         ),
                         op: Mul,
-                        rhs: Num(
-                            4.0,
+                        rhs: Trivial(
+                            Num(
+                                4.0,
+                            ),
                         ),
                     },
                 ),
modifiedcrates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__peg_snapshots@comment_eof.jsonnet.snapdiffbeforeafterboth
--- a/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__peg_snapshots@comment_eof.jsonnet.snap
+++ b/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__peg_snapshots@comment_eof.jsonnet.snap
@@ -1,5 +1,6 @@
 ---
 source: crates/jrsonnet-ir-parser/src/lib.rs
+assertion_line: 1184
 expression: v
 input_file: crates/jrsonnet-peg-parser/src/tests/comment_eof.jsonnet
 ---
@@ -16,8 +17,10 @@
                     plus: false,
                     params: None,
                     visibility: Normal,
-                    value: Num(
-                        1.0,
+                    value: Trivial(
+                        Num(
+                            1.0,
+                        ),
                     ),
                 },
             ],
modifiedcrates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__peg_snapshots@default_nondefault.jsonnet.snapdiffbeforeafterboth
--- a/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__peg_snapshots@default_nondefault.jsonnet.snap
+++ b/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__peg_snapshots@default_nondefault.jsonnet.snap
@@ -1,5 +1,6 @@
 ---
 source: crates/jrsonnet-ir-parser/src/lib.rs
+assertion_line: 1184
 expression: v
 input_file: crates/jrsonnet-peg-parser/src/tests/default_nondefault.jsonnet
 ---
@@ -14,8 +15,10 @@
                             "foo" from virtual:<test>:8-11,
                         ),
                         default: Some(
-                            Str(
-                                "foo",
+                            Trivial(
+                                Str(
+                                    "foo",
+                                ),
                             ),
                         ),
                     },
@@ -44,14 +47,12 @@
                 ),
                 binds_len: 2,
             },
-            value: Literal(
-                virtual:<test>:28-32,
+            value: Trivial(
                 Null,
             ),
         },
     ],
-    Literal(
-        virtual:<test>:34-38,
+    Trivial(
         Null,
     ),
 )
modifiedcrates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__peg_snapshots@imports.jsonnet.snapdiffbeforeafterboth
--- a/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__peg_snapshots@imports.jsonnet.snap
+++ b/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__peg_snapshots@imports.jsonnet.snap
@@ -1,5 +1,6 @@
 ---
 source: crates/jrsonnet-ir-parser/src/lib.rs
+assertion_line: 1184
 expression: v
 input_file: crates/jrsonnet-peg-parser/src/tests/imports.jsonnet
 ---
@@ -7,20 +8,26 @@
     [
         Import(
             Normal from virtual:<test>:2-8,
-            Str(
-                "hello",
+            Trivial(
+                Str(
+                    "hello",
+                ),
             ),
         ),
         Import(
             Str from virtual:<test>:18-27,
-            Str(
-                "garnish.txt",
+            Trivial(
+                Str(
+                    "garnish.txt",
+                ),
             ),
         ),
         Import(
             Bin from virtual:<test>:43-52,
-            Str(
-                "garnish.bin",
+            Trivial(
+                Str(
+                    "garnish.bin",
+                ),
             ),
         ),
     ],
modifiedcrates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__peg_snapshots@multiline.jsonnet.snapdiffbeforeafterboth
--- a/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__peg_snapshots@multiline.jsonnet.snap
+++ b/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__peg_snapshots@multiline.jsonnet.snap
@@ -1,21 +1,30 @@
 ---
 source: crates/jrsonnet-ir-parser/src/lib.rs
+assertion_line: 1184
 expression: v
 input_file: crates/jrsonnet-peg-parser/src/tests/multiline.jsonnet
 ---
 Arr(
     [
-        Str(
-            "Hello world!\na\n",
+        Trivial(
+            Str(
+                "Hello world!\na\n",
+            ),
         ),
-        Str(
-            "Hello world!\na\n",
+        Trivial(
+            Str(
+                "Hello world!\na\n",
+            ),
         ),
-        Str(
-            "Hello world!\n\ta\n",
+        Trivial(
+            Str(
+                "Hello world!\n\ta\n",
+            ),
         ),
-        Str(
-            "Hello world!\n a\n",
+        Trivial(
+            Str(
+                "Hello world!\n a\n",
+            ),
         ),
     ],
 )
modifiedcrates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__peg_snapshots@reserved.jsonnet.snapdiffbeforeafterboth
--- a/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__peg_snapshots@reserved.jsonnet.snap
+++ b/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__peg_snapshots@reserved.jsonnet.snap
@@ -1,12 +1,12 @@
 ---
 source: crates/jrsonnet-ir-parser/src/lib.rs
+assertion_line: 1184
 expression: v
 input_file: crates/jrsonnet-peg-parser/src/tests/reserved.jsonnet
 ---
 Arr(
     [
-        Literal(
-            virtual:<test>:2-6,
+        Trivial(
             Null,
         ),
         Var(
modifiedcrates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__peg_snapshots@slice.jsonnet.snapdiffbeforeafterboth
--- a/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__peg_snapshots@slice.jsonnet.snap
+++ b/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__peg_snapshots@slice.jsonnet.snap
@@ -1,5 +1,6 @@
 ---
 source: crates/jrsonnet-ir-parser/src/lib.rs
+assertion_line: 1184
 expression: v
 input_file: crates/jrsonnet-peg-parser/src/tests/slice.jsonnet
 ---
@@ -12,8 +13,10 @@
                 ),
                 slice: SliceDesc {
                     start: Some(
-                        Num(
-                            1.0,
+                        Trivial(
+                            Num(
+                                1.0,
+                            ),
                         ) from virtual:<test>:4-5,
                     ),
                     end: None,
@@ -28,8 +31,10 @@
                 ),
                 slice: SliceDesc {
                     start: Some(
-                        Num(
-                            1.0,
+                        Trivial(
+                            Num(
+                                1.0,
+                            ),
                         ) from virtual:<test>:11-12,
                     ),
                     end: None,
@@ -45,8 +50,10 @@
                 slice: SliceDesc {
                     start: None,
                     end: Some(
-                        Num(
-                            1.0,
+                        Trivial(
+                            Num(
+                                1.0,
+                            ),
                         ) from virtual:<test>:20-21,
                     ),
                     step: None,
@@ -62,8 +69,10 @@
                     start: None,
                     end: None,
                     step: Some(
-                        Num(
-                            1.0,
+                        Trivial(
+                            Num(
+                                1.0,
+                            ),
                         ) from virtual:<test>:29-30,
                     ),
                 },
@@ -83,8 +92,10 @@
                                     "len" from virtual:<test>:38-41,
                                 ),
                                 op: Sub,
-                                rhs: Num(
-                                    1.0,
+                                rhs: Trivial(
+                                    Num(
+                                        1.0,
+                                    ),
                                 ),
                             },
                         ) from virtual:<test>:38-45,
modifiedcrates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__peg_snapshots@string_escaping.jsonnet.snapdiffbeforeafterboth
--- a/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__peg_snapshots@string_escaping.jsonnet.snap
+++ b/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__peg_snapshots@string_escaping.jsonnet.snap
@@ -1,24 +1,35 @@
 ---
 source: crates/jrsonnet-ir-parser/src/lib.rs
+assertion_line: 1184
 expression: v
 input_file: crates/jrsonnet-peg-parser/src/tests/string_escaping.jsonnet
 ---
 Arr(
     [
-        Str(
-            "Hello, \"world\"!",
+        Trivial(
+            Str(
+                "Hello, \"world\"!",
+            ),
         ),
-        Str(
-            "Hello 'world'!",
+        Trivial(
+            Str(
+                "Hello 'world'!",
+            ),
         ),
-        Str(
-            "\\\\",
+        Trivial(
+            Str(
+                "\\\\",
+            ),
         ),
-        Str(
-            "Hello\nWorld",
+        Trivial(
+            Str(
+                "Hello\nWorld",
+            ),
         ),
-        Str(
-            "Hello\\n\"World\"",
+        Trivial(
+            Str(
+                "Hello\\n\"World\"",
+            ),
         ),
     ],
 )
modifiedcrates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__peg_snapshots@subexp.jsonnet.snapdiffbeforeafterboth
--- a/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__peg_snapshots@subexp.jsonnet.snap
+++ b/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__peg_snapshots@subexp.jsonnet.snap
@@ -1,5 +1,6 @@
 ---
 source: crates/jrsonnet-ir-parser/src/lib.rs
+assertion_line: 1184
 expression: v
 input_file: crates/jrsonnet-peg-parser/src/tests/subexp.jsonnet
 ---
@@ -22,8 +23,10 @@
                             into: Full(
                                 "x" from virtual:<test>:11-12,
                             ),
-                            value: Num(
-                                1.0,
+                            value: Trivial(
+                                Num(
+                                    1.0,
+                                ),
                             ),
                         },
                     ],
modifiedcrates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__peg_snapshots@suffix.jsonnet.snapdiffbeforeafterboth
--- a/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__peg_snapshots@suffix.jsonnet.snap
+++ b/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__peg_snapshots@suffix.jsonnet.snap
@@ -1,5 +1,6 @@
 ---
 source: crates/jrsonnet-ir-parser/src/lib.rs
+assertion_line: 1184
 expression: v
 input_file: crates/jrsonnet-peg-parser/src/tests/suffix.jsonnet
 ---
@@ -12,8 +13,10 @@
             parts: [
                 IndexPart {
                     span: virtual:<test>:6-10,
-                    value: Str(
-                        "test",
+                    value: Trivial(
+                        Str(
+                            "test",
+                        ),
                     ),
                 },
             ],
@@ -24,8 +27,10 @@
             ),
             ArgsDesc {
                 unnamed: [
-                    Num(
-                        2.0,
+                    Trivial(
+                        Num(
+                            2.0,
+                        ),
                     ),
                 ],
                 names: [],
@@ -41,16 +46,20 @@
                 parts: [
                     IndexPart {
                         span: virtual:<test>:24-28,
-                        value: Str(
-                            "test",
+                        value: Trivial(
+                            Str(
+                                "test",
+                            ),
                         ),
                     },
                 ],
             },
             ArgsDesc {
                 unnamed: [
-                    Num(
-                        2.0,
+                    Trivial(
+                        Num(
+                            2.0,
+                        ),
                     ),
                 ],
                 names: [],
modifiedcrates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__slice.snapdiffbeforeafterboth
--- a/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__slice.snap
+++ b/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__slice.snap
@@ -1,5 +1,6 @@
 ---
 source: crates/jrsonnet-ir-parser/src/lib.rs
+assertion_line: 1167
 expression: "format!(\"{v:#?}\")"
 ---
 Arr(
@@ -11,8 +12,10 @@
                 ),
                 slice: SliceDesc {
                     start: Some(
-                        Num(
-                            1.0,
+                        Trivial(
+                            Num(
+                                1.0,
+                            ),
                         ) from virtual:<test>:3-4,
                     ),
                     end: None,
@@ -27,8 +30,10 @@
                 ),
                 slice: SliceDesc {
                     start: Some(
-                        Num(
-                            1.0,
+                        Trivial(
+                            Num(
+                                1.0,
+                            ),
                         ) from virtual:<test>:10-11,
                     ),
                     end: None,
@@ -44,8 +49,10 @@
                 slice: SliceDesc {
                     start: None,
                     end: Some(
-                        Num(
-                            1.0,
+                        Trivial(
+                            Num(
+                                1.0,
+                            ),
                         ) from virtual:<test>:19-20,
                     ),
                     step: None,
@@ -61,8 +68,10 @@
                     start: None,
                     end: None,
                     step: Some(
-                        Num(
-                            1.0,
+                        Trivial(
+                            Num(
+                                1.0,
+                            ),
                         ) from virtual:<test>:28-29,
                     ),
                 },
modifiedcrates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__strings.snapdiffbeforeafterboth
--- a/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__strings.snap
+++ b/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__strings.snap
@@ -1,20 +1,29 @@
 ---
 source: crates/jrsonnet-ir-parser/src/lib.rs
+assertion_line: 1106
 expression: "format!(\"{v:#?}\")"
 ---
 Arr(
     [
-        Str(
-            "hello",
+        Trivial(
+            Str(
+                "hello",
+            ),
         ),
-        Str(
-            "world",
+        Trivial(
+            Str(
+                "world",
+            ),
         ),
-        Str(
-            "raw\"str",
+        Trivial(
+            Str(
+                "raw\"str",
+            ),
         ),
-        Str(
-            "raw'str",
+        Trivial(
+            Str(
+                "raw'str",
+            ),
         ),
     ],
 )
modifiedcrates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__underscore_numbers.snapdiffbeforeafterboth
--- a/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__underscore_numbers.snap
+++ b/crates/jrsonnet-ir-parser/src/snapshots/jrsonnet_ir_parser__tests__underscore_numbers.snap
@@ -1,17 +1,24 @@
 ---
 source: crates/jrsonnet-ir-parser/src/lib.rs
+assertion_line: 1100
 expression: "format!(\"{v:#?}\")"
 ---
 Arr(
     [
-        Num(
-            1000.0,
+        Trivial(
+            Num(
+                1000.0,
+            ),
         ),
-        Num(
-            1000.0001,
+        Trivial(
+            Num(
+                1000.0001,
+            ),
         ),
-        Num(
-            100000000000.0,
+        Trivial(
+            Num(
+                100000000000.0,
+            ),
         ),
     ],
 )
modifiedcrates/jrsonnet-ir/src/expr.rsdiffbeforeafterboth
after · crates/jrsonnet-ir/src/expr.rs
1use std::{2	fmt::{self, Debug, Display},3	ops::{Deref, RangeInclusive},4};56use jrsonnet_gcmodule::Acyclic;7use jrsonnet_interner::IStr;89use crate::{10	NumValue,11	function::{FunctionSignature, ParamDefault, ParamName, ParamParse},12	source::Source,13};1415#[derive(Debug, PartialEq, Acyclic)]16pub enum FieldName {17	/// {fixed: 2}18	Fixed(IStr),19	/// {["dyn"+"amic"]: 3}20	Dyn(Expr),21}2223#[derive(Debug, Clone, Copy, PartialEq, Eq, Acyclic)]24#[repr(u8)]25pub enum Visibility {26	/// :27	Normal,28	/// ::29	Hidden,30	/// :::31	Unhide,32}3334#[derive(Debug, Clone, PartialEq, Acyclic)]35pub enum TrivialVal {36	Null,37	Bool(bool),38	Num(NumValue),39	Str(IStr),40}4142impl Visibility {43	pub fn is_visible(&self) -> bool {44		matches!(self, Self::Normal | Self::Unhide)45	}46}4748#[derive(Debug, PartialEq, Acyclic)]49pub struct AssertStmt {50	pub assertion: Spanned<Expr>,51	pub message: Option<Expr>,52}5354#[derive(Debug, PartialEq, Acyclic)]55pub struct FieldMember {56	pub name: Spanned<FieldName>,57	pub plus: bool,58	pub params: Option<ExprParams>,59	pub visibility: Visibility,60	pub value: Expr,61}6263#[derive(Debug, PartialEq, Acyclic)]64pub enum Member {65	Field(FieldMember),66	BindStmt(BindSpec),67	AssertStmt(AssertStmt),68}6970#[derive(Debug, Clone, Copy, PartialEq, Eq, Acyclic)]71pub enum UnaryOpType {72	Plus,73	Minus,74	BitNot,75	Not,76}7778impl Display for UnaryOpType {79	fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {80		use UnaryOpType::*;81		write!(82			f,83			"{}",84			match self {85				Plus => "+",86				Minus => "-",87				BitNot => "~",88				Not => "!",89			}90		)91	}92}9394#[derive(Debug, Clone, Copy, PartialEq, Eq, Acyclic)]95pub enum BinaryOpType {96	Mul,97	Div,9899	/// Implemented as intrinsic, put here for completeness100	Mod,101102	Add,103	Sub,104105	Lhs,106	Rhs,107108	Lt,109	Gt,110	Lte,111	Gte,112113	BitAnd,114	BitOr,115	BitXor,116117	Eq,118	Neq,119120	And,121	Or,122	#[cfg(feature = "exp-null-coaelse")]123	NullCoaelse,124125	// Equialent to std.objectHasEx(a, b, true)126	In,127}128129impl Display for BinaryOpType {130	fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {131		use BinaryOpType::*;132		write!(133			f,134			"{}",135			match self {136				Mul => "*",137				Div => "/",138				Mod => "%",139				Add => "+",140				Sub => "-",141				Lhs => "<<",142				Rhs => ">>",143				Lt => "<",144				Gt => ">",145				Lte => "<=",146				Gte => ">=",147				BitAnd => "&",148				BitOr => "|",149				BitXor => "^",150				Eq => "==",151				Neq => "!=",152				And => "&&",153				Or => "||",154				In => "in",155				#[cfg(feature = "exp-null-coaelse")]156				NullCoaelse => "??",157			}158		)159	}160}161162/// name, default value163#[derive(Debug, PartialEq, Acyclic)]164pub struct ExprParam {165	pub destruct: Destruct,166	pub default: Option<Expr>,167}168169/// Defined function parameters170#[derive(Debug, PartialEq, Acyclic)]171pub struct ExprParams {172	pub exprs: Vec<ExprParam>,173	pub signature: FunctionSignature,174	pub(crate) binds_len: usize,175}176impl ExprParams {177	pub fn len(&self) -> usize {178		self.exprs.len()179	}180	pub fn is_empty(&self) -> bool {181		self.exprs.is_empty()182	}183184	pub fn binds_len(&self) -> usize {185		self.binds_len186	}187	pub fn new(exprs: Vec<ExprParam>) -> Self {188		Self {189			signature: FunctionSignature::new(190				exprs191					.iter()192					.map(|p| {193						ParamParse::new(194							p.destruct.name(),195							ParamDefault::exists(p.default.is_some()),196						)197					})198					.collect(),199			),200			binds_len: exprs.iter().map(|v| v.destruct.binds_len()).sum(),201			exprs,202		}203	}204}205206#[derive(Debug, PartialEq, Acyclic)]207pub struct ArgsDesc {208	pub unnamed: Vec<Expr>,209	pub names: Vec<IStr>,210	pub values: Vec<Expr>,211}212impl ArgsDesc {213	pub fn new(unnamed: Vec<Expr>, names: Vec<IStr>, values: Vec<Expr>) -> Self {214		Self {215			unnamed,216			names,217			values,218		}219	}220}221222#[derive(Debug, PartialEq, Eq, Acyclic)]223pub enum DestructRest {224	/// ...rest225	Keep(IStr),226	/// ...227	Drop,228}229230#[derive(Debug, PartialEq, Acyclic)]231pub enum Destruct {232	Full(Spanned<IStr>),233	#[cfg(feature = "exp-destruct")]234	Skip,235	#[cfg(feature = "exp-destruct")]236	Array {237		start: Vec<Destruct>,238		rest: Option<DestructRest>,239		end: Vec<Destruct>,240	},241	#[cfg(feature = "exp-destruct")]242	Object {243		#[allow(clippy::type_complexity)]244		fields: Vec<(IStr, Option<Destruct>, Option<Spanned<Expr>>)>,245		rest: Option<DestructRest>,246	},247}248impl Destruct {249	/// Name of destructure, used for function parameter names250	pub fn name(&self) -> ParamName {251		match self {252			Self::Full(name) => ParamName::Named(name.value.clone()),253			#[cfg(feature = "exp-destruct")]254			_ => ParamName::Unnamed,255		}256	}257	pub fn binds_len(&self) -> usize {258		#[cfg(feature = "exp-destruct")]259		fn cap_rest(rest: &Option<DestructRest>) -> usize {260			match rest {261				Some(DestructRest::Keep(_)) => 1,262				Some(DestructRest::Drop) => 0,263				None => 0,264			}265		}266		match self {267			Self::Full(_) => 1,268			#[cfg(feature = "exp-destruct")]269			Self::Skip => 0,270			#[cfg(feature = "exp-destruct")]271			Self::Array { start, rest, end } => {272				start.iter().map(Destruct::binds_len).sum::<usize>()273					+ end.iter().map(Destruct::binds_len).sum::<usize>()274					+ cap_rest(rest)275			}276			#[cfg(feature = "exp-destruct")]277			Self::Object { fields, rest } => {278				let mut out = 0;279				for (_, into, _) in fields {280					match into {281						Some(v) => out += v.binds_len(),282						// Field is destructured to default name283						None => out += 1,284					}285				}286				out + cap_rest(rest)287			}288		}289	}290}291292#[derive(Debug, PartialEq, Acyclic)]293pub enum BindSpec {294	Field {295		into: Destruct,296		value: Expr,297	},298	Function {299		name: Spanned<IStr>,300		params: ExprParams,301		value: Expr,302	},303}304impl BindSpec {305	pub fn binds_len(&self) -> usize {306		match self {307			BindSpec::Field { into, .. } => into.binds_len(),308			BindSpec::Function { .. } => 1,309		}310	}311}312313#[derive(Debug, PartialEq, Acyclic)]314pub struct IfSpecData {315	pub span: Span,316	pub cond: Expr,317}318319#[derive(Debug, PartialEq, Acyclic)]320pub struct ForSpecData {321	pub destruct: Destruct,322	pub over: Expr,323}324325#[cfg(feature = "exp-object-iteration")]326#[derive(Debug, PartialEq, Acyclic)]327pub struct ForObjSpecData {328	pub key: IStr,329	pub visibility: Visibility,330	pub value: Destruct,331	pub over: Expr,332}333334#[derive(Debug, PartialEq, Acyclic)]335pub enum CompSpec {336	IfSpec(IfSpecData),337	ForSpec(ForSpecData),338	#[cfg(feature = "exp-object-iteration")]339	ForObjSpec(ForObjSpecData),340}341342#[derive(Debug, PartialEq, Acyclic)]343pub struct ObjComp {344	pub locals: Vec<BindSpec>,345	pub field: Box<FieldMember>,346	pub compspecs: Vec<CompSpec>,347}348349#[derive(Debug, PartialEq, Acyclic)]350pub struct ObjMembers {351	pub locals: Vec<BindSpec>,352	pub asserts: Vec<AssertStmt>,353	pub fields: Vec<FieldMember>,354}355356#[derive(Debug, PartialEq, Acyclic)]357pub enum ObjBody {358	MemberList(ObjMembers),359	ObjComp(ObjComp),360}361362/// Object identity reference: `self`, `super`, or `$`.#[derive(Debug, PartialEq, Eq, Clone, Copy, Acyclic)]363#[derive(Debug, PartialEq, Acyclic)]364pub enum IdentityKind {365	This,366	Super,367	Dollar,368}369370#[derive(Debug, PartialEq, Acyclic)]371pub struct SliceDesc {372	pub start: Option<Spanned<Expr>>,373	pub end: Option<Spanned<Expr>>,374	pub step: Option<Spanned<Expr>>,375}376377#[derive(Debug, PartialEq, Acyclic)]378pub struct AssertExpr {379	pub assert: AssertStmt,380	pub rest: Expr,381}382383#[derive(Debug, PartialEq, Acyclic)]384pub struct BinaryOp {385	pub lhs: Expr,386	pub op: BinaryOpType,387	pub rhs: Expr,388}389390#[derive(Debug, PartialEq, Acyclic, Clone, Copy)]391pub enum ImportKind {392	Normal,393	Str,394	Bin,395}396397#[derive(Debug, PartialEq, Acyclic)]398pub struct IfElse {399	pub cond: IfSpecData,400	pub cond_then: Expr,401	pub cond_else: Option<Expr>,402}403404#[derive(Debug, PartialEq, Acyclic)]405pub struct Slice {406	pub value: Expr,407	pub slice: SliceDesc,408}409410/// Syntax base411#[derive(Debug, PartialEq, Acyclic)]412pub enum Expr {413	/// Object-identity reference: `self`, `super`, `$`.414	Identity(Span, IdentityKind),415416	/// Trivial value literal417	Trivial(TrivialVal),418419	/// Variable name: test420	Var(Spanned<IStr>),421422	/// Array of expressions: [1, 2, "Hello"]423	Arr(Vec<Expr>),424	/// Array comprehension:425	/// ```jsonnet426	///  ingredients: [427	///    { kind: kind, qty: 4 / 3 }428	///    for kind in [429	///      'Honey Syrup',430	///      'Lemon Juice',431	///      'Farmers Gin',432	///    ]433	///  ],434	/// ```435	ArrComp(Box<Expr>, Vec<CompSpec>),436437	/// Object: {a: 2}438	Obj(ObjBody),439	/// Object extension: var1 {b: 2}440	ObjExtend(Box<Expr>, ObjBody),441442	/// -2443	UnaryOp(UnaryOpType, Box<Expr>),444	/// 2 - 2445	BinaryOp(Box<BinaryOp>),446	/// assert 2 == 2 : "Math is broken"447	AssertExpr(Box<AssertExpr>),448	/// local a = 2; { b: a }449	LocalExpr(Vec<BindSpec>, Box<Expr>),450451	/// import* "hello"452	Import(Spanned<ImportKind>, Box<Expr>),453	/// error "I'm broken"454	ErrorStmt(Span, Box<Expr>),455	/// a(b, c)456	Apply(Box<Expr>, Spanned<ArgsDesc>, bool),457	/// a[b], a.b, a?.b458	Index {459		indexable: Box<Expr>,460		parts: Vec<IndexPart>,461	},462	/// function(x) x463	Function(Span, ExprParams, Box<Expr>),464	/// if true == false then 1 else 2465	IfElse(Box<IfElse>),466	Slice(Box<Slice>),467}468469#[derive(Debug, PartialEq, Acyclic)]470pub struct IndexPart {471	pub span: Span,472	pub value: Expr,473	#[cfg(feature = "exp-null-coaelse")]474	pub null_coaelse: bool,475}476477/// file, begin offset, end offset478#[derive(Clone, PartialEq, Eq, Acyclic)]479#[repr(C)]480pub struct Span(pub Source, pub u32, pub u32);481impl Span {482	pub fn belongs_to(&self, other: &Span) -> bool {483		other.0 == self.0 && other.1 <= self.1 && other.2 >= self.2484	}485	pub fn range(&self) -> RangeInclusive<usize> {486		let start = self.1;487		let mut end = self.2;488		if end > start {489			// Because it is originally exclusive490			end -= 1;491		}492		start as usize..=end as usize493	}494}495496#[cfg(target_pointer_width = "64")]497static_assertions::assert_eq_size!(Span, (usize, usize));498499impl Debug for Span {500	fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {501		write!(f, "{:?}:{:?}-{:?}", self.0, self.1, self.2)502	}503}504505#[derive(Clone, PartialEq, Acyclic)]506pub struct Spanned<T: Acyclic> {507	pub value: T,508	pub span: Span,509}510impl<T: Acyclic> Deref for Spanned<T> {511	type Target = T;512	fn deref(&self) -> &Self::Target {513		&self.value514	}515}516impl<T: Acyclic> Spanned<T> {517	#[inline]518	pub fn new(value: T, span: Span) -> Self {519		Self { value, span }520	}521	pub fn map<U: Acyclic>(self, v: impl FnOnce(T) -> U) -> Spanned<U> {522		Spanned {523			span: self.span,524			value: v(self.value),525		}526	}527	pub fn as_ref<'a>(&'a self) -> Spanned<&'a T>528	where529		&'a T: Acyclic,530	{531		Spanned {532			span: self.span.clone(),533			value: &self.value,534		}535	}536}537538impl<T: Debug + Acyclic> Debug for Spanned<T> {539	fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {540		let expr = &**self;541		if f.alternate() {542			write!(f, "{:#?}", expr)?;543		} else {544			write!(f, "{:?}", expr)?;545		}546		write!(f, " from {:?}", self.span)?;547		Ok(())548	}549}
modifiedcrates/jrsonnet-ir/src/visit.rsdiffbeforeafterboth
--- a/crates/jrsonnet-ir/src/visit.rs
+++ b/crates/jrsonnet-ir/src/visit.rs
@@ -5,7 +5,7 @@
 use crate::{
 	ArgsDesc, AssertExpr, AssertStmt, BinaryOp, BindSpec, CompSpec, Destruct, Expr, ExprParam,
 	ExprParams, FieldMember, FieldName, ForSpecData, IfElse, IfSpecData, ImportKind, IndexPart,
-	ObjBody, ObjComp, ObjMembers, Slice, SliceDesc,
+	ObjBody, ObjComp, ObjMembers, Slice, SliceDesc, TrivialVal,
 };
 
 pub trait Visitor: Sized {
@@ -178,9 +178,8 @@
 }
 pub fn visit_expr<V: Visitor>(v: &mut V, e: &Expr) {
 	match e {
-		Expr::Literal(_span, _literal_type) => {}
-		Expr::Str(_istr) => {}
-		Expr::Num(_num) => {}
+		Expr::Identity(_span, _identity_kind) => {}
+		Expr::Trivial(_) => {}
 		Expr::Var(_spanned) => {}
 		Expr::Arr(exprs) => {
 			for e in &**exprs {
@@ -220,7 +219,7 @@
 		Expr::Import(kind, expr) => {
 			v.visit_expr(expr);
 
-			if let Expr::Str(expr) = &**expr {
+			if let Expr::Trivial(TrivialVal::Str(expr)) = &**expr {
 				v.visit_import(matches!(**kind, ImportKind::Normal), expr.clone());
 			}
 		}
modifiedcrates/jrsonnet-peg-parser/src/lib.rsdiffbeforeafterboth
--- a/crates/jrsonnet-peg-parser/src/lib.rs
+++ b/crates/jrsonnet-peg-parser/src/lib.rs
@@ -1,9 +1,9 @@
 use jrsonnet_gcmodule::Acyclic;
 use jrsonnet_ir::{
 	ArgsDesc, AssertExpr, AssertStmt, BinaryOp, BindSpec, CompSpec, Destruct, DestructRest, Expr,
-	ExprParam, ExprParams, FieldMember, FieldName, ForSpecData, IStr, IfElse, IfSpecData,
-	ImportKind, IndexPart, LiteralType, Member, NumValue, ObjBody, ObjComp, ObjMembers, Slice,
-	SliceDesc, Source, Span, Spanned, Visibility, unescape,
+	ExprParam, ExprParams, FieldMember, FieldName, ForSpecData, IStr, IdentityKind, IfElse,
+	IfSpecData, ImportKind, IndexPart, Member, NumValue, ObjBody, ObjComp, ObjMembers, Slice,
+	SliceDesc, Source, Span, Spanned, TrivialVal, Visibility, unescape,
 };
 use peg::parser;
 
@@ -263,7 +263,7 @@
 		pub rule local_expr(s: &ParserSettings) -> Expr
 			= keyword("local") _ binds:bind(s) ** comma() (_ ",")? _ ";" _ expr:expr(s) { Expr::LocalExpr(binds, Box::new(expr)) }
 		pub rule string_expr(s: &ParserSettings) -> Expr
-			= s:string() {Expr::Str(s.into())}
+			= s:string() {Expr::Trivial(TrivialVal::Str(s.into()))}
 		pub rule obj_expr(s: &ParserSettings) -> Expr
 			= "{" _ body:objinside(s) _ "}" {Expr::Obj(body)}
 		pub rule array_expr(s: &ParserSettings) -> Expr
@@ -273,7 +273,7 @@
 				Expr::ArrComp(Box::new(expr), specs)
 			}
 		pub rule number_expr(s: &ParserSettings) -> Expr
-			= n:number() {? NumValue::new(n).map_or_else(|| Err("!!!numbers are finite"), |n| Ok(Expr::Num(n)))}
+			= n:number() {? NumValue::new(n).map_or_else(|| Err("!!!numbers are finite"), |n| Ok(Expr::Trivial(TrivialVal::Num(n))))}
 
 		rule spanned<T: Acyclic>(x: rule<T>, s: &ParserSettings) -> Spanned<T>
 			= a:position!() n:x() b:position!() { Spanned::new(n, Span(s.source.clone(), codeidx(a), codeidx(b))) }
@@ -281,7 +281,7 @@
 		pub rule var_expr(s: &ParserSettings) -> Expr
 			= n:spanned(<id()>, s) { Expr::Var(n) }
 		pub rule id_loc(s: &ParserSettings) -> Spanned<Expr>
-			= a:position!() n:id() b:position!() { Spanned::new(Expr::Str(n), Span(s.source.clone(), codeidx(a), codeidx(b))) }
+			= a:position!() n:id() b:position!() { Spanned::new(Expr::Trivial(TrivialVal::Str(n)), Span(s.source.clone(), codeidx(a), codeidx(b))) }
 		pub rule if_then_else_expr(s: &ParserSettings) -> Expr
 			= cond:ifspec(s) _ keyword("then") _ cond_then:expr(s) cond_else:(_ keyword("else") _ e:expr(s) {e})? {Expr::IfElse(Box::new(IfElse{
 				cond,
@@ -290,14 +290,14 @@
 			}))}
 
 		pub rule literal(s: &ParserSettings) -> Expr
-			= a:position!() v:(
-				keyword("null") {LiteralType::Null}
-				/ keyword("true") {LiteralType::True}
-				/ keyword("false") {LiteralType::False}
-				/ keyword("self") {LiteralType::This}
-				/ keyword("$") {LiteralType::Dollar}
-				/ keyword("super") {LiteralType::Super}
-			) b:position!() {Expr::Literal(Span(s.source.clone(), codeidx(a), codeidx(b)), v)}
+			= keyword("null") { Expr::Trivial(TrivialVal::Null) }
+			/ keyword("true") { Expr::Trivial(TrivialVal::Bool(true)) }
+			/ keyword("false") { Expr::Trivial(TrivialVal::Bool(false)) }
+			/ a:position!() v:(
+				keyword("self") {IdentityKind::This}
+				/ keyword("$") {IdentityKind::Dollar}
+				/ keyword("super") {IdentityKind::Super}
+			) b:position!() { Expr::Identity(Span(s.source.clone(), codeidx(a), codeidx(b)), v) }
 
 		rule import_kind() -> ImportKind
 			= keyword("importstr") { ImportKind::Str }
@@ -429,7 +429,7 @@
 pub fn string_to_expr(str: IStr, settings: &ParserSettings) -> Spanned<Expr> {
 	let len = str.len();
 	Spanned::new(
-		Expr::Str(str),
+		Expr::Trivial(TrivialVal::Str(str)),
 		Span(settings.source.clone(), 0, codeidx(len)),
 	)
 }
modifiedcrates/jrsonnet-peg-parser/src/snapshots/jrsonnet_peg_parser__tests__snapshots@array_comp.jsonnet.snapdiffbeforeafterboth
--- a/crates/jrsonnet-peg-parser/src/snapshots/jrsonnet_peg_parser__tests__snapshots@array_comp.jsonnet.snap
+++ b/crates/jrsonnet-peg-parser/src/snapshots/jrsonnet_peg_parser__tests__snapshots@array_comp.jsonnet.snap
@@ -1,5 +1,6 @@
 ---
 source: crates/jrsonnet-peg-parser/src/lib.rs
+assertion_line: 459
 expression: v
 input_file: crates/jrsonnet-peg-parser/src/tests/array_comp.jsonnet
 ---
@@ -14,8 +15,10 @@
                     parts: [
                         IndexPart {
                             span: virtual:<test>:7-15,
-                            value: Str(
-                                "deepJoin",
+                            value: Trivial(
+                                Str(
+                                    "deepJoin",
+                                ),
                             ),
                         },
                     ],
modifiedcrates/jrsonnet-peg-parser/src/snapshots/jrsonnet_peg_parser__tests__snapshots@basic_math.jsonnet.snapdiffbeforeafterboth
--- a/crates/jrsonnet-peg-parser/src/snapshots/jrsonnet_peg_parser__tests__snapshots@basic_math.jsonnet.snap
+++ b/crates/jrsonnet-peg-parser/src/snapshots/jrsonnet_peg_parser__tests__snapshots@basic_math.jsonnet.snap
@@ -1,5 +1,6 @@
 ---
 source: crates/jrsonnet-peg-parser/src/lib.rs
+assertion_line: 459
 expression: v
 input_file: crates/jrsonnet-peg-parser/src/tests/basic_math.jsonnet
 ---
@@ -7,18 +8,24 @@
     [
         BinaryOp(
             BinaryOp {
-                lhs: Num(
-                    2.0,
+                lhs: Trivial(
+                    Num(
+                        2.0,
+                    ),
                 ),
                 op: Add,
                 rhs: BinaryOp(
                     BinaryOp {
-                        lhs: Num(
-                            2.0,
+                        lhs: Trivial(
+                            Num(
+                                2.0,
+                            ),
                         ),
                         op: Mul,
-                        rhs: Num(
-                            2.0,
+                        rhs: Trivial(
+                            Num(
+                                2.0,
+                            ),
                         ),
                     },
                 ),
@@ -26,18 +33,24 @@
         ),
         BinaryOp(
             BinaryOp {
-                lhs: Num(
-                    2.0,
+                lhs: Trivial(
+                    Num(
+                        2.0,
+                    ),
                 ),
                 op: Add,
                 rhs: BinaryOp(
                     BinaryOp {
-                        lhs: Num(
-                            2.0,
+                        lhs: Trivial(
+                            Num(
+                                2.0,
+                            ),
                         ),
                         op: Mul,
-                        rhs: Num(
-                            2.0,
+                        rhs: Trivial(
+                            Num(
+                                2.0,
+                            ),
                         ),
                     },
                 ),
@@ -47,24 +60,32 @@
             BinaryOp {
                 lhs: BinaryOp(
                     BinaryOp {
-                        lhs: Num(
-                            2.0,
+                        lhs: Trivial(
+                            Num(
+                                2.0,
+                            ),
                         ),
                         op: Add,
-                        rhs: Num(
-                            2.0,
+                        rhs: Trivial(
+                            Num(
+                                2.0,
+                            ),
                         ),
                     },
                 ),
                 op: Add,
                 rhs: BinaryOp(
                     BinaryOp {
-                        lhs: Num(
-                            2.0,
+                        lhs: Trivial(
+                            Num(
+                                2.0,
+                            ),
                         ),
                         op: Mul,
-                        rhs: Num(
-                            2.0,
+                        rhs: Trivial(
+                            Num(
+                                2.0,
+                            ),
                         ),
                     },
                 ),
@@ -72,24 +93,32 @@
         ),
         BinaryOp(
             BinaryOp {
-                lhs: Num(
-                    2.0,
+                lhs: Trivial(
+                    Num(
+                        2.0,
+                    ),
                 ),
                 op: Add,
                 rhs: BinaryOp(
                     BinaryOp {
-                        lhs: Num(
-                            2.0,
+                        lhs: Trivial(
+                            Num(
+                                2.0,
+                            ),
                         ),
                         op: Add,
                         rhs: BinaryOp(
                             BinaryOp {
-                                lhs: Num(
-                                    2.0,
+                                lhs: Trivial(
+                                    Num(
+                                        2.0,
+                                    ),
                                 ),
                                 op: Mul,
-                                rhs: Num(
-                                    2.0,
+                                rhs: Trivial(
+                                    Num(
+                                        2.0,
+                                    ),
                                 ),
                             },
                         ),
@@ -99,18 +128,24 @@
         ),
         BinaryOp(
             BinaryOp {
-                lhs: Num(
-                    2.0,
+                lhs: Trivial(
+                    Num(
+                        2.0,
+                    ),
                 ),
                 op: Add,
                 rhs: BinaryOp(
                     BinaryOp {
-                        lhs: Num(
-                            3.0,
+                        lhs: Trivial(
+                            Num(
+                                3.0,
+                            ),
                         ),
                         op: Mul,
-                        rhs: Num(
-                            4.0,
+                        rhs: Trivial(
+                            Num(
+                                4.0,
+                            ),
                         ),
                     },
                 ),
modifiedcrates/jrsonnet-peg-parser/src/snapshots/jrsonnet_peg_parser__tests__snapshots@comment_eof.jsonnet.snapdiffbeforeafterboth
--- a/crates/jrsonnet-peg-parser/src/snapshots/jrsonnet_peg_parser__tests__snapshots@comment_eof.jsonnet.snap
+++ b/crates/jrsonnet-peg-parser/src/snapshots/jrsonnet_peg_parser__tests__snapshots@comment_eof.jsonnet.snap
@@ -1,5 +1,6 @@
 ---
 source: crates/jrsonnet-peg-parser/src/lib.rs
+assertion_line: 459
 expression: v
 input_file: crates/jrsonnet-peg-parser/src/tests/comment_eof.jsonnet
 ---
@@ -16,8 +17,10 @@
                     plus: false,
                     params: None,
                     visibility: Normal,
-                    value: Num(
-                        1.0,
+                    value: Trivial(
+                        Num(
+                            1.0,
+                        ),
                     ),
                 },
             ],
modifiedcrates/jrsonnet-peg-parser/src/snapshots/jrsonnet_peg_parser__tests__snapshots@default_nondefault.jsonnet.snapdiffbeforeafterboth
--- a/crates/jrsonnet-peg-parser/src/snapshots/jrsonnet_peg_parser__tests__snapshots@default_nondefault.jsonnet.snap
+++ b/crates/jrsonnet-peg-parser/src/snapshots/jrsonnet_peg_parser__tests__snapshots@default_nondefault.jsonnet.snap
@@ -1,5 +1,6 @@
 ---
 source: crates/jrsonnet-peg-parser/src/lib.rs
+assertion_line: 459
 expression: v
 input_file: crates/jrsonnet-peg-parser/src/tests/default_nondefault.jsonnet
 ---
@@ -14,8 +15,10 @@
                             "foo" from virtual:<test>:8-11,
                         ),
                         default: Some(
-                            Str(
-                                "foo",
+                            Trivial(
+                                Str(
+                                    "foo",
+                                ),
                             ),
                         ),
                     },
@@ -44,14 +47,12 @@
                 ),
                 binds_len: 2,
             },
-            value: Literal(
-                virtual:<test>:28-32,
+            value: Trivial(
                 Null,
             ),
         },
     ],
-    Literal(
-        virtual:<test>:34-38,
+    Trivial(
         Null,
     ),
 )
modifiedcrates/jrsonnet-peg-parser/src/snapshots/jrsonnet_peg_parser__tests__snapshots@imports.jsonnet.snapdiffbeforeafterboth
--- a/crates/jrsonnet-peg-parser/src/snapshots/jrsonnet_peg_parser__tests__snapshots@imports.jsonnet.snap
+++ b/crates/jrsonnet-peg-parser/src/snapshots/jrsonnet_peg_parser__tests__snapshots@imports.jsonnet.snap
@@ -1,5 +1,6 @@
 ---
 source: crates/jrsonnet-peg-parser/src/lib.rs
+assertion_line: 459
 expression: v
 input_file: crates/jrsonnet-peg-parser/src/tests/imports.jsonnet
 ---
@@ -7,20 +8,26 @@
     [
         Import(
             Normal from virtual:<test>:2-8,
-            Str(
-                "hello",
+            Trivial(
+                Str(
+                    "hello",
+                ),
             ),
         ),
         Import(
             Str from virtual:<test>:18-27,
-            Str(
-                "garnish.txt",
+            Trivial(
+                Str(
+                    "garnish.txt",
+                ),
             ),
         ),
         Import(
             Bin from virtual:<test>:43-52,
-            Str(
-                "garnish.bin",
+            Trivial(
+                Str(
+                    "garnish.bin",
+                ),
             ),
         ),
     ],
modifiedcrates/jrsonnet-peg-parser/src/snapshots/jrsonnet_peg_parser__tests__snapshots@multiline.jsonnet.snapdiffbeforeafterboth
--- a/crates/jrsonnet-peg-parser/src/snapshots/jrsonnet_peg_parser__tests__snapshots@multiline.jsonnet.snap
+++ b/crates/jrsonnet-peg-parser/src/snapshots/jrsonnet_peg_parser__tests__snapshots@multiline.jsonnet.snap
@@ -1,21 +1,30 @@
 ---
 source: crates/jrsonnet-peg-parser/src/lib.rs
+assertion_line: 459
 expression: v
 input_file: crates/jrsonnet-peg-parser/src/tests/multiline.jsonnet
 ---
 Arr(
     [
-        Str(
-            "Hello world!\na\n",
+        Trivial(
+            Str(
+                "Hello world!\na\n",
+            ),
         ),
-        Str(
-            "Hello world!\na\n",
+        Trivial(
+            Str(
+                "Hello world!\na\n",
+            ),
         ),
-        Str(
-            "Hello world!\n\ta\n",
+        Trivial(
+            Str(
+                "Hello world!\n\ta\n",
+            ),
         ),
-        Str(
-            "Hello world!\n a\n",
+        Trivial(
+            Str(
+                "Hello world!\n a\n",
+            ),
         ),
     ],
 )
modifiedcrates/jrsonnet-peg-parser/src/snapshots/jrsonnet_peg_parser__tests__snapshots@reserved.jsonnet.snapdiffbeforeafterboth
--- a/crates/jrsonnet-peg-parser/src/snapshots/jrsonnet_peg_parser__tests__snapshots@reserved.jsonnet.snap
+++ b/crates/jrsonnet-peg-parser/src/snapshots/jrsonnet_peg_parser__tests__snapshots@reserved.jsonnet.snap
@@ -1,12 +1,12 @@
 ---
 source: crates/jrsonnet-peg-parser/src/lib.rs
+assertion_line: 459
 expression: v
 input_file: crates/jrsonnet-peg-parser/src/tests/reserved.jsonnet
 ---
 Arr(
     [
-        Literal(
-            virtual:<test>:2-6,
+        Trivial(
             Null,
         ),
         Var(
modifiedcrates/jrsonnet-peg-parser/src/snapshots/jrsonnet_peg_parser__tests__snapshots@slice.jsonnet.snapdiffbeforeafterboth
--- a/crates/jrsonnet-peg-parser/src/snapshots/jrsonnet_peg_parser__tests__snapshots@slice.jsonnet.snap
+++ b/crates/jrsonnet-peg-parser/src/snapshots/jrsonnet_peg_parser__tests__snapshots@slice.jsonnet.snap
@@ -1,5 +1,6 @@
 ---
 source: crates/jrsonnet-peg-parser/src/lib.rs
+assertion_line: 459
 expression: v
 input_file: crates/jrsonnet-peg-parser/src/tests/slice.jsonnet
 ---
@@ -12,8 +13,10 @@
                 ),
                 slice: SliceDesc {
                     start: Some(
-                        Num(
-                            1.0,
+                        Trivial(
+                            Num(
+                                1.0,
+                            ),
                         ) from virtual:<test>:4-5,
                     ),
                     end: None,
@@ -28,8 +31,10 @@
                 ),
                 slice: SliceDesc {
                     start: Some(
-                        Num(
-                            1.0,
+                        Trivial(
+                            Num(
+                                1.0,
+                            ),
                         ) from virtual:<test>:11-12,
                     ),
                     end: None,
@@ -45,8 +50,10 @@
                 slice: SliceDesc {
                     start: None,
                     end: Some(
-                        Num(
-                            1.0,
+                        Trivial(
+                            Num(
+                                1.0,
+                            ),
                         ) from virtual:<test>:20-21,
                     ),
                     step: None,
@@ -62,8 +69,10 @@
                     start: None,
                     end: None,
                     step: Some(
-                        Num(
-                            1.0,
+                        Trivial(
+                            Num(
+                                1.0,
+                            ),
                         ) from virtual:<test>:29-30,
                     ),
                 },
@@ -83,8 +92,10 @@
                                     "len" from virtual:<test>:38-41,
                                 ),
                                 op: Sub,
-                                rhs: Num(
-                                    1.0,
+                                rhs: Trivial(
+                                    Num(
+                                        1.0,
+                                    ),
                                 ),
                             },
                         ) from virtual:<test>:38-45,
modifiedcrates/jrsonnet-peg-parser/src/snapshots/jrsonnet_peg_parser__tests__snapshots@string_escaping.jsonnet.snapdiffbeforeafterboth
--- a/crates/jrsonnet-peg-parser/src/snapshots/jrsonnet_peg_parser__tests__snapshots@string_escaping.jsonnet.snap
+++ b/crates/jrsonnet-peg-parser/src/snapshots/jrsonnet_peg_parser__tests__snapshots@string_escaping.jsonnet.snap
@@ -1,24 +1,35 @@
 ---
 source: crates/jrsonnet-peg-parser/src/lib.rs
+assertion_line: 459
 expression: v
 input_file: crates/jrsonnet-peg-parser/src/tests/string_escaping.jsonnet
 ---
 Arr(
     [
-        Str(
-            "Hello, \"world\"!",
+        Trivial(
+            Str(
+                "Hello, \"world\"!",
+            ),
         ),
-        Str(
-            "Hello 'world'!",
+        Trivial(
+            Str(
+                "Hello 'world'!",
+            ),
         ),
-        Str(
-            "\\\\",
+        Trivial(
+            Str(
+                "\\\\",
+            ),
         ),
-        Str(
-            "Hello\nWorld",
+        Trivial(
+            Str(
+                "Hello\nWorld",
+            ),
         ),
-        Str(
-            "Hello\\n\"World\"",
+        Trivial(
+            Str(
+                "Hello\\n\"World\"",
+            ),
         ),
     ],
 )
modifiedcrates/jrsonnet-peg-parser/src/snapshots/jrsonnet_peg_parser__tests__snapshots@subexp.jsonnet.snapdiffbeforeafterboth
--- a/crates/jrsonnet-peg-parser/src/snapshots/jrsonnet_peg_parser__tests__snapshots@subexp.jsonnet.snap
+++ b/crates/jrsonnet-peg-parser/src/snapshots/jrsonnet_peg_parser__tests__snapshots@subexp.jsonnet.snap
@@ -1,5 +1,6 @@
 ---
 source: crates/jrsonnet-peg-parser/src/lib.rs
+assertion_line: 459
 expression: v
 input_file: crates/jrsonnet-peg-parser/src/tests/subexp.jsonnet
 ---
@@ -22,8 +23,10 @@
                             into: Full(
                                 "x" from virtual:<test>:11-12,
                             ),
-                            value: Num(
-                                1.0,
+                            value: Trivial(
+                                Num(
+                                    1.0,
+                                ),
                             ),
                         },
                     ],
modifiedcrates/jrsonnet-peg-parser/src/snapshots/jrsonnet_peg_parser__tests__snapshots@suffix.jsonnet.snapdiffbeforeafterboth
--- a/crates/jrsonnet-peg-parser/src/snapshots/jrsonnet_peg_parser__tests__snapshots@suffix.jsonnet.snap
+++ b/crates/jrsonnet-peg-parser/src/snapshots/jrsonnet_peg_parser__tests__snapshots@suffix.jsonnet.snap
@@ -1,5 +1,6 @@
 ---
 source: crates/jrsonnet-peg-parser/src/lib.rs
+assertion_line: 459
 expression: v
 input_file: crates/jrsonnet-peg-parser/src/tests/suffix.jsonnet
 ---
@@ -12,8 +13,10 @@
             parts: [
                 IndexPart {
                     span: virtual:<test>:6-10,
-                    value: Str(
-                        "test",
+                    value: Trivial(
+                        Str(
+                            "test",
+                        ),
                     ),
                 },
             ],
@@ -24,8 +27,10 @@
             ),
             ArgsDesc {
                 unnamed: [
-                    Num(
-                        2.0,
+                    Trivial(
+                        Num(
+                            2.0,
+                        ),
                     ),
                 ],
                 names: [],
@@ -41,16 +46,20 @@
                 parts: [
                     IndexPart {
                         span: virtual:<test>:24-28,
-                        value: Str(
-                            "test",
+                        value: Trivial(
+                            Str(
+                                "test",
+                            ),
                         ),
                     },
                 ],
             },
             ArgsDesc {
                 unnamed: [
-                    Num(
-                        2.0,
+                    Trivial(
+                        Num(
+                            2.0,
+                        ),
                     ),
                 ],
                 names: [],