| ... | ... | @@ -3614,33 +3614,45 @@ pub const Parser = struct { |
| 3614 | 3614 | try stack.append(RenderState { .Expression = suffix_op.lhs }); |
| 3615 | 3615 | }, |
| 3616 | 3616 | ast.NodeSuffixOp.SuffixOp.StructInitializer => |field_inits| { |
| 3617 | | try stack.append(RenderState { .Text = " }"}); |
| 3617 | if (field_inits.len == 0) { |
| 3618 | try stack.append(RenderState { .Text = "{}" }); |
| 3619 | try stack.append(RenderState { .Expression = suffix_op.lhs }); |
| 3620 | continue; |
| 3621 | } |
| 3622 | try stack.append(RenderState { .Text = "}"}); |
| 3623 | try stack.append(RenderState.PrintIndent); |
| 3624 | try stack.append(RenderState { .Indent = indent }); |
| 3618 | 3625 | var i = field_inits.len; |
| 3619 | 3626 | while (i != 0) { |
| 3620 | 3627 | i -= 1; |
| 3621 | 3628 | const field_init = field_inits.at(i); |
| 3629 | try stack.append(RenderState { .Text = ",\n" }); |
| 3622 | 3630 | try stack.append(RenderState { .FieldInitializer = field_init }); |
| 3623 | | try stack.append(RenderState { .Text = " " }); |
| 3624 | | if (i != 0) { |
| 3625 | | try stack.append(RenderState { .Text = "," }); |
| 3626 | | } |
| 3631 | try stack.append(RenderState.PrintIndent); |
| 3627 | 3632 | } |
| 3628 | | try stack.append(RenderState { .Text = "{"}); |
| 3633 | try stack.append(RenderState { .Indent = indent + indent_delta }); |
| 3634 | try stack.append(RenderState { .Text = " {\n"}); |
| 3629 | 3635 | try stack.append(RenderState { .Expression = suffix_op.lhs }); |
| 3630 | 3636 | }, |
| 3631 | 3637 | ast.NodeSuffixOp.SuffixOp.ArrayInitializer => |exprs| { |
| 3632 | | try stack.append(RenderState { .Text = " }"}); |
| 3638 | if (exprs.len == 0) { |
| 3639 | try stack.append(RenderState { .Text = "{}" }); |
| 3640 | try stack.append(RenderState { .Expression = suffix_op.lhs }); |
| 3641 | continue; |
| 3642 | } |
| 3643 | try stack.append(RenderState { .Text = "}"}); |
| 3644 | try stack.append(RenderState.PrintIndent); |
| 3645 | try stack.append(RenderState { .Indent = indent }); |
| 3633 | 3646 | var i = exprs.len; |
| 3634 | 3647 | while (i != 0) { |
| 3635 | 3648 | i -= 1; |
| 3636 | 3649 | const expr = exprs.at(i); |
| 3650 | try stack.append(RenderState { .Text = ",\n" }); |
| 3637 | 3651 | try stack.append(RenderState { .Expression = expr }); |
| 3638 | | try stack.append(RenderState { .Text = " " }); |
| 3639 | | if (i != 0) { |
| 3640 | | try stack.append(RenderState { .Text = "," }); |
| 3641 | | } |
| 3652 | try stack.append(RenderState.PrintIndent); |
| 3642 | 3653 | } |
| 3643 | | try stack.append(RenderState { .Text = "{"}); |
| 3654 | try stack.append(RenderState { .Indent = indent + indent_delta }); |
| 3655 | try stack.append(RenderState { .Text = " {\n"}); |
| 3644 | 3656 | try stack.append(RenderState { .Expression = suffix_op.lhs }); |
| 3645 | 3657 | }, |
| 3646 | 3658 | } |
| ... | ... | @@ -3784,6 +3796,14 @@ pub const Parser = struct { |
| 3784 | 3796 | while (i != 0) { |
| 3785 | 3797 | i -= 1; |
| 3786 | 3798 | const node = fields_and_decls[i]; |
| 3799 | switch (node.id) { |
| 3800 | ast.Node.Id.StructField, |
| 3801 | ast.Node.Id.UnionTag, |
| 3802 | ast.Node.Id.EnumTag => { |
| 3803 | try stack.append(RenderState { .Text = "," }); |
| 3804 | }, |
| 3805 | else => { } |
| 3806 | } |
| 3787 | 3807 | try stack.append(RenderState { .TopLevelDecl = node}); |
| 3788 | 3808 | try stack.append(RenderState.PrintIndent); |
| 3789 | 3809 | try stack.append(RenderState { |
| ... | ... | @@ -3798,18 +3818,6 @@ pub const Parser = struct { |
| 3798 | 3818 | break :blk "\n"; |
| 3799 | 3819 | }, |
| 3800 | 3820 | }); |
| 3801 | | |
| 3802 | | if (i != 0) { |
| 3803 | | const prev_node = fields_and_decls[i - 1]; |
| 3804 | | switch (prev_node.id) { |
| 3805 | | ast.Node.Id.StructField, |
| 3806 | | ast.Node.Id.UnionTag, |
| 3807 | | ast.Node.Id.EnumTag => { |
| 3808 | | try stack.append(RenderState { .Text = "," }); |
| 3809 | | }, |
| 3810 | | else => { } |
| 3811 | | } |
| 3812 | | } |
| 3813 | 3821 | } |
| 3814 | 3822 | try stack.append(RenderState { .Indent = indent + indent_delta}); |
| 3815 | 3823 | try stack.append(RenderState { .Text = "{"}); |
| ... | ... | @@ -3838,6 +3846,7 @@ pub const Parser = struct { |
| 3838 | 3846 | while (i != 0) { |
| 3839 | 3847 | i -= 1; |
| 3840 | 3848 | const node = decls[i]; |
| 3849 | try stack.append(RenderState { .Text = "," }); |
| 3841 | 3850 | try stack.append(RenderState { .Expression = node }); |
| 3842 | 3851 | try stack.append(RenderState.PrintIndent); |
| 3843 | 3852 | try stack.append(RenderState { |
| ... | ... | @@ -3852,10 +3861,6 @@ pub const Parser = struct { |
| 3852 | 3861 | break :blk "\n"; |
| 3853 | 3862 | }, |
| 3854 | 3863 | }); |
| 3855 | | |
| 3856 | | if (i != 0) { |
| 3857 | | try stack.append(RenderState { .Text = "," }); |
| 3858 | | } |
| 3859 | 3864 | } |
| 3860 | 3865 | try stack.append(RenderState { .Indent = indent + indent_delta}); |
| 3861 | 3866 | try stack.append(RenderState { .Text = "{"}); |
| ... | ... | @@ -3968,6 +3973,7 @@ pub const Parser = struct { |
| 3968 | 3973 | while (i != 0) { |
| 3969 | 3974 | i -= 1; |
| 3970 | 3975 | const node = cases[i]; |
| 3976 | try stack.append(RenderState { .Text = ","}); |
| 3971 | 3977 | try stack.append(RenderState { .Expression = &node.base}); |
| 3972 | 3978 | try stack.append(RenderState.PrintIndent); |
| 3973 | 3979 | try stack.append(RenderState { |
| ... | ... | @@ -3982,10 +3988,6 @@ pub const Parser = struct { |
| 3982 | 3988 | break :blk "\n"; |
| 3983 | 3989 | }, |
| 3984 | 3990 | }); |
| 3985 | | |
| 3986 | | if (i != 0) { |
| 3987 | | try stack.append(RenderState { .Text = "," }); |
| 3988 | | } |
| 3989 | 3991 | } |
| 3990 | 3992 | try stack.append(RenderState { .Indent = indent + indent_delta}); |
| 3991 | 3993 | try stack.append(RenderState { .Text = ") {"}); |
| ... | ... | @@ -4008,7 +4010,8 @@ pub const Parser = struct { |
| 4008 | 4010 | try stack.append(RenderState { .Expression = items[i] }); |
| 4009 | 4011 | |
| 4010 | 4012 | if (i != 0) { |
| 4011 | | try stack.append(RenderState { .Text = ", " }); |
| 4013 | try stack.append(RenderState.PrintIndent); |
| 4014 | try stack.append(RenderState { .Text = ",\n" }); |
| 4012 | 4015 | } |
| 4013 | 4016 | } |
| 4014 | 4017 | }, |
| ... | ... | @@ -4600,10 +4603,10 @@ test "zig fmt: precedence" { |
| 4600 | 4603 | \\ (a!b)(); |
| 4601 | 4604 | \\ !a!b; |
| 4602 | 4605 | \\ !(a!b); |
| 4603 | | \\ !a{ }; |
| 4604 | | \\ !(a{ }); |
| 4605 | | \\ a + b{ }; |
| 4606 | | \\ (a + b){ }; |
| 4606 | \\ !a{}; |
| 4607 | \\ !(a{}); |
| 4608 | \\ a + b{}; |
| 4609 | \\ (a + b){}; |
| 4607 | 4610 | \\ a << b + c; |
| 4608 | 4611 | \\ (a << b) + c; |
| 4609 | 4612 | \\ a & b << c; |
| ... | ... | @@ -4740,21 +4743,21 @@ test "zig fmt: struct declaration" { |
| 4740 | 4743 | \\ return *self; |
| 4741 | 4744 | \\ } |
| 4742 | 4745 | \\ |
| 4743 | | \\ f2: u8 |
| 4746 | \\ f2: u8, |
| 4744 | 4747 | \\}; |
| 4745 | 4748 | \\ |
| 4746 | 4749 | \\const Ps = packed struct { |
| 4747 | 4750 | \\ a: u8, |
| 4748 | 4751 | \\ pub b: u8, |
| 4749 | 4752 | \\ |
| 4750 | | \\ c: u8 |
| 4753 | \\ c: u8, |
| 4751 | 4754 | \\}; |
| 4752 | 4755 | \\ |
| 4753 | 4756 | \\const Es = extern struct { |
| 4754 | 4757 | \\ a: u8, |
| 4755 | 4758 | \\ pub b: u8, |
| 4756 | 4759 | \\ |
| 4757 | | \\ c: u8 |
| 4760 | \\ c: u8, |
| 4758 | 4761 | \\}; |
| 4759 | 4762 | \\ |
| 4760 | 4763 | ); |
| ... | ... | @@ -4764,25 +4767,25 @@ test "zig fmt: enum declaration" { |
| 4764 | 4767 | try testCanonical( |
| 4765 | 4768 | \\const E = enum { |
| 4766 | 4769 | \\ Ok, |
| 4767 | | \\ SomethingElse = 0 |
| 4770 | \\ SomethingElse = 0, |
| 4768 | 4771 | \\}; |
| 4769 | 4772 | \\ |
| 4770 | 4773 | \\const E2 = enum(u8) { |
| 4771 | 4774 | \\ Ok, |
| 4772 | 4775 | \\ SomethingElse = 255, |
| 4773 | | \\ SomethingThird |
| 4776 | \\ SomethingThird, |
| 4774 | 4777 | \\}; |
| 4775 | 4778 | \\ |
| 4776 | 4779 | \\const Ee = extern enum { |
| 4777 | 4780 | \\ Ok, |
| 4778 | 4781 | \\ SomethingElse, |
| 4779 | | \\ SomethingThird |
| 4782 | \\ SomethingThird, |
| 4780 | 4783 | \\}; |
| 4781 | 4784 | \\ |
| 4782 | 4785 | \\const Ep = packed enum { |
| 4783 | 4786 | \\ Ok, |
| 4784 | 4787 | \\ SomethingElse, |
| 4785 | | \\ SomethingThird |
| 4788 | \\ SomethingThird, |
| 4786 | 4789 | \\}; |
| 4787 | 4790 | \\ |
| 4788 | 4791 | ); |
| ... | ... | @@ -4794,35 +4797,35 @@ test "zig fmt: union declaration" { |
| 4794 | 4797 | \\ Int: u8, |
| 4795 | 4798 | \\ Float: f32, |
| 4796 | 4799 | \\ None, |
| 4797 | | \\ Bool: bool |
| 4800 | \\ Bool: bool, |
| 4798 | 4801 | \\}; |
| 4799 | 4802 | \\ |
| 4800 | 4803 | \\const Ue = union(enum) { |
| 4801 | 4804 | \\ Int: u8, |
| 4802 | 4805 | \\ Float: f32, |
| 4803 | 4806 | \\ None, |
| 4804 | | \\ Bool: bool |
| 4807 | \\ Bool: bool, |
| 4805 | 4808 | \\}; |
| 4806 | 4809 | \\ |
| 4807 | 4810 | \\const E = enum { |
| 4808 | 4811 | \\ Int, |
| 4809 | 4812 | \\ Float, |
| 4810 | 4813 | \\ None, |
| 4811 | | \\ Bool |
| 4814 | \\ Bool, |
| 4812 | 4815 | \\}; |
| 4813 | 4816 | \\ |
| 4814 | 4817 | \\const Ue2 = union(E) { |
| 4815 | 4818 | \\ Int: u8, |
| 4816 | 4819 | \\ Float: f32, |
| 4817 | 4820 | \\ None, |
| 4818 | | \\ Bool: bool |
| 4821 | \\ Bool: bool, |
| 4819 | 4822 | \\}; |
| 4820 | 4823 | \\ |
| 4821 | 4824 | \\const Eu = extern union { |
| 4822 | 4825 | \\ Int: u8, |
| 4823 | 4826 | \\ Float: f32, |
| 4824 | 4827 | \\ None, |
| 4825 | | \\ Bool: bool |
| 4828 | \\ Bool: bool, |
| 4826 | 4829 | \\}; |
| 4827 | 4830 | \\ |
| 4828 | 4831 | ); |
| ... | ... | @@ -4834,7 +4837,7 @@ test "zig fmt: error set declaration" { |
| 4834 | 4837 | \\ A, |
| 4835 | 4838 | \\ B, |
| 4836 | 4839 | \\ |
| 4837 | | \\ C |
| 4840 | \\ C, |
| 4838 | 4841 | \\}; |
| 4839 | 4842 | \\ |
| 4840 | 4843 | ); |
| ... | ... | @@ -4843,9 +4846,15 @@ test "zig fmt: error set declaration" { |
| 4843 | 4846 | test "zig fmt: arrays" { |
| 4844 | 4847 | try testCanonical( |
| 4845 | 4848 | \\test "test array" { |
| 4846 | | \\ const a: [2]u8 = [2]u8{ 1, 2 }; |
| 4847 | | \\ const a: [2]u8 = []u8{ 1, 2 }; |
| 4848 | | \\ const a: [0]u8 = []u8{ }; |
| 4849 | \\ const a: [2]u8 = [2]u8 { |
| 4850 | \\ 1, |
| 4851 | \\ 2, |
| 4852 | \\ }; |
| 4853 | \\ const a: [2]u8 = []u8 { |
| 4854 | \\ 1, |
| 4855 | \\ 2, |
| 4856 | \\ }; |
| 4857 | \\ const a: [0]u8 = []u8{}; |
| 4849 | 4858 | \\} |
| 4850 | 4859 | \\ |
| 4851 | 4860 | ); |
| ... | ... | @@ -4853,10 +4862,18 @@ test "zig fmt: arrays" { |
| 4853 | 4862 | |
| 4854 | 4863 | test "zig fmt: container initializers" { |
| 4855 | 4864 | try testCanonical( |
| 4856 | | \\const a1 = []u8{ }; |
| 4857 | | \\const a2 = []u8{ 1, 2, 3, 4 }; |
| 4858 | | \\const s1 = S{ }; |
| 4859 | | \\const s2 = S{ .a = 1, .b = 2 }; |
| 4865 | \\const a1 = []u8{}; |
| 4866 | \\const a2 = []u8 { |
| 4867 | \\ 1, |
| 4868 | \\ 2, |
| 4869 | \\ 3, |
| 4870 | \\ 4, |
| 4871 | \\}; |
| 4872 | \\const s1 = S{}; |
| 4873 | \\const s2 = S { |
| 4874 | \\ .a = 1, |
| 4875 | \\ .b = 2, |
| 4876 | \\}; |
| 4860 | 4877 | \\ |
| 4861 | 4878 | ); |
| 4862 | 4879 | } |
| ... | ... | @@ -4900,31 +4917,34 @@ test "zig fmt: switch" { |
| 4900 | 4917 | \\ switch (0) { |
| 4901 | 4918 | \\ 0 => {}, |
| 4902 | 4919 | \\ 1 => unreachable, |
| 4903 | | \\ 2, 3 => {}, |
| 4920 | \\ 2, |
| 4921 | \\ 3 => {}, |
| 4904 | 4922 | \\ 4 ... 7 => {}, |
| 4905 | 4923 | \\ 1 + 4 * 3 + 22 => {}, |
| 4906 | 4924 | \\ else => { |
| 4907 | 4925 | \\ const a = 1; |
| 4908 | 4926 | \\ const b = a; |
| 4909 | | \\ } |
| 4927 | \\ }, |
| 4910 | 4928 | \\ } |
| 4911 | 4929 | \\ |
| 4912 | 4930 | \\ const res = switch (0) { |
| 4913 | 4931 | \\ 0 => 0, |
| 4914 | 4932 | \\ 1 => 2, |
| 4915 | 4933 | \\ 1 => a = 4, |
| 4916 | | \\ else => 4 |
| 4934 | \\ else => 4, |
| 4917 | 4935 | \\ }; |
| 4918 | 4936 | \\ |
| 4919 | 4937 | \\ const Union = union(enum) { |
| 4920 | 4938 | \\ Int: i64, |
| 4921 | | \\ Float: f64 |
| 4939 | \\ Float: f64, |
| 4922 | 4940 | \\ }; |
| 4923 | 4941 | \\ |
| 4924 | | \\ const u = Union{ .Int = 0 }; |
| 4942 | \\ const u = Union { |
| 4943 | \\ .Int = 0, |
| 4944 | \\ }; |
| 4925 | 4945 | \\ switch (u) { |
| 4926 | 4946 | \\ Union.Int => |int| {}, |
| 4927 | | \\ Union.Float => |*float| unreachable |
| 4947 | \\ Union.Float => |*float| unreachable, |
| 4928 | 4948 | \\ } |
| 4929 | 4949 | \\} |
| 4930 | 4950 | \\ |
| ... | ... | @@ -5000,7 +5020,11 @@ test "zig fmt: while" { |
| 5000 | 5020 | test "zig fmt: for" { |
| 5001 | 5021 | try testCanonical( |
| 5002 | 5022 | \\test "for" { |
| 5003 | | \\ const a = []u8{ 1, 2, 3 }; |
| 5023 | \\ const a = []u8 { |
| 5024 | \\ 1, |
| 5025 | \\ 2, |
| 5026 | \\ 3, |
| 5027 | \\ }; |
| 5004 | 5028 | \\ for (a) |v| { |
| 5005 | 5029 | \\ continue; |
| 5006 | 5030 | \\ } |
| ... | ... | @@ -5230,3 +5254,12 @@ test "zig fmt: error return" { |
| 5230 | 5254 | \\ |
| 5231 | 5255 | ); |
| 5232 | 5256 | } |
| 5257 | |
| 5258 | test "zig fmt: struct literals with fields on each line" { |
| 5259 | try testCanonical( |
| 5260 | \\var self = BufSet { |
| 5261 | \\ .hash_map = BufSetHashMap.init(a), |
| 5262 | \\}; |
| 5263 | \\ |
| 5264 | ); |
| 5265 | } |