roc/test/snapshots/expr/tuple_comprehensive.md

7.6 KiB

META

description=Comprehensive tuple expression tests
type=expr

SOURCE

{
    # define these to avoid runtime errors
    add_one = |_| {}
    x = 10
    y = 20
    z = 30

    # example tuples
	empty = ()
	single = (42)
	pair = (1, 2)
	triple = (1, "hello", True)
	nested = ((1, 2), (3, 4))
	mixed = (add_one(5), "world", [1, 2, 3])
	with_vars = (x, y, z)
	with_lambda = (|n| n + 1, 42)

	empty
}

EXPECTED

EMPTY TUPLE NOT ALLOWED - tuple_comprehensive.md:9:10:9:12 UNUSED VARIABLE - tuple_comprehensive.md:10:2:10:8 UNUSED VARIABLE - tuple_comprehensive.md:11:2:11:6 UNUSED VARIABLE - tuple_comprehensive.md:12:2:12:8 UNUSED VARIABLE - tuple_comprehensive.md:13:2:13:8 UNUSED VARIABLE - tuple_comprehensive.md:14:2:14:7 UNUSED VARIABLE - tuple_comprehensive.md:15:2:15:11 UNUSED VARIABLE - tuple_comprehensive.md:16:2:16:13

PROBLEMS

EMPTY TUPLE NOT ALLOWED I am part way through parsing this tuple, but it is empty: tuple_comprehensive.md:9:10:9:12:

	empty = ()
        ^^

If you want to represent nothing, try using an empty record: {}.

UNUSED VARIABLE Variable single is not used anywhere in your code.

If you don't need this variable, prefix it with an underscore like _single to suppress this warning. The unused variable is declared here: tuple_comprehensive.md:10:2:10:8:

	single = (42)
^^^^^^

UNUSED VARIABLE Variable pair is not used anywhere in your code.

If you don't need this variable, prefix it with an underscore like _pair to suppress this warning. The unused variable is declared here: tuple_comprehensive.md:11:2:11:6:

	pair = (1, 2)
^^^^

UNUSED VARIABLE Variable triple is not used anywhere in your code.

If you don't need this variable, prefix it with an underscore like _triple to suppress this warning. The unused variable is declared here: tuple_comprehensive.md:12:2:12:8:

	triple = (1, "hello", True)
^^^^^^

UNUSED VARIABLE Variable nested is not used anywhere in your code.

If you don't need this variable, prefix it with an underscore like _nested to suppress this warning. The unused variable is declared here: tuple_comprehensive.md:13:2:13:8:

	nested = ((1, 2), (3, 4))
^^^^^^

UNUSED VARIABLE Variable mixed is not used anywhere in your code.

If you don't need this variable, prefix it with an underscore like _mixed to suppress this warning. The unused variable is declared here: tuple_comprehensive.md:14:2:14:7:

	mixed = (add_one(5), "world", [1, 2, 3])
^^^^^

UNUSED VARIABLE Variable with_vars is not used anywhere in your code.

If you don't need this variable, prefix it with an underscore like _with_vars to suppress this warning. The unused variable is declared here: tuple_comprehensive.md:15:2:15:11:

	with_vars = (x, y, z)
^^^^^^^^^

UNUSED VARIABLE Variable with_lambda is not used anywhere in your code.

If you don't need this variable, prefix it with an underscore like _with_lambda to suppress this warning. The unused variable is declared here: tuple_comprehensive.md:16:2:16:13:

	with_lambda = (|n| n + 1, 42)
^^^^^^^^^^^

TOKENS

OpenCurly,
LowerIdent,OpAssign,OpBar,Underscore,OpBar,OpenCurly,CloseCurly,
LowerIdent,OpAssign,Int,
LowerIdent,OpAssign,Int,
LowerIdent,OpAssign,Int,
LowerIdent,OpAssign,OpenRound,CloseRound,
LowerIdent,OpAssign,OpenRound,Int,CloseRound,
LowerIdent,OpAssign,OpenRound,Int,Comma,Int,CloseRound,
LowerIdent,OpAssign,OpenRound,Int,Comma,StringStart,StringPart,StringEnd,Comma,UpperIdent,CloseRound,
LowerIdent,OpAssign,OpenRound,NoSpaceOpenRound,Int,Comma,Int,CloseRound,Comma,OpenRound,Int,Comma,Int,CloseRound,CloseRound,
LowerIdent,OpAssign,OpenRound,LowerIdent,NoSpaceOpenRound,Int,CloseRound,Comma,StringStart,StringPart,StringEnd,Comma,OpenSquare,Int,Comma,Int,Comma,Int,CloseSquare,CloseRound,
LowerIdent,OpAssign,OpenRound,LowerIdent,Comma,LowerIdent,Comma,LowerIdent,CloseRound,
LowerIdent,OpAssign,OpenRound,OpBar,LowerIdent,OpBar,LowerIdent,OpPlus,Int,Comma,Int,CloseRound,
LowerIdent,
CloseCurly,
EndOfFile,

PARSE

(e-block
	(statements
		(s-decl
			(p-ident (raw "add_one"))
			(e-lambda
				(args
					(p-underscore))
				(e-record)))
		(s-decl
			(p-ident (raw "x"))
			(e-int (raw "10")))
		(s-decl
			(p-ident (raw "y"))
			(e-int (raw "20")))
		(s-decl
			(p-ident (raw "z"))
			(e-int (raw "30")))
		(s-decl
			(p-ident (raw "empty"))
			(e-tuple))
		(s-decl
			(p-ident (raw "single"))
			(e-tuple
				(e-int (raw "42"))))
		(s-decl
			(p-ident (raw "pair"))
			(e-tuple
				(e-int (raw "1"))
				(e-int (raw "2"))))
		(s-decl
			(p-ident (raw "triple"))
			(e-tuple
				(e-int (raw "1"))
				(e-string
					(e-string-part (raw "hello")))
				(e-tag (raw "True"))))
		(s-decl
			(p-ident (raw "nested"))
			(e-tuple
				(e-tuple
					(e-int (raw "1"))
					(e-int (raw "2")))
				(e-tuple
					(e-int (raw "3"))
					(e-int (raw "4")))))
		(s-decl
			(p-ident (raw "mixed"))
			(e-tuple
				(e-apply
					(e-ident (raw "add_one"))
					(e-int (raw "5")))
				(e-string
					(e-string-part (raw "world")))
				(e-list
					(e-int (raw "1"))
					(e-int (raw "2"))
					(e-int (raw "3")))))
		(s-decl
			(p-ident (raw "with_vars"))
			(e-tuple
				(e-ident (raw "x"))
				(e-ident (raw "y"))
				(e-ident (raw "z"))))
		(s-decl
			(p-ident (raw "with_lambda"))
			(e-tuple
				(e-lambda
					(args
						(p-ident (raw "n")))
					(e-binop (op "+")
						(e-ident (raw "n"))
						(e-int (raw "1"))))
				(e-int (raw "42"))))
		(e-ident (raw "empty"))))

FORMATTED

{
	# define these to avoid runtime errors
	add_one = |_| {}
	x = 10
	y = 20
	z = 30

	# example tuples
	empty = ()
	single = (42)
	pair = (1, 2)
	triple = (1, "hello", True)
	nested = ((1, 2), (3, 4))
	mixed = (add_one(5), "world", [1, 2, 3])
	with_vars = (x, y, z)
	with_lambda = (|n| n + 1, 42)

	empty
}

CANONICALIZE

(e-block
	(s-let
		(p-assign (ident "add_one"))
		(e-lambda
			(args
				(p-underscore))
			(e-empty_record)))
	(s-let
		(p-assign (ident "x"))
		(e-num (value "10")))
	(s-let
		(p-assign (ident "y"))
		(e-num (value "20")))
	(s-let
		(p-assign (ident "z"))
		(e-num (value "30")))
	(s-let
		(p-assign (ident "empty"))
		(e-runtime-error (tag "empty_tuple")))
	(s-let
		(p-assign (ident "single"))
		(e-num (value "42")))
	(s-let
		(p-assign (ident "pair"))
		(e-tuple
			(elems
				(e-num (value "1"))
				(e-num (value "2")))))
	(s-let
		(p-assign (ident "triple"))
		(e-tuple
			(elems
				(e-num (value "1"))
				(e-string
					(e-literal (string "hello")))
				(e-tag (name "True")))))
	(s-let
		(p-assign (ident "nested"))
		(e-tuple
			(elems
				(e-tuple
					(elems
						(e-num (value "1"))
						(e-num (value "2"))))
				(e-tuple
					(elems
						(e-num (value "3"))
						(e-num (value "4")))))))
	(s-let
		(p-assign (ident "mixed"))
		(e-tuple
			(elems
				(e-call
					(e-lookup-local
						(p-assign (ident "add_one")))
					(e-num (value "5")))
				(e-string
					(e-literal (string "world")))
				(e-list
					(elems
						(e-num (value "1"))
						(e-num (value "2"))
						(e-num (value "3")))))))
	(s-let
		(p-assign (ident "with_vars"))
		(e-tuple
			(elems
				(e-lookup-local
					(p-assign (ident "x")))
				(e-lookup-local
					(p-assign (ident "y")))
				(e-lookup-local
					(p-assign (ident "z"))))))
	(s-let
		(p-assign (ident "with_lambda"))
		(e-tuple
			(elems
				(e-lambda
					(args
						(p-assign (ident "n")))
					(e-binop (op "add")
						(e-lookup-local
							(p-assign (ident "n")))
						(e-num (value "1"))))
				(e-num (value "42")))))
	(e-lookup-local
		(p-assign (ident "empty"))))

TYPES

(expr (type "Error"))