Просмотр исходного кода

Update parse tree yaml for multi-file. (#3215)

Building on #3214, updates parse tree yaml to be:

```
- filename: name
  parse_tree: [ ... ]
```
Jon Ross-Perkins 2 лет назад
Родитель
Сommit
0b340a2ed2
100 измененных файлов с 2019 добавлено и 1888 удалено
  1. 2 0
      toolchain/lex/tokenized_buffer.h
  2. 16 15
      toolchain/parse/testdata/array/fail_require_close_bracket.carbon
  3. 12 11
      toolchain/parse/testdata/array/fail_require_semi.carbon
  4. 13 12
      toolchain/parse/testdata/array/with_length.carbon
  5. 12 11
      toolchain/parse/testdata/array/without_length.carbon
  6. 25 24
      toolchain/parse/testdata/basics/builtin_types.carbon
  7. 4 3
      toolchain/parse/testdata/basics/empty.carbon
  8. 5 4
      toolchain/parse/testdata/basics/empty_declaration.carbon
  9. 22 21
      toolchain/parse/testdata/basics/fail_invalid_designators.carbon
  10. 5 4
      toolchain/parse/testdata/basics/fail_no_intro_with_semi.carbon
  11. 5 4
      toolchain/parse/testdata/basics/fail_no_intro_without_semi.carbon
  12. 16 15
      toolchain/parse/testdata/basics/fail_paren_match_regression.carbon
  13. 28 27
      toolchain/parse/testdata/basics/function_call.carbon
  14. 31 0
      toolchain/parse/testdata/basics/multifile.carbon
  15. 58 57
      toolchain/parse/testdata/basics/numeric_literals.carbon
  16. 24 23
      toolchain/parse/testdata/basics/parens.carbon
  17. 13 12
      toolchain/parse/testdata/class/basic.carbon
  18. 60 59
      toolchain/parse/testdata/class/fn_definitions.carbon
  19. 13 12
      toolchain/parse/testdata/class/var.carbon
  20. 26 25
      toolchain/parse/testdata/for/fail_colon_instead_of_in.carbon
  21. 18 17
      toolchain/parse/testdata/for/fail_missing_cond.carbon
  22. 26 25
      toolchain/parse/testdata/for/fail_missing_in.carbon
  23. 21 20
      toolchain/parse/testdata/for/fail_missing_var.carbon
  24. 19 18
      toolchain/parse/testdata/for/fail_square_brackets.carbon
  25. 30 29
      toolchain/parse/testdata/for/nested.carbon
  26. 26 25
      toolchain/parse/testdata/for/simple.carbon
  27. 14 13
      toolchain/parse/testdata/function/declaration/addr.carbon
  28. 9 8
      toolchain/parse/testdata/function/declaration/basic.carbon
  29. 11 10
      toolchain/parse/testdata/function/declaration/deduced_empty.carbon
  30. 18 17
      toolchain/parse/testdata/function/declaration/deduced_params.carbon
  31. 7 6
      toolchain/parse/testdata/function/declaration/fail_identifier_instead_of_sig.carbon
  32. 15 14
      toolchain/parse/testdata/function/declaration/fail_missing_deduced_close.carbon
  33. 7 6
      toolchain/parse/testdata/function/declaration/fail_missing_name.carbon
  34. 10 9
      toolchain/parse/testdata/function/declaration/fail_no_sig_or_semi.carbon
  35. 7 6
      toolchain/parse/testdata/function/declaration/fail_only_fn_and_semi.carbon
  36. 7 6
      toolchain/parse/testdata/function/declaration/fail_repeated_fn_and_semi.carbon
  37. 12 11
      toolchain/parse/testdata/function/declaration/fail_skip_indented_newline_until_outdent.carbon
  38. 12 11
      toolchain/parse/testdata/function/declaration/fail_skip_indented_newline_with_semi.carbon
  39. 12 11
      toolchain/parse/testdata/function/declaration/fail_skip_indented_newline_without_semi.carbon
  40. 12 11
      toolchain/parse/testdata/function/declaration/fail_skip_to_newline_without_semi.carbon
  41. 10 9
      toolchain/parse/testdata/function/declaration/fail_skip_without_semi_to_curly.carbon
  42. 12 11
      toolchain/parse/testdata/function/declaration/fail_with_identifier_as_param.carbon
  43. 7 6
      toolchain/parse/testdata/function/declaration/fail_without_name_and_many_tokens_in_params.carbon
  44. 16 15
      toolchain/parse/testdata/function/declaration/params.carbon
  45. 11 10
      toolchain/parse/testdata/function/declaration/with_return_type.carbon
  46. 10 9
      toolchain/parse/testdata/function/definition/basic.carbon
  47. 11 10
      toolchain/parse/testdata/function/definition/fail_identifier_in_statements.carbon
  48. 26 25
      toolchain/parse/testdata/function/definition/with_params.carbon
  49. 15 14
      toolchain/parse/testdata/function/definition/with_return_type.carbon
  50. 19 18
      toolchain/parse/testdata/generics/deduced_params/empty.carbon
  51. 30 29
      toolchain/parse/testdata/generics/deduced_params/fail_no_parens.carbon
  52. 25 24
      toolchain/parse/testdata/generics/deduced_params/one.carbon
  53. 27 26
      toolchain/parse/testdata/generics/deduced_params/one_suffix_comma.carbon
  54. 65 64
      toolchain/parse/testdata/generics/deduced_params/six.carbon
  55. 33 32
      toolchain/parse/testdata/generics/deduced_params/two.carbon
  56. 35 34
      toolchain/parse/testdata/generics/deduced_params/two_suffix_comma.carbon
  57. 12 11
      toolchain/parse/testdata/generics/generic_params/basic.carbon
  58. 13 12
      toolchain/parse/testdata/generics/generic_params/template.carbon
  59. 14 13
      toolchain/parse/testdata/generics/generic_params/template_addr.carbon
  60. 38 37
      toolchain/parse/testdata/generics/interface/basic.carbon
  61. 8 7
      toolchain/parse/testdata/generics/interface/declaration.carbon
  62. 8 7
      toolchain/parse/testdata/generics/interface/empty_body.carbon
  63. 7 6
      toolchain/parse/testdata/generics/interface/fail_missing_name.carbon
  64. 13 12
      toolchain/parse/testdata/generics/interface/fail_missing_open_curly.carbon
  65. 23 22
      toolchain/parse/testdata/generics/interface/fail_no_impl_allowed.carbon
  66. 38 37
      toolchain/parse/testdata/generics/interface/fail_self_param_syntax.carbon
  67. 15 14
      toolchain/parse/testdata/generics/interface/non_instance_fn.carbon
  68. 41 40
      toolchain/parse/testdata/generics/interface/self_pointer.carbon
  69. 13 12
      toolchain/parse/testdata/generics/named_constraint/basic.carbon
  70. 23 22
      toolchain/parse/testdata/generics/named_constraint/fail_no_impl_allowed.carbon
  71. 15 14
      toolchain/parse/testdata/generics/params/empty.carbon
  72. 21 20
      toolchain/parse/testdata/generics/params/one.carbon
  73. 23 22
      toolchain/parse/testdata/generics/params/one_suffix_comma.carbon
  74. 61 60
      toolchain/parse/testdata/generics/params/six.carbon
  75. 29 28
      toolchain/parse/testdata/generics/params/two.carbon
  76. 31 30
      toolchain/parse/testdata/generics/params/two_suffix_comma.carbon
  77. 24 23
      toolchain/parse/testdata/if/basic.carbon
  78. 48 47
      toolchain/parse/testdata/if/else.carbon
  79. 52 51
      toolchain/parse/testdata/if/fail_else_unbraced.carbon
  80. 35 34
      toolchain/parse/testdata/if/fail_errors.carbon
  81. 16 15
      toolchain/parse/testdata/if/fail_missing_cond.carbon
  82. 19 18
      toolchain/parse/testdata/if/fail_square_brackets.carbon
  83. 25 24
      toolchain/parse/testdata/if/fail_unbraced.carbon
  84. 31 30
      toolchain/parse/testdata/if_expression/basic.carbon
  85. 21 20
      toolchain/parse/testdata/if_expression/fail_condition_missing.carbon
  86. 22 21
      toolchain/parse/testdata/if_expression/fail_else_expr_missing.carbon
  87. 22 21
      toolchain/parse/testdata/if_expression/fail_else_missing.carbon
  88. 22 21
      toolchain/parse/testdata/if_expression/fail_then_expr_missing.carbon
  89. 21 20
      toolchain/parse/testdata/if_expression/fail_then_missing.carbon
  90. 18 17
      toolchain/parse/testdata/if_expression/fail_top_level_if.carbon
  91. 32 31
      toolchain/parse/testdata/if_expression/in_type.carbon
  92. 31 30
      toolchain/parse/testdata/if_expression/precedence.carbon
  93. 14 13
      toolchain/parse/testdata/index/assign_to_var.carbon
  94. 14 13
      toolchain/parse/testdata/index/fail_empty_expr.carbon
  95. 14 13
      toolchain/parse/testdata/index/fail_malformed_expr.carbon
  96. 19 18
      toolchain/parse/testdata/namespace/basic.carbon
  97. 7 6
      toolchain/parse/testdata/namespace/fail_args.carbon
  98. 15 14
      toolchain/parse/testdata/namespace/fail_arrow.carbon
  99. 9 8
      toolchain/parse/testdata/namespace/fail_incomplete_name.carbon
  100. 7 6
      toolchain/parse/testdata/namespace/fail_no_name.carbon

+ 2 - 0
toolchain/lex/tokenized_buffer.h

@@ -271,6 +271,8 @@ class TokenizedBuffer : public Printable<TokenizedBuffer> {
     return expected_parse_tree_size_;
   }
 
+  auto filename() const -> llvm::StringRef { return source_->filename(); }
+
  private:
   // Implementation detail struct implementing the actual lexer logic.
   class Lexer;

+ 16 - 15
toolchain/parse/testdata/array/fail_require_close_bracket.carbon

@@ -16,18 +16,19 @@
 // CHECK:STDERR:             ^
 var x: [i32;;
 
-// CHECK:STDERR: fail_require_close_bracket.carbon:[[@LINE+14]]:19: `var` declarations must end with a `;`.
-// CHECK:STDERR: // CHECK:STDOUT: ]
-// CHECK:STDERR:                   ^
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'VariableIntroducer', text: 'var'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'x'},
-// CHECK:STDOUT:         {kind: 'ArrayExpressionStart', text: '['},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:       {kind: 'ArrayExpressionSemi', text: ';', subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'InvalidParse', text: ';', has_error: yes},
-// CHECK:STDOUT:     {kind: 'ArrayExpression', text: ']', has_error: yes, subtree_size: 5},
-// CHECK:STDOUT:   {kind: 'PatternBinding', text: ':', subtree_size: 7},
-// CHECK:STDOUT: {kind: 'VariableDeclaration', text: 'var', has_error: yes, subtree_size: 9},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDERR: fail_require_close_bracket.carbon:[[@LINE+15]]:21: `var` declarations must end with a `;`.
+// CHECK:STDERR: // CHECK:STDOUT:   ]
+// CHECK:STDERR:                     ^
+// CHECK:STDOUT: - filename: fail_require_close_bracket.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'x'},
+// CHECK:STDOUT:             {kind: 'ArrayExpressionStart', text: '['},
+// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'ArrayExpressionSemi', text: ';', subtree_size: 3},
+// CHECK:STDOUT:           {kind: 'InvalidParse', text: ';', has_error: yes},
+// CHECK:STDOUT:         {kind: 'ArrayExpression', text: ']', has_error: yes, subtree_size: 5},
+// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 7},
+// CHECK:STDOUT:     {kind: 'VariableDeclaration', text: 'var', has_error: yes, subtree_size: 9},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 12 - 11
toolchain/parse/testdata/array/fail_require_semi.carbon

@@ -9,14 +9,15 @@
 // CHECK:STDERR:            ^
 var x: [i32];
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'VariableIntroducer', text: 'var'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'x'},
-// CHECK:STDOUT:         {kind: 'ArrayExpressionStart', text: '['},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:       {kind: 'ArrayExpressionSemi', text: ']', has_error: yes, subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'ArrayExpression', text: ']', has_error: yes, subtree_size: 4},
-// CHECK:STDOUT:   {kind: 'PatternBinding', text: ':', subtree_size: 6},
-// CHECK:STDOUT: {kind: 'VariableDeclaration', text: ';', subtree_size: 8},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: fail_require_semi.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'x'},
+// CHECK:STDOUT:             {kind: 'ArrayExpressionStart', text: '['},
+// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'ArrayExpressionSemi', text: ']', has_error: yes, subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'ArrayExpression', text: ']', has_error: yes, subtree_size: 4},
+// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 6},
+// CHECK:STDOUT:     {kind: 'VariableDeclaration', text: ';', subtree_size: 8},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 13 - 12
toolchain/parse/testdata/array/with_length.carbon

@@ -6,15 +6,16 @@
 
 var x: [i32; 10];
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'VariableIntroducer', text: 'var'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'x'},
-// CHECK:STDOUT:         {kind: 'ArrayExpressionStart', text: '['},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:       {kind: 'ArrayExpressionSemi', text: ';', subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'Literal', text: '10'},
-// CHECK:STDOUT:     {kind: 'ArrayExpression', text: ']', subtree_size: 5},
-// CHECK:STDOUT:   {kind: 'PatternBinding', text: ':', subtree_size: 7},
-// CHECK:STDOUT: {kind: 'VariableDeclaration', text: ';', subtree_size: 9},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: with_length.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'x'},
+// CHECK:STDOUT:             {kind: 'ArrayExpressionStart', text: '['},
+// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'ArrayExpressionSemi', text: ';', subtree_size: 3},
+// CHECK:STDOUT:           {kind: 'Literal', text: '10'},
+// CHECK:STDOUT:         {kind: 'ArrayExpression', text: ']', subtree_size: 5},
+// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 7},
+// CHECK:STDOUT:     {kind: 'VariableDeclaration', text: ';', subtree_size: 9},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 12 - 11
toolchain/parse/testdata/array/without_length.carbon

@@ -6,14 +6,15 @@
 
 var x: [i32;];
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'VariableIntroducer', text: 'var'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'x'},
-// CHECK:STDOUT:         {kind: 'ArrayExpressionStart', text: '['},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:       {kind: 'ArrayExpressionSemi', text: ';', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'ArrayExpression', text: ']', subtree_size: 4},
-// CHECK:STDOUT:   {kind: 'PatternBinding', text: ':', subtree_size: 6},
-// CHECK:STDOUT: {kind: 'VariableDeclaration', text: ';', subtree_size: 8},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: without_length.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'x'},
+// CHECK:STDOUT:             {kind: 'ArrayExpressionStart', text: '['},
+// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'ArrayExpressionSemi', text: ';', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'ArrayExpression', text: ']', subtree_size: 4},
+// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 6},
+// CHECK:STDOUT:     {kind: 'VariableDeclaration', text: ';', subtree_size: 8},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 25 - 24
toolchain/parse/testdata/basics/builtin_types.carbon

@@ -8,27 +8,28 @@ var test_i32: i32 = 0;
 var test_f64: f64 = 0.1;
 var test_str: String = "Test";
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'VariableIntroducer', text: 'var'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'test_i32'},
-// CHECK:STDOUT:     {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:   {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:   {kind: 'VariableInitializer', text: '='},
-// CHECK:STDOUT:   {kind: 'Literal', text: '0'},
-// CHECK:STDOUT: {kind: 'VariableDeclaration', text: ';', subtree_size: 7},
-// CHECK:STDOUT:   {kind: 'VariableIntroducer', text: 'var'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'test_f64'},
-// CHECK:STDOUT:     {kind: 'Literal', text: 'f64'},
-// CHECK:STDOUT:   {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:   {kind: 'VariableInitializer', text: '='},
-// CHECK:STDOUT:   {kind: 'Literal', text: '0.1'},
-// CHECK:STDOUT: {kind: 'VariableDeclaration', text: ';', subtree_size: 7},
-// CHECK:STDOUT:   {kind: 'VariableIntroducer', text: 'var'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'test_str'},
-// CHECK:STDOUT:     {kind: 'Literal', text: 'String'},
-// CHECK:STDOUT:   {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:   {kind: 'VariableInitializer', text: '='},
-// CHECK:STDOUT:   {kind: 'Literal', text: '"Test"'},
-// CHECK:STDOUT: {kind: 'VariableDeclaration', text: ';', subtree_size: 7},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: builtin_types.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'test_i32'},
+// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},
+// CHECK:STDOUT:       {kind: 'Literal', text: '0'},
+// CHECK:STDOUT:     {kind: 'VariableDeclaration', text: ';', subtree_size: 7},
+// CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'test_f64'},
+// CHECK:STDOUT:         {kind: 'Literal', text: 'f64'},
+// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},
+// CHECK:STDOUT:       {kind: 'Literal', text: '0.1'},
+// CHECK:STDOUT:     {kind: 'VariableDeclaration', text: ';', subtree_size: 7},
+// CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'test_str'},
+// CHECK:STDOUT:         {kind: 'Literal', text: 'String'},
+// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},
+// CHECK:STDOUT:       {kind: 'Literal', text: '"Test"'},
+// CHECK:STDOUT:     {kind: 'VariableDeclaration', text: ';', subtree_size: 7},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 4 - 3
toolchain/parse/testdata/basics/empty.carbon

@@ -4,6 +4,7 @@
 //
 // AUTOUPDATE
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: empty.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 5 - 4
toolchain/parse/testdata/basics/empty_declaration.carbon

@@ -6,7 +6,8 @@
 
 ;
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT: {kind: 'EmptyDeclaration', text: ';'},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: empty_declaration.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:     {kind: 'EmptyDeclaration', text: ';'},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 22 - 21
toolchain/parse/testdata/basics/fail_invalid_designators.carbon

@@ -20,24 +20,25 @@ fn F() {
   a.42;
 }
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:     {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'F'},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
-// CHECK:STDOUT:       {kind: 'NameExpression', text: 'a'},
-// CHECK:STDOUT:       {kind: 'Name', text: ';', has_error: yes},
-// CHECK:STDOUT:     {kind: 'MemberAccessExpression', text: '.', subtree_size: 3},
-// CHECK:STDOUT:   {kind: 'ExpressionStatement', text: ';', has_error: yes, subtree_size: 4},
-// CHECK:STDOUT:       {kind: 'NameExpression', text: 'a'},
-// CHECK:STDOUT:       {kind: 'Name', text: 'fn', has_error: yes},
-// CHECK:STDOUT:     {kind: 'MemberAccessExpression', text: '.', subtree_size: 3},
-// CHECK:STDOUT:   {kind: 'ExpressionStatement', text: ';', subtree_size: 4},
-// CHECK:STDOUT:       {kind: 'NameExpression', text: 'a'},
-// CHECK:STDOUT:       {kind: 'Name', text: '42', has_error: yes},
-// CHECK:STDOUT:     {kind: 'MemberAccessExpression', text: '.', subtree_size: 3},
-// CHECK:STDOUT:   {kind: 'ExpressionStatement', text: ';', has_error: yes, subtree_size: 4},
-// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 18},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: fail_invalid_designators.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'F'},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
+// CHECK:STDOUT:           {kind: 'NameExpression', text: 'a'},
+// CHECK:STDOUT:           {kind: 'Name', text: ';', has_error: yes},
+// CHECK:STDOUT:         {kind: 'MemberAccessExpression', text: '.', subtree_size: 3},
+// CHECK:STDOUT:       {kind: 'ExpressionStatement', text: ';', has_error: yes, subtree_size: 4},
+// CHECK:STDOUT:           {kind: 'NameExpression', text: 'a'},
+// CHECK:STDOUT:           {kind: 'Name', text: 'fn', has_error: yes},
+// CHECK:STDOUT:         {kind: 'MemberAccessExpression', text: '.', subtree_size: 3},
+// CHECK:STDOUT:       {kind: 'ExpressionStatement', text: ';', subtree_size: 4},
+// CHECK:STDOUT:           {kind: 'NameExpression', text: 'a'},
+// CHECK:STDOUT:           {kind: 'Name', text: '42', has_error: yes},
+// CHECK:STDOUT:         {kind: 'MemberAccessExpression', text: '.', subtree_size: 3},
+// CHECK:STDOUT:       {kind: 'ExpressionStatement', text: ';', has_error: yes, subtree_size: 4},
+// CHECK:STDOUT:     {kind: 'FunctionDefinition', text: '}', subtree_size: 18},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 5 - 4
toolchain/parse/testdata/basics/fail_no_intro_with_semi.carbon

@@ -9,7 +9,8 @@
 // CHECK:STDERR: ^
 foo;
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT: {kind: 'EmptyDeclaration', text: ';', has_error: yes},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: fail_no_intro_with_semi.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:     {kind: 'EmptyDeclaration', text: ';', has_error: yes},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 5 - 4
toolchain/parse/testdata/basics/fail_no_intro_without_semi.carbon

@@ -9,7 +9,8 @@
 // CHECK:STDERR: ^
 foo bar baz
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT: {kind: 'EmptyDeclaration', text: 'foo', has_error: yes},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: fail_no_intro_without_semi.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:     {kind: 'EmptyDeclaration', text: 'foo', has_error: yes},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 16 - 15
toolchain/parse/testdata/basics/fail_paren_match_regression.carbon

@@ -12,18 +12,19 @@
 // CHECK:STDERR:            ^
 var = (foo {})
 
-// CHECK:STDERR: fail_paren_match_regression.carbon:[[@LINE+14]]:19: `var` declarations must end with a `;`.
-// CHECK:STDERR: // CHECK:STDOUT: ]
-// CHECK:STDERR:                   ^
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'VariableIntroducer', text: 'var'},
-// CHECK:STDOUT:     {kind: 'Name', text: '=', has_error: yes},
-// CHECK:STDOUT:     {kind: 'InvalidParse', text: '=', has_error: yes},
-// CHECK:STDOUT:   {kind: 'PatternBinding', text: '=', has_error: yes, subtree_size: 3},
-// CHECK:STDOUT:   {kind: 'VariableInitializer', text: '='},
-// CHECK:STDOUT:     {kind: 'ParenExpressionOrTupleLiteralStart', text: '('},
-// CHECK:STDOUT:     {kind: 'NameExpression', text: 'foo'},
-// CHECK:STDOUT:   {kind: 'ParenExpression', text: ')', has_error: yes, subtree_size: 3},
-// CHECK:STDOUT: {kind: 'VariableDeclaration', text: 'var', has_error: yes, subtree_size: 9},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDERR: fail_paren_match_regression.carbon:[[@LINE+15]]:21: `var` declarations must end with a `;`.
+// CHECK:STDERR: // CHECK:STDOUT:   ]
+// CHECK:STDERR:                     ^
+// CHECK:STDOUT: - filename: fail_paren_match_regression.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
+// CHECK:STDOUT:         {kind: 'Name', text: '=', has_error: yes},
+// CHECK:STDOUT:         {kind: 'InvalidParse', text: '=', has_error: yes},
+// CHECK:STDOUT:       {kind: 'PatternBinding', text: '=', has_error: yes, subtree_size: 3},
+// CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},
+// CHECK:STDOUT:         {kind: 'ParenExpressionOrTupleLiteralStart', text: '('},
+// CHECK:STDOUT:         {kind: 'NameExpression', text: 'foo'},
+// CHECK:STDOUT:       {kind: 'ParenExpression', text: ')', has_error: yes, subtree_size: 3},
+// CHECK:STDOUT:     {kind: 'VariableDeclaration', text: 'var', has_error: yes, subtree_size: 9},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 28 - 27
toolchain/parse/testdata/basics/function_call.carbon

@@ -9,31 +9,32 @@ fn F() {
   a.b.f(c.d, (e)).g();
 }
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:     {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'F'},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
-// CHECK:STDOUT:                   {kind: 'NameExpression', text: 'a'},
-// CHECK:STDOUT:                   {kind: 'Name', text: 'b'},
+// CHECK:STDOUT: - filename: function_call.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'F'},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
+// CHECK:STDOUT:                       {kind: 'NameExpression', text: 'a'},
+// CHECK:STDOUT:                       {kind: 'Name', text: 'b'},
+// CHECK:STDOUT:                     {kind: 'MemberAccessExpression', text: '.', subtree_size: 3},
+// CHECK:STDOUT:                     {kind: 'Name', text: 'f'},
+// CHECK:STDOUT:                   {kind: 'MemberAccessExpression', text: '.', subtree_size: 5},
+// CHECK:STDOUT:                 {kind: 'CallExpressionStart', text: '(', subtree_size: 6},
+// CHECK:STDOUT:                   {kind: 'NameExpression', text: 'c'},
+// CHECK:STDOUT:                   {kind: 'Name', text: 'd'},
 // CHECK:STDOUT:                 {kind: 'MemberAccessExpression', text: '.', subtree_size: 3},
-// CHECK:STDOUT:                 {kind: 'Name', text: 'f'},
-// CHECK:STDOUT:               {kind: 'MemberAccessExpression', text: '.', subtree_size: 5},
-// CHECK:STDOUT:             {kind: 'CallExpressionStart', text: '(', subtree_size: 6},
-// CHECK:STDOUT:               {kind: 'NameExpression', text: 'c'},
-// CHECK:STDOUT:               {kind: 'Name', text: 'd'},
-// CHECK:STDOUT:             {kind: 'MemberAccessExpression', text: '.', subtree_size: 3},
-// CHECK:STDOUT:             {kind: 'CallExpressionComma', text: ','},
-// CHECK:STDOUT:               {kind: 'ParenExpressionOrTupleLiteralStart', text: '('},
-// CHECK:STDOUT:               {kind: 'NameExpression', text: 'e'},
-// CHECK:STDOUT:             {kind: 'ParenExpression', text: ')', subtree_size: 3},
-// CHECK:STDOUT:           {kind: 'CallExpression', text: ')', subtree_size: 14},
-// CHECK:STDOUT:           {kind: 'Name', text: 'g'},
-// CHECK:STDOUT:         {kind: 'MemberAccessExpression', text: '.', subtree_size: 16},
-// CHECK:STDOUT:       {kind: 'CallExpressionStart', text: '(', subtree_size: 17},
-// CHECK:STDOUT:     {kind: 'CallExpression', text: ')', subtree_size: 18},
-// CHECK:STDOUT:   {kind: 'ExpressionStatement', text: ';', subtree_size: 19},
-// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 25},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT:                 {kind: 'CallExpressionComma', text: ','},
+// CHECK:STDOUT:                   {kind: 'ParenExpressionOrTupleLiteralStart', text: '('},
+// CHECK:STDOUT:                   {kind: 'NameExpression', text: 'e'},
+// CHECK:STDOUT:                 {kind: 'ParenExpression', text: ')', subtree_size: 3},
+// CHECK:STDOUT:               {kind: 'CallExpression', text: ')', subtree_size: 14},
+// CHECK:STDOUT:               {kind: 'Name', text: 'g'},
+// CHECK:STDOUT:             {kind: 'MemberAccessExpression', text: '.', subtree_size: 16},
+// CHECK:STDOUT:           {kind: 'CallExpressionStart', text: '(', subtree_size: 17},
+// CHECK:STDOUT:         {kind: 'CallExpression', text: ')', subtree_size: 18},
+// CHECK:STDOUT:       {kind: 'ExpressionStatement', text: ';', subtree_size: 19},
+// CHECK:STDOUT:     {kind: 'FunctionDefinition', text: '}', subtree_size: 25},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 31 - 0
toolchain/parse/testdata/basics/multifile.carbon

@@ -0,0 +1,31 @@
+// Part of the Carbon Language project, under the Apache License v2.0 with LLVM
+// Exceptions. See /LICENSE for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+// AUTOUPDATE
+
+// CHECK:STDOUT: - filename: a.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'A'},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
+// CHECK:STDOUT:     {kind: 'FunctionDefinition', text: '}', subtree_size: 6},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]
+// CHECK:STDOUT: - filename: b.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'B'},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
+// CHECK:STDOUT:     {kind: 'FunctionDefinition', text: '}', subtree_size: 6},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]
+// --- a.carbon
+fn A() {}
+
+// --- b.carbon
+fn B() {}

+ 58 - 57
toolchain/parse/testdata/basics/numeric_literals.carbon

@@ -25,60 +25,61 @@ fn F() {
   );
 }
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:     {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'F'},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
-// CHECK:STDOUT:     {kind: 'VariableIntroducer', text: 'var'},
-// CHECK:STDOUT:       {kind: 'Name', text: 'ints'},
-// CHECK:STDOUT:           {kind: 'ArrayExpressionStart', text: '['},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:         {kind: 'ArrayExpressionSemi', text: ';', subtree_size: 3},
-// CHECK:STDOUT:         {kind: 'Literal', text: '5'},
-// CHECK:STDOUT:       {kind: 'ArrayExpression', text: ']', subtree_size: 5},
-// CHECK:STDOUT:     {kind: 'PatternBinding', text: ':', subtree_size: 7},
-// CHECK:STDOUT:     {kind: 'VariableInitializer', text: '='},
-// CHECK:STDOUT:       {kind: 'ParenExpressionOrTupleLiteralStart', text: '('},
-// CHECK:STDOUT:       {kind: 'Literal', text: '8'},
-// CHECK:STDOUT:       {kind: 'TupleLiteralComma', text: ','},
-// CHECK:STDOUT:       {kind: 'Literal', text: '9'},
-// CHECK:STDOUT:       {kind: 'TupleLiteralComma', text: ','},
-// CHECK:STDOUT:       {kind: 'Literal', text: '0x8'},
-// CHECK:STDOUT:       {kind: 'TupleLiteralComma', text: ','},
-// CHECK:STDOUT:       {kind: 'Literal', text: '0b1000'},
-// CHECK:STDOUT:       {kind: 'TupleLiteralComma', text: ','},
-// CHECK:STDOUT:       {kind: 'Literal', text: '39999999999999999993'},
-// CHECK:STDOUT:       {kind: 'TupleLiteralComma', text: ','},
-// CHECK:STDOUT:     {kind: 'TupleLiteral', text: ')', subtree_size: 12},
-// CHECK:STDOUT:   {kind: 'VariableDeclaration', text: ';', subtree_size: 22},
-// CHECK:STDOUT:     {kind: 'VariableIntroducer', text: 'var'},
-// CHECK:STDOUT:       {kind: 'Name', text: 'floats'},
-// CHECK:STDOUT:           {kind: 'ArrayExpressionStart', text: '['},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'f64'},
-// CHECK:STDOUT:         {kind: 'ArrayExpressionSemi', text: ';', subtree_size: 3},
-// CHECK:STDOUT:         {kind: 'Literal', text: '7'},
-// CHECK:STDOUT:       {kind: 'ArrayExpression', text: ']', subtree_size: 5},
-// CHECK:STDOUT:     {kind: 'PatternBinding', text: ':', subtree_size: 7},
-// CHECK:STDOUT:     {kind: 'VariableInitializer', text: '='},
-// CHECK:STDOUT:       {kind: 'ParenExpressionOrTupleLiteralStart', text: '('},
-// CHECK:STDOUT:       {kind: 'Literal', text: '0.9'},
-// CHECK:STDOUT:       {kind: 'TupleLiteralComma', text: ','},
-// CHECK:STDOUT:       {kind: 'Literal', text: '8.0'},
-// CHECK:STDOUT:       {kind: 'TupleLiteralComma', text: ','},
-// CHECK:STDOUT:       {kind: 'Literal', text: '80.0'},
-// CHECK:STDOUT:       {kind: 'TupleLiteralComma', text: ','},
-// CHECK:STDOUT:       {kind: 'Literal', text: '1.0e7'},
-// CHECK:STDOUT:       {kind: 'TupleLiteralComma', text: ','},
-// CHECK:STDOUT:       {kind: 'Literal', text: '1.0e8'},
-// CHECK:STDOUT:       {kind: 'TupleLiteralComma', text: ','},
-// CHECK:STDOUT:       {kind: 'Literal', text: '1.0e-8'},
-// CHECK:STDOUT:       {kind: 'TupleLiteralComma', text: ','},
-// CHECK:STDOUT:       {kind: 'Literal', text: '39999999999999999993.0e39999999999999999993'},
-// CHECK:STDOUT:       {kind: 'TupleLiteralComma', text: ','},
-// CHECK:STDOUT:     {kind: 'TupleLiteral', text: ')', subtree_size: 16},
-// CHECK:STDOUT:   {kind: 'VariableDeclaration', text: ';', subtree_size: 26},
-// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 54},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: numeric_literals.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'F'},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
+// CHECK:STDOUT:         {kind: 'VariableIntroducer', text: 'var'},
+// CHECK:STDOUT:           {kind: 'Name', text: 'ints'},
+// CHECK:STDOUT:               {kind: 'ArrayExpressionStart', text: '['},
+// CHECK:STDOUT:               {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'ArrayExpressionSemi', text: ';', subtree_size: 3},
+// CHECK:STDOUT:             {kind: 'Literal', text: '5'},
+// CHECK:STDOUT:           {kind: 'ArrayExpression', text: ']', subtree_size: 5},
+// CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 7},
+// CHECK:STDOUT:         {kind: 'VariableInitializer', text: '='},
+// CHECK:STDOUT:           {kind: 'ParenExpressionOrTupleLiteralStart', text: '('},
+// CHECK:STDOUT:           {kind: 'Literal', text: '8'},
+// CHECK:STDOUT:           {kind: 'TupleLiteralComma', text: ','},
+// CHECK:STDOUT:           {kind: 'Literal', text: '9'},
+// CHECK:STDOUT:           {kind: 'TupleLiteralComma', text: ','},
+// CHECK:STDOUT:           {kind: 'Literal', text: '0x8'},
+// CHECK:STDOUT:           {kind: 'TupleLiteralComma', text: ','},
+// CHECK:STDOUT:           {kind: 'Literal', text: '0b1000'},
+// CHECK:STDOUT:           {kind: 'TupleLiteralComma', text: ','},
+// CHECK:STDOUT:           {kind: 'Literal', text: '39999999999999999993'},
+// CHECK:STDOUT:           {kind: 'TupleLiteralComma', text: ','},
+// CHECK:STDOUT:         {kind: 'TupleLiteral', text: ')', subtree_size: 12},
+// CHECK:STDOUT:       {kind: 'VariableDeclaration', text: ';', subtree_size: 22},
+// CHECK:STDOUT:         {kind: 'VariableIntroducer', text: 'var'},
+// CHECK:STDOUT:           {kind: 'Name', text: 'floats'},
+// CHECK:STDOUT:               {kind: 'ArrayExpressionStart', text: '['},
+// CHECK:STDOUT:               {kind: 'Literal', text: 'f64'},
+// CHECK:STDOUT:             {kind: 'ArrayExpressionSemi', text: ';', subtree_size: 3},
+// CHECK:STDOUT:             {kind: 'Literal', text: '7'},
+// CHECK:STDOUT:           {kind: 'ArrayExpression', text: ']', subtree_size: 5},
+// CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 7},
+// CHECK:STDOUT:         {kind: 'VariableInitializer', text: '='},
+// CHECK:STDOUT:           {kind: 'ParenExpressionOrTupleLiteralStart', text: '('},
+// CHECK:STDOUT:           {kind: 'Literal', text: '0.9'},
+// CHECK:STDOUT:           {kind: 'TupleLiteralComma', text: ','},
+// CHECK:STDOUT:           {kind: 'Literal', text: '8.0'},
+// CHECK:STDOUT:           {kind: 'TupleLiteralComma', text: ','},
+// CHECK:STDOUT:           {kind: 'Literal', text: '80.0'},
+// CHECK:STDOUT:           {kind: 'TupleLiteralComma', text: ','},
+// CHECK:STDOUT:           {kind: 'Literal', text: '1.0e7'},
+// CHECK:STDOUT:           {kind: 'TupleLiteralComma', text: ','},
+// CHECK:STDOUT:           {kind: 'Literal', text: '1.0e8'},
+// CHECK:STDOUT:           {kind: 'TupleLiteralComma', text: ','},
+// CHECK:STDOUT:           {kind: 'Literal', text: '1.0e-8'},
+// CHECK:STDOUT:           {kind: 'TupleLiteralComma', text: ','},
+// CHECK:STDOUT:           {kind: 'Literal', text: '39999999999999999993.0e39999999999999999993'},
+// CHECK:STDOUT:           {kind: 'TupleLiteralComma', text: ','},
+// CHECK:STDOUT:         {kind: 'TupleLiteral', text: ')', subtree_size: 16},
+// CHECK:STDOUT:       {kind: 'VariableDeclaration', text: ';', subtree_size: 26},
+// CHECK:STDOUT:     {kind: 'FunctionDefinition', text: '}', subtree_size: 54},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 24 - 23
toolchain/parse/testdata/basics/parens.carbon

@@ -8,28 +8,29 @@ fn F(n: i32) -> i32 {
   return ((((n))));
 }
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:     {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'F'},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'Name', text: 'n'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 5},
-// CHECK:STDOUT:       {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:     {kind: 'ReturnType', text: '->', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 10},
-// CHECK:STDOUT:     {kind: 'ReturnStatementStart', text: 'return'},
-// CHECK:STDOUT:       {kind: 'ParenExpressionOrTupleLiteralStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParenExpressionOrTupleLiteralStart', text: '('},
+// CHECK:STDOUT: - filename: parens.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'F'},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:             {kind: 'Name', text: 'n'},
+// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 5},
+// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'ReturnType', text: '->', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 10},
+// CHECK:STDOUT:         {kind: 'ReturnStatementStart', text: 'return'},
 // CHECK:STDOUT:           {kind: 'ParenExpressionOrTupleLiteralStart', text: '('},
 // CHECK:STDOUT:             {kind: 'ParenExpressionOrTupleLiteralStart', text: '('},
-// CHECK:STDOUT:             {kind: 'NameExpression', text: 'n'},
-// CHECK:STDOUT:           {kind: 'ParenExpression', text: ')', subtree_size: 3},
-// CHECK:STDOUT:         {kind: 'ParenExpression', text: ')', subtree_size: 5},
-// CHECK:STDOUT:       {kind: 'ParenExpression', text: ')', subtree_size: 7},
-// CHECK:STDOUT:     {kind: 'ParenExpression', text: ')', subtree_size: 9},
-// CHECK:STDOUT:   {kind: 'ReturnStatement', text: ';', subtree_size: 11},
-// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 22},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT:               {kind: 'ParenExpressionOrTupleLiteralStart', text: '('},
+// CHECK:STDOUT:                 {kind: 'ParenExpressionOrTupleLiteralStart', text: '('},
+// CHECK:STDOUT:                 {kind: 'NameExpression', text: 'n'},
+// CHECK:STDOUT:               {kind: 'ParenExpression', text: ')', subtree_size: 3},
+// CHECK:STDOUT:             {kind: 'ParenExpression', text: ')', subtree_size: 5},
+// CHECK:STDOUT:           {kind: 'ParenExpression', text: ')', subtree_size: 7},
+// CHECK:STDOUT:         {kind: 'ParenExpression', text: ')', subtree_size: 9},
+// CHECK:STDOUT:       {kind: 'ReturnStatement', text: ';', subtree_size: 11},
+// CHECK:STDOUT:     {kind: 'FunctionDefinition', text: '}', subtree_size: 22},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 13 - 12
toolchain/parse/testdata/class/basic.carbon

@@ -8,15 +8,16 @@ class Foo {
   fn Baz();
 }
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:     {kind: 'ClassIntroducer', text: 'class'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'Foo'},
-// CHECK:STDOUT:   {kind: 'ClassDefinitionStart', text: '{', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'Baz'},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'FunctionDeclaration', text: ';', subtree_size: 5},
-// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 9},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: basic.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:         {kind: 'ClassIntroducer', text: 'class'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'Foo'},
+// CHECK:STDOUT:       {kind: 'ClassDefinitionStart', text: '{', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'Baz'},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'FunctionDeclaration', text: ';', subtree_size: 5},
+// CHECK:STDOUT:     {kind: 'ClassDefinition', text: '}', subtree_size: 9},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 60 - 59
toolchain/parse/testdata/class/fn_definitions.carbon

@@ -12,63 +12,64 @@ class Foo {
   fn Modify[addr self: Self*]() { self->x = 1; }
 }
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:     {kind: 'ClassIntroducer', text: 'class'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'Foo'},
-// CHECK:STDOUT:   {kind: 'ClassDefinitionStart', text: '{', subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:       {kind: 'Name', text: 'Make'},
-// CHECK:STDOUT:         {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:       {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:         {kind: 'SelfTypeNameExpression', text: 'Self'},
-// CHECK:STDOUT:       {kind: 'ReturnType', text: '->', subtree_size: 2},
-// CHECK:STDOUT:     {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 7},
-// CHECK:STDOUT:       {kind: 'ReturnStatementStart', text: 'return'},
-// CHECK:STDOUT:         {kind: 'StructLiteralOrStructTypeLiteralStart', text: '{'},
-// CHECK:STDOUT:             {kind: 'Name', text: 'x'},
-// CHECK:STDOUT:           {kind: 'StructFieldDesignator', text: '.', subtree_size: 2},
-// CHECK:STDOUT:           {kind: 'Literal', text: '0'},
-// CHECK:STDOUT:         {kind: 'StructFieldValue', text: '=', subtree_size: 4},
-// CHECK:STDOUT:       {kind: 'StructLiteral', text: '}', subtree_size: 6},
-// CHECK:STDOUT:     {kind: 'ReturnStatement', text: ';', subtree_size: 8},
-// CHECK:STDOUT:   {kind: 'FunctionDefinition', text: '}', subtree_size: 16},
-// CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:       {kind: 'Name', text: 'Baz'},
-// CHECK:STDOUT:         {kind: 'DeducedParameterListStart', text: '['},
-// CHECK:STDOUT:           {kind: 'SelfValueName', text: 'self'},
-// CHECK:STDOUT:           {kind: 'SelfTypeNameExpression', text: 'Self'},
-// CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'DeducedParameterList', text: ']', subtree_size: 5},
-// CHECK:STDOUT:         {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:       {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:       {kind: 'ReturnType', text: '->', subtree_size: 2},
-// CHECK:STDOUT:     {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 12},
-// CHECK:STDOUT:       {kind: 'ReturnStatementStart', text: 'return'},
-// CHECK:STDOUT:         {kind: 'SelfValueName', text: 'self'},
-// CHECK:STDOUT:         {kind: 'Name', text: 'x'},
-// CHECK:STDOUT:       {kind: 'MemberAccessExpression', text: '.', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'ReturnStatement', text: ';', subtree_size: 5},
-// CHECK:STDOUT:   {kind: 'FunctionDefinition', text: '}', subtree_size: 18},
-// CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:       {kind: 'Name', text: 'Modify'},
-// CHECK:STDOUT:         {kind: 'DeducedParameterListStart', text: '['},
-// CHECK:STDOUT:             {kind: 'SelfValueName', text: 'self'},
+// CHECK:STDOUT: - filename: fn_definitions.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:         {kind: 'ClassIntroducer', text: 'class'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'Foo'},
+// CHECK:STDOUT:       {kind: 'ClassDefinitionStart', text: '{', subtree_size: 3},
+// CHECK:STDOUT:           {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:           {kind: 'Name', text: 'Make'},
+// CHECK:STDOUT:             {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:           {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:             {kind: 'SelfTypeNameExpression', text: 'Self'},
+// CHECK:STDOUT:           {kind: 'ReturnType', text: '->', subtree_size: 2},
+// CHECK:STDOUT:         {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 7},
+// CHECK:STDOUT:           {kind: 'ReturnStatementStart', text: 'return'},
+// CHECK:STDOUT:             {kind: 'StructLiteralOrStructTypeLiteralStart', text: '{'},
+// CHECK:STDOUT:                 {kind: 'Name', text: 'x'},
+// CHECK:STDOUT:               {kind: 'StructFieldDesignator', text: '.', subtree_size: 2},
+// CHECK:STDOUT:               {kind: 'Literal', text: '0'},
+// CHECK:STDOUT:             {kind: 'StructFieldValue', text: '=', subtree_size: 4},
+// CHECK:STDOUT:           {kind: 'StructLiteral', text: '}', subtree_size: 6},
+// CHECK:STDOUT:         {kind: 'ReturnStatement', text: ';', subtree_size: 8},
+// CHECK:STDOUT:       {kind: 'FunctionDefinition', text: '}', subtree_size: 16},
+// CHECK:STDOUT:           {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:           {kind: 'Name', text: 'Baz'},
+// CHECK:STDOUT:             {kind: 'DeducedParameterListStart', text: '['},
+// CHECK:STDOUT:               {kind: 'SelfValueName', text: 'self'},
 // CHECK:STDOUT:               {kind: 'SelfTypeNameExpression', text: 'Self'},
-// CHECK:STDOUT:             {kind: 'PostfixOperator', text: '*', subtree_size: 2},
-// CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 4},
-// CHECK:STDOUT:         {kind: 'Address', text: 'addr', subtree_size: 5},
-// CHECK:STDOUT:       {kind: 'DeducedParameterList', text: ']', subtree_size: 7},
-// CHECK:STDOUT:         {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:       {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:     {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 12},
-// CHECK:STDOUT:           {kind: 'SelfValueName', text: 'self'},
-// CHECK:STDOUT:           {kind: 'Name', text: 'x'},
-// CHECK:STDOUT:         {kind: 'PointerMemberAccessExpression', text: '->', subtree_size: 3},
-// CHECK:STDOUT:         {kind: 'Literal', text: '1'},
-// CHECK:STDOUT:       {kind: 'InfixOperator', text: '=', subtree_size: 5},
-// CHECK:STDOUT:     {kind: 'ExpressionStatement', text: ';', subtree_size: 6},
-// CHECK:STDOUT:   {kind: 'FunctionDefinition', text: '}', subtree_size: 19},
-// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 57},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT:             {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:           {kind: 'DeducedParameterList', text: ']', subtree_size: 5},
+// CHECK:STDOUT:             {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:           {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'ReturnType', text: '->', subtree_size: 2},
+// CHECK:STDOUT:         {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 12},
+// CHECK:STDOUT:           {kind: 'ReturnStatementStart', text: 'return'},
+// CHECK:STDOUT:             {kind: 'SelfValueName', text: 'self'},
+// CHECK:STDOUT:             {kind: 'Name', text: 'x'},
+// CHECK:STDOUT:           {kind: 'MemberAccessExpression', text: '.', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'ReturnStatement', text: ';', subtree_size: 5},
+// CHECK:STDOUT:       {kind: 'FunctionDefinition', text: '}', subtree_size: 18},
+// CHECK:STDOUT:           {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:           {kind: 'Name', text: 'Modify'},
+// CHECK:STDOUT:             {kind: 'DeducedParameterListStart', text: '['},
+// CHECK:STDOUT:                 {kind: 'SelfValueName', text: 'self'},
+// CHECK:STDOUT:                   {kind: 'SelfTypeNameExpression', text: 'Self'},
+// CHECK:STDOUT:                 {kind: 'PostfixOperator', text: '*', subtree_size: 2},
+// CHECK:STDOUT:               {kind: 'PatternBinding', text: ':', subtree_size: 4},
+// CHECK:STDOUT:             {kind: 'Address', text: 'addr', subtree_size: 5},
+// CHECK:STDOUT:           {kind: 'DeducedParameterList', text: ']', subtree_size: 7},
+// CHECK:STDOUT:             {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:           {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:         {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 12},
+// CHECK:STDOUT:               {kind: 'SelfValueName', text: 'self'},
+// CHECK:STDOUT:               {kind: 'Name', text: 'x'},
+// CHECK:STDOUT:             {kind: 'PointerMemberAccessExpression', text: '->', subtree_size: 3},
+// CHECK:STDOUT:             {kind: 'Literal', text: '1'},
+// CHECK:STDOUT:           {kind: 'InfixOperator', text: '=', subtree_size: 5},
+// CHECK:STDOUT:         {kind: 'ExpressionStatement', text: ';', subtree_size: 6},
+// CHECK:STDOUT:       {kind: 'FunctionDefinition', text: '}', subtree_size: 19},
+// CHECK:STDOUT:     {kind: 'ClassDefinition', text: '}', subtree_size: 57},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 13 - 12
toolchain/parse/testdata/class/var.carbon

@@ -8,15 +8,16 @@ class Foo {
   var x: i32;
 }
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:     {kind: 'ClassIntroducer', text: 'class'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'Foo'},
-// CHECK:STDOUT:   {kind: 'ClassDefinitionStart', text: '{', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'VariableIntroducer', text: 'var'},
-// CHECK:STDOUT:       {kind: 'Name', text: 'x'},
-// CHECK:STDOUT:       {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:     {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:   {kind: 'VariableDeclaration', text: ';', subtree_size: 5},
-// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 9},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: var.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:         {kind: 'ClassIntroducer', text: 'class'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'Foo'},
+// CHECK:STDOUT:       {kind: 'ClassDefinitionStart', text: '{', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'VariableIntroducer', text: 'var'},
+// CHECK:STDOUT:           {kind: 'Name', text: 'x'},
+// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:       {kind: 'VariableDeclaration', text: ';', subtree_size: 5},
+// CHECK:STDOUT:     {kind: 'ClassDefinition', text: '}', subtree_size: 9},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 26 - 25
toolchain/parse/testdata/for/fail_colon_instead_of_in.carbon

@@ -13,28 +13,29 @@ fn foo() {
   }
 }
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:     {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'foo'},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
-// CHECK:STDOUT:       {kind: 'ForHeaderStart', text: '('},
-// CHECK:STDOUT:         {kind: 'VariableIntroducer', text: 'var'},
-// CHECK:STDOUT:           {kind: 'Name', text: 'x'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'ForIn', text: ':', has_error: yes, subtree_size: 5},
-// CHECK:STDOUT:       {kind: 'NameExpression', text: 'y'},
-// CHECK:STDOUT:     {kind: 'ForHeader', text: ')', subtree_size: 8},
-// CHECK:STDOUT:       {kind: 'CodeBlockStart', text: '{'},
-// CHECK:STDOUT:             {kind: 'NameExpression', text: 'Print'},
-// CHECK:STDOUT:           {kind: 'CallExpressionStart', text: '(', subtree_size: 2},
-// CHECK:STDOUT:           {kind: 'NameExpression', text: 'x'},
-// CHECK:STDOUT:         {kind: 'CallExpression', text: ')', subtree_size: 4},
-// CHECK:STDOUT:       {kind: 'ExpressionStatement', text: ';', subtree_size: 5},
-// CHECK:STDOUT:     {kind: 'CodeBlock', text: '}', subtree_size: 7},
-// CHECK:STDOUT:   {kind: 'ForStatement', text: 'for', subtree_size: 16},
-// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 22},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: fail_colon_instead_of_in.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'foo'},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
+// CHECK:STDOUT:           {kind: 'ForHeaderStart', text: '('},
+// CHECK:STDOUT:             {kind: 'VariableIntroducer', text: 'var'},
+// CHECK:STDOUT:               {kind: 'Name', text: 'x'},
+// CHECK:STDOUT:               {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:           {kind: 'ForIn', text: ':', has_error: yes, subtree_size: 5},
+// CHECK:STDOUT:           {kind: 'NameExpression', text: 'y'},
+// CHECK:STDOUT:         {kind: 'ForHeader', text: ')', subtree_size: 8},
+// CHECK:STDOUT:           {kind: 'CodeBlockStart', text: '{'},
+// CHECK:STDOUT:                 {kind: 'NameExpression', text: 'Print'},
+// CHECK:STDOUT:               {kind: 'CallExpressionStart', text: '(', subtree_size: 2},
+// CHECK:STDOUT:               {kind: 'NameExpression', text: 'x'},
+// CHECK:STDOUT:             {kind: 'CallExpression', text: ')', subtree_size: 4},
+// CHECK:STDOUT:           {kind: 'ExpressionStatement', text: ';', subtree_size: 5},
+// CHECK:STDOUT:         {kind: 'CodeBlock', text: '}', subtree_size: 7},
+// CHECK:STDOUT:       {kind: 'ForStatement', text: 'for', subtree_size: 16},
+// CHECK:STDOUT:     {kind: 'FunctionDefinition', text: '}', subtree_size: 22},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 18 - 17
toolchain/parse/testdata/for/fail_missing_cond.carbon

@@ -21,20 +21,21 @@ fn F() {
 // CHECK:STDERR: ^
 }
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:     {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'F'},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
-// CHECK:STDOUT:       {kind: 'ForHeaderStart', text: 'for', has_error: yes},
-// CHECK:STDOUT:         {kind: 'StructLiteralOrStructTypeLiteralStart', text: '{'},
-// CHECK:STDOUT:       {kind: 'StructLiteral', text: '}', subtree_size: 2},
-// CHECK:STDOUT:     {kind: 'ForHeader', text: 'for', has_error: yes, subtree_size: 4},
-// CHECK:STDOUT:       {kind: 'CodeBlockStart', text: '}', has_error: yes},
-// CHECK:STDOUT:       {kind: 'InvalidParse', text: '}', has_error: yes},
-// CHECK:STDOUT:     {kind: 'CodeBlock', text: '}', has_error: yes, subtree_size: 3},
-// CHECK:STDOUT:   {kind: 'ForStatement', text: 'for', subtree_size: 8},
-// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 14},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: fail_missing_cond.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'F'},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
+// CHECK:STDOUT:           {kind: 'ForHeaderStart', text: 'for', has_error: yes},
+// CHECK:STDOUT:             {kind: 'StructLiteralOrStructTypeLiteralStart', text: '{'},
+// CHECK:STDOUT:           {kind: 'StructLiteral', text: '}', subtree_size: 2},
+// CHECK:STDOUT:         {kind: 'ForHeader', text: 'for', has_error: yes, subtree_size: 4},
+// CHECK:STDOUT:           {kind: 'CodeBlockStart', text: '}', has_error: yes},
+// CHECK:STDOUT:           {kind: 'InvalidParse', text: '}', has_error: yes},
+// CHECK:STDOUT:         {kind: 'CodeBlock', text: '}', has_error: yes, subtree_size: 3},
+// CHECK:STDOUT:       {kind: 'ForStatement', text: 'for', subtree_size: 8},
+// CHECK:STDOUT:     {kind: 'FunctionDefinition', text: '}', subtree_size: 14},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 26 - 25
toolchain/parse/testdata/for/fail_missing_in.carbon

@@ -13,28 +13,29 @@ fn foo() {
   }
 }
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:     {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'foo'},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
-// CHECK:STDOUT:       {kind: 'ForHeaderStart', text: '('},
-// CHECK:STDOUT:         {kind: 'VariableIntroducer', text: 'var'},
-// CHECK:STDOUT:           {kind: 'Name', text: 'x'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'ForIn', text: 'var', has_error: yes, subtree_size: 5},
-// CHECK:STDOUT:       {kind: 'NameExpression', text: 'y'},
-// CHECK:STDOUT:     {kind: 'ForHeader', text: ')', subtree_size: 8},
-// CHECK:STDOUT:       {kind: 'CodeBlockStart', text: '{'},
-// CHECK:STDOUT:             {kind: 'NameExpression', text: 'Print'},
-// CHECK:STDOUT:           {kind: 'CallExpressionStart', text: '(', subtree_size: 2},
-// CHECK:STDOUT:           {kind: 'NameExpression', text: 'x'},
-// CHECK:STDOUT:         {kind: 'CallExpression', text: ')', subtree_size: 4},
-// CHECK:STDOUT:       {kind: 'ExpressionStatement', text: ';', subtree_size: 5},
-// CHECK:STDOUT:     {kind: 'CodeBlock', text: '}', subtree_size: 7},
-// CHECK:STDOUT:   {kind: 'ForStatement', text: 'for', subtree_size: 16},
-// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 22},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: fail_missing_in.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'foo'},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
+// CHECK:STDOUT:           {kind: 'ForHeaderStart', text: '('},
+// CHECK:STDOUT:             {kind: 'VariableIntroducer', text: 'var'},
+// CHECK:STDOUT:               {kind: 'Name', text: 'x'},
+// CHECK:STDOUT:               {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:           {kind: 'ForIn', text: 'var', has_error: yes, subtree_size: 5},
+// CHECK:STDOUT:           {kind: 'NameExpression', text: 'y'},
+// CHECK:STDOUT:         {kind: 'ForHeader', text: ')', subtree_size: 8},
+// CHECK:STDOUT:           {kind: 'CodeBlockStart', text: '{'},
+// CHECK:STDOUT:                 {kind: 'NameExpression', text: 'Print'},
+// CHECK:STDOUT:               {kind: 'CallExpressionStart', text: '(', subtree_size: 2},
+// CHECK:STDOUT:               {kind: 'NameExpression', text: 'x'},
+// CHECK:STDOUT:             {kind: 'CallExpression', text: ')', subtree_size: 4},
+// CHECK:STDOUT:           {kind: 'ExpressionStatement', text: ';', subtree_size: 5},
+// CHECK:STDOUT:         {kind: 'CodeBlock', text: '}', subtree_size: 7},
+// CHECK:STDOUT:       {kind: 'ForStatement', text: 'for', subtree_size: 16},
+// CHECK:STDOUT:     {kind: 'FunctionDefinition', text: '}', subtree_size: 22},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 21 - 20
toolchain/parse/testdata/for/fail_missing_var.carbon

@@ -13,23 +13,24 @@ fn foo() {
   }
 }
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:     {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'foo'},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
-// CHECK:STDOUT:       {kind: 'ForHeaderStart', text: '('},
-// CHECK:STDOUT:       {kind: 'NameExpression', text: 'y'},
-// CHECK:STDOUT:     {kind: 'ForHeader', text: ')', has_error: yes, subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'CodeBlockStart', text: '{'},
-// CHECK:STDOUT:             {kind: 'NameExpression', text: 'Print'},
-// CHECK:STDOUT:           {kind: 'CallExpressionStart', text: '(', subtree_size: 2},
-// CHECK:STDOUT:           {kind: 'NameExpression', text: 'x'},
-// CHECK:STDOUT:         {kind: 'CallExpression', text: ')', subtree_size: 4},
-// CHECK:STDOUT:       {kind: 'ExpressionStatement', text: ';', subtree_size: 5},
-// CHECK:STDOUT:     {kind: 'CodeBlock', text: '}', subtree_size: 7},
-// CHECK:STDOUT:   {kind: 'ForStatement', text: 'for', subtree_size: 11},
-// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 17},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: fail_missing_var.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'foo'},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
+// CHECK:STDOUT:           {kind: 'ForHeaderStart', text: '('},
+// CHECK:STDOUT:           {kind: 'NameExpression', text: 'y'},
+// CHECK:STDOUT:         {kind: 'ForHeader', text: ')', has_error: yes, subtree_size: 3},
+// CHECK:STDOUT:           {kind: 'CodeBlockStart', text: '{'},
+// CHECK:STDOUT:                 {kind: 'NameExpression', text: 'Print'},
+// CHECK:STDOUT:               {kind: 'CallExpressionStart', text: '(', subtree_size: 2},
+// CHECK:STDOUT:               {kind: 'NameExpression', text: 'x'},
+// CHECK:STDOUT:             {kind: 'CallExpression', text: ')', subtree_size: 4},
+// CHECK:STDOUT:           {kind: 'ExpressionStatement', text: ';', subtree_size: 5},
+// CHECK:STDOUT:         {kind: 'CodeBlock', text: '}', subtree_size: 7},
+// CHECK:STDOUT:       {kind: 'ForStatement', text: 'for', subtree_size: 11},
+// CHECK:STDOUT:     {kind: 'FunctionDefinition', text: '}', subtree_size: 17},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 19 - 18
toolchain/parse/testdata/for/fail_square_brackets.carbon

@@ -21,21 +21,22 @@ fn F() {
   }
 }
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:     {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'F'},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
-// CHECK:STDOUT:       {kind: 'ForHeaderStart', text: 'for', has_error: yes},
-// CHECK:STDOUT:           {kind: 'ArrayExpressionStart', text: '['},
-// CHECK:STDOUT:           {kind: 'InvalidParse', text: ']', has_error: yes},
-// CHECK:STDOUT:         {kind: 'ArrayExpressionSemi', text: ']', has_error: yes, subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'ArrayExpression', text: ']', has_error: yes, subtree_size: 4},
-// CHECK:STDOUT:     {kind: 'ForHeader', text: 'for', has_error: yes, subtree_size: 6},
-// CHECK:STDOUT:       {kind: 'CodeBlockStart', text: '{'},
-// CHECK:STDOUT:     {kind: 'CodeBlock', text: '}', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'ForStatement', text: 'for', subtree_size: 9},
-// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 15},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: fail_square_brackets.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'F'},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
+// CHECK:STDOUT:           {kind: 'ForHeaderStart', text: 'for', has_error: yes},
+// CHECK:STDOUT:               {kind: 'ArrayExpressionStart', text: '['},
+// CHECK:STDOUT:               {kind: 'InvalidParse', text: ']', has_error: yes},
+// CHECK:STDOUT:             {kind: 'ArrayExpressionSemi', text: ']', has_error: yes, subtree_size: 3},
+// CHECK:STDOUT:           {kind: 'ArrayExpression', text: ']', has_error: yes, subtree_size: 4},
+// CHECK:STDOUT:         {kind: 'ForHeader', text: 'for', has_error: yes, subtree_size: 6},
+// CHECK:STDOUT:           {kind: 'CodeBlockStart', text: '{'},
+// CHECK:STDOUT:         {kind: 'CodeBlock', text: '}', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'ForStatement', text: 'for', subtree_size: 9},
+// CHECK:STDOUT:     {kind: 'FunctionDefinition', text: '}', subtree_size: 15},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 30 - 29
toolchain/parse/testdata/for/nested.carbon

@@ -12,39 +12,40 @@ fn foo() {
   }
 }
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:     {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'foo'},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
-// CHECK:STDOUT:       {kind: 'ForHeaderStart', text: '('},
-// CHECK:STDOUT:         {kind: 'VariableIntroducer', text: 'var'},
-// CHECK:STDOUT:           {kind: 'Name', text: 'y'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'ForIn', text: 'in', subtree_size: 5},
-// CHECK:STDOUT:       {kind: 'NameExpression', text: 'x'},
-// CHECK:STDOUT:     {kind: 'ForHeader', text: ')', subtree_size: 8},
-// CHECK:STDOUT:       {kind: 'CodeBlockStart', text: '{'},
+// CHECK:STDOUT: - filename: nested.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'foo'},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:           {kind: 'ForHeaderStart', text: '('},
 // CHECK:STDOUT:             {kind: 'VariableIntroducer', text: 'var'},
-// CHECK:STDOUT:               {kind: 'Name', text: 'z'},
+// CHECK:STDOUT:               {kind: 'Name', text: 'y'},
 // CHECK:STDOUT:               {kind: 'Literal', text: 'i32'},
 // CHECK:STDOUT:             {kind: 'PatternBinding', text: ':', subtree_size: 3},
 // CHECK:STDOUT:           {kind: 'ForIn', text: 'in', subtree_size: 5},
-// CHECK:STDOUT:           {kind: 'NameExpression', text: 'y'},
+// CHECK:STDOUT:           {kind: 'NameExpression', text: 'x'},
 // CHECK:STDOUT:         {kind: 'ForHeader', text: ')', subtree_size: 8},
 // CHECK:STDOUT:           {kind: 'CodeBlockStart', text: '{'},
-// CHECK:STDOUT:                 {kind: 'NameExpression', text: 'Print'},
-// CHECK:STDOUT:               {kind: 'CallExpressionStart', text: '(', subtree_size: 2},
-// CHECK:STDOUT:               {kind: 'NameExpression', text: 'z'},
-// CHECK:STDOUT:             {kind: 'CallExpression', text: ')', subtree_size: 4},
-// CHECK:STDOUT:           {kind: 'ExpressionStatement', text: ';', subtree_size: 5},
-// CHECK:STDOUT:         {kind: 'CodeBlock', text: '}', subtree_size: 7},
-// CHECK:STDOUT:       {kind: 'ForStatement', text: 'for', subtree_size: 16},
-// CHECK:STDOUT:     {kind: 'CodeBlock', text: '}', subtree_size: 18},
-// CHECK:STDOUT:   {kind: 'ForStatement', text: 'for', subtree_size: 27},
-// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 33},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT:               {kind: 'ForHeaderStart', text: '('},
+// CHECK:STDOUT:                 {kind: 'VariableIntroducer', text: 'var'},
+// CHECK:STDOUT:                   {kind: 'Name', text: 'z'},
+// CHECK:STDOUT:                   {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:                 {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:               {kind: 'ForIn', text: 'in', subtree_size: 5},
+// CHECK:STDOUT:               {kind: 'NameExpression', text: 'y'},
+// CHECK:STDOUT:             {kind: 'ForHeader', text: ')', subtree_size: 8},
+// CHECK:STDOUT:               {kind: 'CodeBlockStart', text: '{'},
+// CHECK:STDOUT:                     {kind: 'NameExpression', text: 'Print'},
+// CHECK:STDOUT:                   {kind: 'CallExpressionStart', text: '(', subtree_size: 2},
+// CHECK:STDOUT:                   {kind: 'NameExpression', text: 'z'},
+// CHECK:STDOUT:                 {kind: 'CallExpression', text: ')', subtree_size: 4},
+// CHECK:STDOUT:               {kind: 'ExpressionStatement', text: ';', subtree_size: 5},
+// CHECK:STDOUT:             {kind: 'CodeBlock', text: '}', subtree_size: 7},
+// CHECK:STDOUT:           {kind: 'ForStatement', text: 'for', subtree_size: 16},
+// CHECK:STDOUT:         {kind: 'CodeBlock', text: '}', subtree_size: 18},
+// CHECK:STDOUT:       {kind: 'ForStatement', text: 'for', subtree_size: 27},
+// CHECK:STDOUT:     {kind: 'FunctionDefinition', text: '}', subtree_size: 33},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 26 - 25
toolchain/parse/testdata/for/simple.carbon

@@ -10,28 +10,29 @@ fn foo() {
   }
 }
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:     {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'foo'},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
-// CHECK:STDOUT:       {kind: 'ForHeaderStart', text: '('},
-// CHECK:STDOUT:         {kind: 'VariableIntroducer', text: 'var'},
-// CHECK:STDOUT:           {kind: 'Name', text: 'x'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'ForIn', text: 'in', subtree_size: 5},
-// CHECK:STDOUT:       {kind: 'NameExpression', text: 'y'},
-// CHECK:STDOUT:     {kind: 'ForHeader', text: ')', subtree_size: 8},
-// CHECK:STDOUT:       {kind: 'CodeBlockStart', text: '{'},
-// CHECK:STDOUT:             {kind: 'NameExpression', text: 'Print'},
-// CHECK:STDOUT:           {kind: 'CallExpressionStart', text: '(', subtree_size: 2},
-// CHECK:STDOUT:           {kind: 'NameExpression', text: 'x'},
-// CHECK:STDOUT:         {kind: 'CallExpression', text: ')', subtree_size: 4},
-// CHECK:STDOUT:       {kind: 'ExpressionStatement', text: ';', subtree_size: 5},
-// CHECK:STDOUT:     {kind: 'CodeBlock', text: '}', subtree_size: 7},
-// CHECK:STDOUT:   {kind: 'ForStatement', text: 'for', subtree_size: 16},
-// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 22},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: simple.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'foo'},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
+// CHECK:STDOUT:           {kind: 'ForHeaderStart', text: '('},
+// CHECK:STDOUT:             {kind: 'VariableIntroducer', text: 'var'},
+// CHECK:STDOUT:               {kind: 'Name', text: 'x'},
+// CHECK:STDOUT:               {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:           {kind: 'ForIn', text: 'in', subtree_size: 5},
+// CHECK:STDOUT:           {kind: 'NameExpression', text: 'y'},
+// CHECK:STDOUT:         {kind: 'ForHeader', text: ')', subtree_size: 8},
+// CHECK:STDOUT:           {kind: 'CodeBlockStart', text: '{'},
+// CHECK:STDOUT:                 {kind: 'NameExpression', text: 'Print'},
+// CHECK:STDOUT:               {kind: 'CallExpressionStart', text: '(', subtree_size: 2},
+// CHECK:STDOUT:               {kind: 'NameExpression', text: 'x'},
+// CHECK:STDOUT:             {kind: 'CallExpression', text: ')', subtree_size: 4},
+// CHECK:STDOUT:           {kind: 'ExpressionStatement', text: ';', subtree_size: 5},
+// CHECK:STDOUT:         {kind: 'CodeBlock', text: '}', subtree_size: 7},
+// CHECK:STDOUT:       {kind: 'ForStatement', text: 'for', subtree_size: 16},
+// CHECK:STDOUT:     {kind: 'FunctionDefinition', text: '}', subtree_size: 22},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 14 - 13
toolchain/parse/testdata/function/declaration/addr.carbon

@@ -6,16 +6,17 @@
 
 fn foo(addr a: i32*);
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:   {kind: 'Name', text: 'foo'},
-// CHECK:STDOUT:     {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:         {kind: 'PostfixOperator', text: '*', subtree_size: 2},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 4},
-// CHECK:STDOUT:     {kind: 'Address', text: 'addr', subtree_size: 5},
-// CHECK:STDOUT:   {kind: 'ParameterList', text: ')', subtree_size: 7},
-// CHECK:STDOUT: {kind: 'FunctionDeclaration', text: ';', subtree_size: 10},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: addr.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:       {kind: 'Name', text: 'foo'},
+// CHECK:STDOUT:         {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:             {kind: 'Name', text: 'a'},
+// CHECK:STDOUT:               {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'PostfixOperator', text: '*', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 4},
+// CHECK:STDOUT:         {kind: 'Address', text: 'addr', subtree_size: 5},
+// CHECK:STDOUT:       {kind: 'ParameterList', text: ')', subtree_size: 7},
+// CHECK:STDOUT:     {kind: 'FunctionDeclaration', text: ';', subtree_size: 10},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 9 - 8
toolchain/parse/testdata/function/declaration/basic.carbon

@@ -6,11 +6,12 @@
 
 fn F();
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:   {kind: 'Name', text: 'F'},
-// CHECK:STDOUT:     {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:   {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT: {kind: 'FunctionDeclaration', text: ';', subtree_size: 5},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: basic.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:       {kind: 'Name', text: 'F'},
+// CHECK:STDOUT:         {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:       {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:     {kind: 'FunctionDeclaration', text: ';', subtree_size: 5},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 11 - 10
toolchain/parse/testdata/function/declaration/deduced_empty.carbon

@@ -6,13 +6,14 @@
 
 fn foo[]();
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:   {kind: 'Name', text: 'foo'},
-// CHECK:STDOUT:     {kind: 'DeducedParameterListStart', text: '['},
-// CHECK:STDOUT:   {kind: 'DeducedParameterList', text: ']', subtree_size: 2},
-// CHECK:STDOUT:     {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:   {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT: {kind: 'FunctionDeclaration', text: ';', subtree_size: 7},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: deduced_empty.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:       {kind: 'Name', text: 'foo'},
+// CHECK:STDOUT:         {kind: 'DeducedParameterListStart', text: '['},
+// CHECK:STDOUT:       {kind: 'DeducedParameterList', text: ']', subtree_size: 2},
+// CHECK:STDOUT:         {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:       {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:     {kind: 'FunctionDeclaration', text: ';', subtree_size: 7},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 18 - 17
toolchain/parse/testdata/function/declaration/deduced_params.carbon

@@ -6,20 +6,21 @@
 
 fn foo[a: i32, b: i32]();
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:   {kind: 'Name', text: 'foo'},
-// CHECK:STDOUT:     {kind: 'DeducedParameterListStart', text: '['},
-// CHECK:STDOUT:       {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:       {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:     {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'ParameterListComma', text: ','},
-// CHECK:STDOUT:       {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:       {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:     {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:   {kind: 'DeducedParameterList', text: ']', subtree_size: 9},
-// CHECK:STDOUT:     {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:   {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT: {kind: 'FunctionDeclaration', text: ';', subtree_size: 14},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: deduced_params.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:       {kind: 'Name', text: 'foo'},
+// CHECK:STDOUT:         {kind: 'DeducedParameterListStart', text: '['},
+// CHECK:STDOUT:           {kind: 'Name', text: 'a'},
+// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'ParameterListComma', text: ','},
+// CHECK:STDOUT:           {kind: 'Name', text: 'b'},
+// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:       {kind: 'DeducedParameterList', text: ']', subtree_size: 9},
+// CHECK:STDOUT:         {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:       {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:     {kind: 'FunctionDeclaration', text: ';', subtree_size: 14},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 7 - 6
toolchain/parse/testdata/function/declaration/fail_identifier_instead_of_sig.carbon

@@ -9,9 +9,10 @@
 // CHECK:STDERR:        ^
 fn foo bar;
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:   {kind: 'Name', text: 'foo'},
-// CHECK:STDOUT: {kind: 'FunctionDeclaration', text: ';', has_error: yes, subtree_size: 3},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: fail_identifier_instead_of_sig.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:       {kind: 'Name', text: 'foo'},
+// CHECK:STDOUT:     {kind: 'FunctionDeclaration', text: ';', has_error: yes, subtree_size: 3},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 15 - 14
toolchain/parse/testdata/function/declaration/fail_missing_deduced_close.carbon

@@ -13,17 +13,18 @@
 // CHECK:STDERR:        ^
 fn Div[();
 
-// CHECK:STDERR: fail_missing_deduced_close.carbon:[[@LINE+13]]:19: A `(` for parameters is required after deduced parameters.
-// CHECK:STDERR: // CHECK:STDOUT: ]
-// CHECK:STDERR:                   ^
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:   {kind: 'Name', text: 'Div'},
-// CHECK:STDOUT:     {kind: 'DeducedParameterListStart', text: '['},
-// CHECK:STDOUT:       {kind: 'Name', text: '(', has_error: yes},
-// CHECK:STDOUT:       {kind: 'InvalidParse', text: '(', has_error: yes},
-// CHECK:STDOUT:     {kind: 'PatternBinding', text: '(', has_error: yes, subtree_size: 3},
-// CHECK:STDOUT:   {kind: 'DeducedParameterList', text: ']', has_error: yes, subtree_size: 5},
-// CHECK:STDOUT: {kind: 'FunctionDeclaration', text: 'fn', has_error: yes, subtree_size: 8},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDERR: fail_missing_deduced_close.carbon:[[@LINE+14]]:21: A `(` for parameters is required after deduced parameters.
+// CHECK:STDERR: // CHECK:STDOUT:   ]
+// CHECK:STDERR:                     ^
+// CHECK:STDOUT: - filename: fail_missing_deduced_close.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:       {kind: 'Name', text: 'Div'},
+// CHECK:STDOUT:         {kind: 'DeducedParameterListStart', text: '['},
+// CHECK:STDOUT:           {kind: 'Name', text: '(', has_error: yes},
+// CHECK:STDOUT:           {kind: 'InvalidParse', text: '(', has_error: yes},
+// CHECK:STDOUT:         {kind: 'PatternBinding', text: '(', has_error: yes, subtree_size: 3},
+// CHECK:STDOUT:       {kind: 'DeducedParameterList', text: ']', has_error: yes, subtree_size: 5},
+// CHECK:STDOUT:     {kind: 'FunctionDeclaration', text: 'fn', has_error: yes, subtree_size: 8},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 7 - 6
toolchain/parse/testdata/function/declaration/fail_missing_name.carbon

@@ -9,9 +9,10 @@
 // CHECK:STDERR:    ^
 fn ();
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:   {kind: 'InvalidParse', text: '('},
-// CHECK:STDOUT: {kind: 'FunctionDeclaration', text: ';', has_error: yes, subtree_size: 3},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: fail_missing_name.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:       {kind: 'InvalidParse', text: '('},
+// CHECK:STDOUT:     {kind: 'FunctionDeclaration', text: ';', has_error: yes, subtree_size: 3},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 10 - 9
toolchain/parse/testdata/function/declaration/fail_no_sig_or_semi.carbon

@@ -6,12 +6,13 @@
 
 fn foo
 
-// CHECK:STDERR: fail_no_sig_or_semi.carbon:[[@LINE+8]]:19: `fn` requires a `(` for parameters.
-// CHECK:STDERR: // CHECK:STDOUT: ]
-// CHECK:STDERR:                   ^
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:   {kind: 'Name', text: 'foo'},
-// CHECK:STDOUT: {kind: 'FunctionDeclaration', text: 'fn', has_error: yes, subtree_size: 3},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDERR: fail_no_sig_or_semi.carbon:[[@LINE+9]]:21: `fn` requires a `(` for parameters.
+// CHECK:STDERR: // CHECK:STDOUT:   ]
+// CHECK:STDERR:                     ^
+// CHECK:STDOUT: - filename: fail_no_sig_or_semi.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:       {kind: 'Name', text: 'foo'},
+// CHECK:STDOUT:     {kind: 'FunctionDeclaration', text: 'fn', has_error: yes, subtree_size: 3},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 7 - 6
toolchain/parse/testdata/function/declaration/fail_only_fn_and_semi.carbon

@@ -9,9 +9,10 @@
 // CHECK:STDERR:   ^
 fn;
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:   {kind: 'InvalidParse', text: ';'},
-// CHECK:STDOUT: {kind: 'FunctionDeclaration', text: ';', has_error: yes, subtree_size: 3},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: fail_only_fn_and_semi.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:       {kind: 'InvalidParse', text: ';'},
+// CHECK:STDOUT:     {kind: 'FunctionDeclaration', text: ';', has_error: yes, subtree_size: 3},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 7 - 6
toolchain/parse/testdata/function/declaration/fail_repeated_fn_and_semi.carbon

@@ -9,9 +9,10 @@
 // CHECK:STDERR:    ^
 fn fn;
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:   {kind: 'InvalidParse', text: 'fn'},
-// CHECK:STDOUT: {kind: 'FunctionDeclaration', text: ';', has_error: yes, subtree_size: 3},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: fail_repeated_fn_and_semi.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:       {kind: 'InvalidParse', text: 'fn'},
+// CHECK:STDOUT:     {kind: 'FunctionDeclaration', text: ';', has_error: yes, subtree_size: 3},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 12 - 11
toolchain/parse/testdata/function/declaration/fail_skip_indented_newline_until_outdent.carbon

@@ -12,14 +12,15 @@
       z)
 fn F();
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:   {kind: 'InvalidParse', text: '('},
-// CHECK:STDOUT: {kind: 'FunctionDeclaration', text: 'fn', has_error: yes, subtree_size: 3},
-// CHECK:STDOUT:   {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:   {kind: 'Name', text: 'F'},
-// CHECK:STDOUT:     {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:   {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT: {kind: 'FunctionDeclaration', text: ';', subtree_size: 5},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: fail_skip_indented_newline_until_outdent.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:       {kind: 'InvalidParse', text: '('},
+// CHECK:STDOUT:     {kind: 'FunctionDeclaration', text: 'fn', has_error: yes, subtree_size: 3},
+// CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:       {kind: 'Name', text: 'F'},
+// CHECK:STDOUT:         {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:       {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:     {kind: 'FunctionDeclaration', text: ';', subtree_size: 5},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 12 - 11
toolchain/parse/testdata/function/declaration/fail_skip_indented_newline_with_semi.carbon

@@ -12,14 +12,15 @@ fn (x,
     z);
 fn F();
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:   {kind: 'InvalidParse', text: '('},
-// CHECK:STDOUT: {kind: 'FunctionDeclaration', text: ';', has_error: yes, subtree_size: 3},
-// CHECK:STDOUT:   {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:   {kind: 'Name', text: 'F'},
-// CHECK:STDOUT:     {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:   {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT: {kind: 'FunctionDeclaration', text: ';', subtree_size: 5},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: fail_skip_indented_newline_with_semi.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:       {kind: 'InvalidParse', text: '('},
+// CHECK:STDOUT:     {kind: 'FunctionDeclaration', text: ';', has_error: yes, subtree_size: 3},
+// CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:       {kind: 'Name', text: 'F'},
+// CHECK:STDOUT:         {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:       {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:     {kind: 'FunctionDeclaration', text: ';', subtree_size: 5},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 12 - 11
toolchain/parse/testdata/function/declaration/fail_skip_indented_newline_without_semi.carbon

@@ -12,14 +12,15 @@ fn (x,
     z)
 fn F();
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:   {kind: 'InvalidParse', text: '('},
-// CHECK:STDOUT: {kind: 'FunctionDeclaration', text: 'fn', has_error: yes, subtree_size: 3},
-// CHECK:STDOUT:   {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:   {kind: 'Name', text: 'F'},
-// CHECK:STDOUT:     {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:   {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT: {kind: 'FunctionDeclaration', text: ';', subtree_size: 5},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: fail_skip_indented_newline_without_semi.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:       {kind: 'InvalidParse', text: '('},
+// CHECK:STDOUT:     {kind: 'FunctionDeclaration', text: 'fn', has_error: yes, subtree_size: 3},
+// CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:       {kind: 'Name', text: 'F'},
+// CHECK:STDOUT:         {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:       {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:     {kind: 'FunctionDeclaration', text: ';', subtree_size: 5},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 12 - 11
toolchain/parse/testdata/function/declaration/fail_skip_to_newline_without_semi.carbon

@@ -10,14 +10,15 @@
 fn ()
 fn F();
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:   {kind: 'InvalidParse', text: '('},
-// CHECK:STDOUT: {kind: 'FunctionDeclaration', text: 'fn', has_error: yes, subtree_size: 3},
-// CHECK:STDOUT:   {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:   {kind: 'Name', text: 'F'},
-// CHECK:STDOUT:     {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:   {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT: {kind: 'FunctionDeclaration', text: ';', subtree_size: 5},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: fail_skip_to_newline_without_semi.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:       {kind: 'InvalidParse', text: '('},
+// CHECK:STDOUT:     {kind: 'FunctionDeclaration', text: 'fn', has_error: yes, subtree_size: 3},
+// CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:       {kind: 'Name', text: 'F'},
+// CHECK:STDOUT:         {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:       {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:     {kind: 'FunctionDeclaration', text: ';', subtree_size: 5},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 10 - 9
toolchain/parse/testdata/function/declaration/fail_skip_without_semi_to_curly.carbon

@@ -10,12 +10,13 @@
 struct X { fn () }
 fn F();
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT: {kind: 'EmptyDeclaration', text: 'struct', has_error: yes},
-// CHECK:STDOUT:   {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:   {kind: 'Name', text: 'F'},
-// CHECK:STDOUT:     {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:   {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT: {kind: 'FunctionDeclaration', text: ';', subtree_size: 5},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: fail_skip_without_semi_to_curly.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:     {kind: 'EmptyDeclaration', text: 'struct', has_error: yes},
+// CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:       {kind: 'Name', text: 'F'},
+// CHECK:STDOUT:         {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:       {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:     {kind: 'FunctionDeclaration', text: ';', subtree_size: 5},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 12 - 11
toolchain/parse/testdata/function/declaration/fail_with_identifier_as_param.carbon

@@ -9,14 +9,15 @@
 // CHECK:STDERR:           ^
 fn foo(bar);
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:   {kind: 'Name', text: 'foo'},
-// CHECK:STDOUT:     {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:       {kind: 'Name', text: 'bar'},
-// CHECK:STDOUT:       {kind: 'InvalidParse', text: ')', has_error: yes},
-// CHECK:STDOUT:     {kind: 'PatternBinding', text: 'bar', has_error: yes, subtree_size: 3},
-// CHECK:STDOUT:   {kind: 'ParameterList', text: ')', has_error: yes, subtree_size: 5},
-// CHECK:STDOUT: {kind: 'FunctionDeclaration', text: ';', subtree_size: 8},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: fail_with_identifier_as_param.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:       {kind: 'Name', text: 'foo'},
+// CHECK:STDOUT:         {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:           {kind: 'Name', text: 'bar'},
+// CHECK:STDOUT:           {kind: 'InvalidParse', text: ')', has_error: yes},
+// CHECK:STDOUT:         {kind: 'PatternBinding', text: 'bar', has_error: yes, subtree_size: 3},
+// CHECK:STDOUT:       {kind: 'ParameterList', text: ')', has_error: yes, subtree_size: 5},
+// CHECK:STDOUT:     {kind: 'FunctionDeclaration', text: ';', subtree_size: 8},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 7 - 6
toolchain/parse/testdata/function/declaration/fail_without_name_and_many_tokens_in_params.carbon

@@ -9,9 +9,10 @@
 // CHECK:STDERR:    ^
 fn (a tokens c d e f g h i j k l m n o p q r s t u v w x y z);
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:   {kind: 'InvalidParse', text: '('},
-// CHECK:STDOUT: {kind: 'FunctionDeclaration', text: ';', has_error: yes, subtree_size: 3},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: fail_without_name_and_many_tokens_in_params.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:       {kind: 'InvalidParse', text: '('},
+// CHECK:STDOUT:     {kind: 'FunctionDeclaration', text: ';', has_error: yes, subtree_size: 3},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 16 - 15
toolchain/parse/testdata/function/declaration/params.carbon

@@ -6,18 +6,19 @@
 
 fn foo(a: i32, b: i32);
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:   {kind: 'Name', text: 'foo'},
-// CHECK:STDOUT:     {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:       {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:       {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:     {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'ParameterListComma', text: ','},
-// CHECK:STDOUT:       {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:       {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:     {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:   {kind: 'ParameterList', text: ')', subtree_size: 9},
-// CHECK:STDOUT: {kind: 'FunctionDeclaration', text: ';', subtree_size: 12},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: params.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:       {kind: 'Name', text: 'foo'},
+// CHECK:STDOUT:         {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:           {kind: 'Name', text: 'a'},
+// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'ParameterListComma', text: ','},
+// CHECK:STDOUT:           {kind: 'Name', text: 'b'},
+// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:       {kind: 'ParameterList', text: ')', subtree_size: 9},
+// CHECK:STDOUT:     {kind: 'FunctionDeclaration', text: ';', subtree_size: 12},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 11 - 10
toolchain/parse/testdata/function/declaration/with_return_type.carbon

@@ -6,13 +6,14 @@
 
 fn foo() -> u32;
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:   {kind: 'Name', text: 'foo'},
-// CHECK:STDOUT:     {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:   {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:     {kind: 'Literal', text: 'u32'},
-// CHECK:STDOUT:   {kind: 'ReturnType', text: '->', subtree_size: 2},
-// CHECK:STDOUT: {kind: 'FunctionDeclaration', text: ';', subtree_size: 7},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: with_return_type.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:       {kind: 'Name', text: 'foo'},
+// CHECK:STDOUT:         {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:       {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:         {kind: 'Literal', text: 'u32'},
+// CHECK:STDOUT:       {kind: 'ReturnType', text: '->', subtree_size: 2},
+// CHECK:STDOUT:     {kind: 'FunctionDeclaration', text: ';', subtree_size: 7},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 10 - 9
toolchain/parse/testdata/function/definition/basic.carbon

@@ -7,12 +7,13 @@
 fn F() {
 }
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:     {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'F'},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
-// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 6},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: basic.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'F'},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
+// CHECK:STDOUT:     {kind: 'FunctionDefinition', text: '}', subtree_size: 6},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 11 - 10
toolchain/parse/testdata/function/definition/fail_identifier_in_statements.carbon

@@ -13,13 +13,14 @@ fn F() {
 // CHECK:STDERR: ^
 }
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:     {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'F'},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
-// CHECK:STDOUT:   {kind: 'NameExpression', text: 'bar'},
-// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', has_error: yes, subtree_size: 7},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: fail_identifier_in_statements.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'F'},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
+// CHECK:STDOUT:       {kind: 'NameExpression', text: 'bar'},
+// CHECK:STDOUT:     {kind: 'FunctionDefinition', text: '}', has_error: yes, subtree_size: 7},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 26 - 25
toolchain/parse/testdata/function/definition/with_params.carbon

@@ -8,28 +8,29 @@ fn foo(bar: i64, baz: i64) {
   foo(baz, bar + baz);
 }
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:     {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'foo'},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'Name', text: 'bar'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i64'},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'ParameterListComma', text: ','},
-// CHECK:STDOUT:         {kind: 'Name', text: 'baz'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i64'},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 9},
-// CHECK:STDOUT:   {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 12},
-// CHECK:STDOUT:         {kind: 'NameExpression', text: 'foo'},
-// CHECK:STDOUT:       {kind: 'CallExpressionStart', text: '(', subtree_size: 2},
-// CHECK:STDOUT:       {kind: 'NameExpression', text: 'baz'},
-// CHECK:STDOUT:       {kind: 'CallExpressionComma', text: ','},
-// CHECK:STDOUT:         {kind: 'NameExpression', text: 'bar'},
-// CHECK:STDOUT:         {kind: 'NameExpression', text: 'baz'},
-// CHECK:STDOUT:       {kind: 'InfixOperator', text: '+', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'CallExpression', text: ')', subtree_size: 8},
-// CHECK:STDOUT:   {kind: 'ExpressionStatement', text: ';', subtree_size: 9},
-// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 22},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: with_params.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'foo'},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:             {kind: 'Name', text: 'bar'},
+// CHECK:STDOUT:             {kind: 'Literal', text: 'i64'},
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:           {kind: 'ParameterListComma', text: ','},
+// CHECK:STDOUT:             {kind: 'Name', text: 'baz'},
+// CHECK:STDOUT:             {kind: 'Literal', text: 'i64'},
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 9},
+// CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 12},
+// CHECK:STDOUT:             {kind: 'NameExpression', text: 'foo'},
+// CHECK:STDOUT:           {kind: 'CallExpressionStart', text: '(', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'NameExpression', text: 'baz'},
+// CHECK:STDOUT:           {kind: 'CallExpressionComma', text: ','},
+// CHECK:STDOUT:             {kind: 'NameExpression', text: 'bar'},
+// CHECK:STDOUT:             {kind: 'NameExpression', text: 'baz'},
+// CHECK:STDOUT:           {kind: 'InfixOperator', text: '+', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'CallExpression', text: ')', subtree_size: 8},
+// CHECK:STDOUT:       {kind: 'ExpressionStatement', text: ';', subtree_size: 9},
+// CHECK:STDOUT:     {kind: 'FunctionDefinition', text: '}', subtree_size: 22},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 15 - 14
toolchain/parse/testdata/function/definition/with_return_type.carbon

@@ -8,17 +8,18 @@ fn foo() -> f64 {
   return 42;
 }
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:     {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'foo'},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:       {kind: 'Literal', text: 'f64'},
-// CHECK:STDOUT:     {kind: 'ReturnType', text: '->', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 7},
-// CHECK:STDOUT:     {kind: 'ReturnStatementStart', text: 'return'},
-// CHECK:STDOUT:     {kind: 'Literal', text: '42'},
-// CHECK:STDOUT:   {kind: 'ReturnStatement', text: ';', subtree_size: 3},
-// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 11},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: with_return_type.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'foo'},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'Literal', text: 'f64'},
+// CHECK:STDOUT:         {kind: 'ReturnType', text: '->', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 7},
+// CHECK:STDOUT:         {kind: 'ReturnStatementStart', text: 'return'},
+// CHECK:STDOUT:         {kind: 'Literal', text: '42'},
+// CHECK:STDOUT:       {kind: 'ReturnStatement', text: ';', subtree_size: 3},
+// CHECK:STDOUT:     {kind: 'FunctionDefinition', text: '}', subtree_size: 11},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 19 - 18
toolchain/parse/testdata/generics/deduced_params/empty.carbon

@@ -8,21 +8,22 @@ class Foo[]();
 
 interface Bar[]() {}
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'ClassIntroducer', text: 'class'},
-// CHECK:STDOUT:   {kind: 'Name', text: 'Foo'},
-// CHECK:STDOUT:     {kind: 'DeducedParameterListStart', text: '['},
-// CHECK:STDOUT:   {kind: 'DeducedParameterList', text: ']', subtree_size: 2},
-// CHECK:STDOUT:     {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:   {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT: {kind: 'ClassDeclaration', text: ';', subtree_size: 7},
-// CHECK:STDOUT:     {kind: 'InterfaceIntroducer', text: 'interface'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'Bar'},
-// CHECK:STDOUT:       {kind: 'DeducedParameterListStart', text: '['},
-// CHECK:STDOUT:     {kind: 'DeducedParameterList', text: ']', subtree_size: 2},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 7},
-// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 8},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: empty.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'ClassIntroducer', text: 'class'},
+// CHECK:STDOUT:       {kind: 'Name', text: 'Foo'},
+// CHECK:STDOUT:         {kind: 'DeducedParameterListStart', text: '['},
+// CHECK:STDOUT:       {kind: 'DeducedParameterList', text: ']', subtree_size: 2},
+// CHECK:STDOUT:         {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:       {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:     {kind: 'ClassDeclaration', text: ';', subtree_size: 7},
+// CHECK:STDOUT:         {kind: 'InterfaceIntroducer', text: 'interface'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'Bar'},
+// CHECK:STDOUT:           {kind: 'DeducedParameterListStart', text: '['},
+// CHECK:STDOUT:         {kind: 'DeducedParameterList', text: ']', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 7},
+// CHECK:STDOUT:     {kind: 'InterfaceDefinition', text: '}', subtree_size: 8},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 30 - 29
toolchain/parse/testdata/generics/deduced_params/fail_no_parens.carbon

@@ -24,32 +24,33 @@ interface Bar[] {}
 // CHECK:STDERR:                       ^
 interface Bar[a: i32] {}
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'ClassIntroducer', text: 'class'},
-// CHECK:STDOUT:   {kind: 'Name', text: 'Foo'},
-// CHECK:STDOUT:     {kind: 'DeducedParameterListStart', text: '['},
-// CHECK:STDOUT:   {kind: 'DeducedParameterList', text: ']', subtree_size: 2},
-// CHECK:STDOUT: {kind: 'ClassDeclaration', text: ';', has_error: yes, subtree_size: 5},
-// CHECK:STDOUT:   {kind: 'ClassIntroducer', text: 'class'},
-// CHECK:STDOUT:   {kind: 'Name', text: 'Foo'},
-// CHECK:STDOUT:     {kind: 'DeducedParameterListStart', text: '['},
-// CHECK:STDOUT:       {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:       {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:     {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:   {kind: 'DeducedParameterList', text: ']', subtree_size: 5},
-// CHECK:STDOUT: {kind: 'ClassDeclaration', text: ';', has_error: yes, subtree_size: 8},
-// CHECK:STDOUT:   {kind: 'InterfaceIntroducer', text: 'interface'},
-// CHECK:STDOUT:   {kind: 'Name', text: 'Bar'},
-// CHECK:STDOUT:     {kind: 'DeducedParameterListStart', text: '['},
-// CHECK:STDOUT:   {kind: 'DeducedParameterList', text: ']', subtree_size: 2},
-// CHECK:STDOUT: {kind: 'InterfaceDeclaration', text: 'interface', has_error: yes, subtree_size: 5},
-// CHECK:STDOUT:   {kind: 'InterfaceIntroducer', text: 'interface'},
-// CHECK:STDOUT:   {kind: 'Name', text: 'Bar'},
-// CHECK:STDOUT:     {kind: 'DeducedParameterListStart', text: '['},
-// CHECK:STDOUT:       {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:       {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:     {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:   {kind: 'DeducedParameterList', text: ']', subtree_size: 5},
-// CHECK:STDOUT: {kind: 'InterfaceDeclaration', text: 'interface', has_error: yes, subtree_size: 8},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: fail_no_parens.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'ClassIntroducer', text: 'class'},
+// CHECK:STDOUT:       {kind: 'Name', text: 'Foo'},
+// CHECK:STDOUT:         {kind: 'DeducedParameterListStart', text: '['},
+// CHECK:STDOUT:       {kind: 'DeducedParameterList', text: ']', subtree_size: 2},
+// CHECK:STDOUT:     {kind: 'ClassDeclaration', text: ';', has_error: yes, subtree_size: 5},
+// CHECK:STDOUT:       {kind: 'ClassIntroducer', text: 'class'},
+// CHECK:STDOUT:       {kind: 'Name', text: 'Foo'},
+// CHECK:STDOUT:         {kind: 'DeducedParameterListStart', text: '['},
+// CHECK:STDOUT:           {kind: 'Name', text: 'a'},
+// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:       {kind: 'DeducedParameterList', text: ']', subtree_size: 5},
+// CHECK:STDOUT:     {kind: 'ClassDeclaration', text: ';', has_error: yes, subtree_size: 8},
+// CHECK:STDOUT:       {kind: 'InterfaceIntroducer', text: 'interface'},
+// CHECK:STDOUT:       {kind: 'Name', text: 'Bar'},
+// CHECK:STDOUT:         {kind: 'DeducedParameterListStart', text: '['},
+// CHECK:STDOUT:       {kind: 'DeducedParameterList', text: ']', subtree_size: 2},
+// CHECK:STDOUT:     {kind: 'InterfaceDeclaration', text: 'interface', has_error: yes, subtree_size: 5},
+// CHECK:STDOUT:       {kind: 'InterfaceIntroducer', text: 'interface'},
+// CHECK:STDOUT:       {kind: 'Name', text: 'Bar'},
+// CHECK:STDOUT:         {kind: 'DeducedParameterListStart', text: '['},
+// CHECK:STDOUT:           {kind: 'Name', text: 'a'},
+// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:       {kind: 'DeducedParameterList', text: ']', subtree_size: 5},
+// CHECK:STDOUT:     {kind: 'InterfaceDeclaration', text: 'interface', has_error: yes, subtree_size: 8},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 25 - 24
toolchain/parse/testdata/generics/deduced_params/one.carbon

@@ -8,27 +8,28 @@ class Foo[a: i32]();
 
 interface Bar[a: i32]() {}
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'ClassIntroducer', text: 'class'},
-// CHECK:STDOUT:   {kind: 'Name', text: 'Foo'},
-// CHECK:STDOUT:     {kind: 'DeducedParameterListStart', text: '['},
-// CHECK:STDOUT:       {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:       {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:     {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:   {kind: 'DeducedParameterList', text: ']', subtree_size: 5},
-// CHECK:STDOUT:     {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:   {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT: {kind: 'ClassDeclaration', text: ';', subtree_size: 10},
-// CHECK:STDOUT:     {kind: 'InterfaceIntroducer', text: 'interface'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'Bar'},
-// CHECK:STDOUT:       {kind: 'DeducedParameterListStart', text: '['},
-// CHECK:STDOUT:         {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'DeducedParameterList', text: ']', subtree_size: 5},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 10},
-// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 11},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: one.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'ClassIntroducer', text: 'class'},
+// CHECK:STDOUT:       {kind: 'Name', text: 'Foo'},
+// CHECK:STDOUT:         {kind: 'DeducedParameterListStart', text: '['},
+// CHECK:STDOUT:           {kind: 'Name', text: 'a'},
+// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:       {kind: 'DeducedParameterList', text: ']', subtree_size: 5},
+// CHECK:STDOUT:         {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:       {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:     {kind: 'ClassDeclaration', text: ';', subtree_size: 10},
+// CHECK:STDOUT:         {kind: 'InterfaceIntroducer', text: 'interface'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'Bar'},
+// CHECK:STDOUT:           {kind: 'DeducedParameterListStart', text: '['},
+// CHECK:STDOUT:             {kind: 'Name', text: 'a'},
+// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'DeducedParameterList', text: ']', subtree_size: 5},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 10},
+// CHECK:STDOUT:     {kind: 'InterfaceDefinition', text: '}', subtree_size: 11},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 27 - 26
toolchain/parse/testdata/generics/deduced_params/one_suffix_comma.carbon

@@ -8,29 +8,30 @@ class Foo[a: i32,]();
 
 interface Bar[a: i32,]() {}
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'ClassIntroducer', text: 'class'},
-// CHECK:STDOUT:   {kind: 'Name', text: 'Foo'},
-// CHECK:STDOUT:     {kind: 'DeducedParameterListStart', text: '['},
-// CHECK:STDOUT:       {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:       {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:     {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'ParameterListComma', text: ','},
-// CHECK:STDOUT:   {kind: 'DeducedParameterList', text: ']', subtree_size: 6},
-// CHECK:STDOUT:     {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:   {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT: {kind: 'ClassDeclaration', text: ';', subtree_size: 11},
-// CHECK:STDOUT:     {kind: 'InterfaceIntroducer', text: 'interface'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'Bar'},
-// CHECK:STDOUT:       {kind: 'DeducedParameterListStart', text: '['},
-// CHECK:STDOUT:         {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'ParameterListComma', text: ','},
-// CHECK:STDOUT:     {kind: 'DeducedParameterList', text: ']', subtree_size: 6},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 11},
-// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 12},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: one_suffix_comma.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'ClassIntroducer', text: 'class'},
+// CHECK:STDOUT:       {kind: 'Name', text: 'Foo'},
+// CHECK:STDOUT:         {kind: 'DeducedParameterListStart', text: '['},
+// CHECK:STDOUT:           {kind: 'Name', text: 'a'},
+// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'ParameterListComma', text: ','},
+// CHECK:STDOUT:       {kind: 'DeducedParameterList', text: ']', subtree_size: 6},
+// CHECK:STDOUT:         {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:       {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:     {kind: 'ClassDeclaration', text: ';', subtree_size: 11},
+// CHECK:STDOUT:         {kind: 'InterfaceIntroducer', text: 'interface'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'Bar'},
+// CHECK:STDOUT:           {kind: 'DeducedParameterListStart', text: '['},
+// CHECK:STDOUT:             {kind: 'Name', text: 'a'},
+// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:           {kind: 'ParameterListComma', text: ','},
+// CHECK:STDOUT:         {kind: 'DeducedParameterList', text: ']', subtree_size: 6},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 11},
+// CHECK:STDOUT:     {kind: 'InterfaceDefinition', text: '}', subtree_size: 12},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 65 - 64
toolchain/parse/testdata/generics/deduced_params/six.carbon

@@ -8,67 +8,68 @@ class Foo[a: i32, b: i32, c: i32, d: i32, e: i32, f: i32]();
 
 interface Bar[a: i32, b: i32, c: i32, d: i32, e: i32, f: i32]() {}
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'ClassIntroducer', text: 'class'},
-// CHECK:STDOUT:   {kind: 'Name', text: 'Foo'},
-// CHECK:STDOUT:     {kind: 'DeducedParameterListStart', text: '['},
-// CHECK:STDOUT:       {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:       {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:     {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'ParameterListComma', text: ','},
-// CHECK:STDOUT:       {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:       {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:     {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'ParameterListComma', text: ','},
-// CHECK:STDOUT:       {kind: 'Name', text: 'c'},
-// CHECK:STDOUT:       {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:     {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'ParameterListComma', text: ','},
-// CHECK:STDOUT:       {kind: 'Name', text: 'd'},
-// CHECK:STDOUT:       {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:     {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'ParameterListComma', text: ','},
-// CHECK:STDOUT:       {kind: 'Name', text: 'e'},
-// CHECK:STDOUT:       {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:     {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'ParameterListComma', text: ','},
-// CHECK:STDOUT:       {kind: 'Name', text: 'f'},
-// CHECK:STDOUT:       {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:     {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:   {kind: 'DeducedParameterList', text: ']', subtree_size: 25},
-// CHECK:STDOUT:     {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:   {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT: {kind: 'ClassDeclaration', text: ';', subtree_size: 30},
-// CHECK:STDOUT:     {kind: 'InterfaceIntroducer', text: 'interface'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'Bar'},
-// CHECK:STDOUT:       {kind: 'DeducedParameterListStart', text: '['},
-// CHECK:STDOUT:         {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'ParameterListComma', text: ','},
-// CHECK:STDOUT:         {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'ParameterListComma', text: ','},
-// CHECK:STDOUT:         {kind: 'Name', text: 'c'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'ParameterListComma', text: ','},
-// CHECK:STDOUT:         {kind: 'Name', text: 'd'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'ParameterListComma', text: ','},
-// CHECK:STDOUT:         {kind: 'Name', text: 'e'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'ParameterListComma', text: ','},
-// CHECK:STDOUT:         {kind: 'Name', text: 'f'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'DeducedParameterList', text: ']', subtree_size: 25},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 30},
-// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 31},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: six.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'ClassIntroducer', text: 'class'},
+// CHECK:STDOUT:       {kind: 'Name', text: 'Foo'},
+// CHECK:STDOUT:         {kind: 'DeducedParameterListStart', text: '['},
+// CHECK:STDOUT:           {kind: 'Name', text: 'a'},
+// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'ParameterListComma', text: ','},
+// CHECK:STDOUT:           {kind: 'Name', text: 'b'},
+// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'ParameterListComma', text: ','},
+// CHECK:STDOUT:           {kind: 'Name', text: 'c'},
+// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'ParameterListComma', text: ','},
+// CHECK:STDOUT:           {kind: 'Name', text: 'd'},
+// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'ParameterListComma', text: ','},
+// CHECK:STDOUT:           {kind: 'Name', text: 'e'},
+// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'ParameterListComma', text: ','},
+// CHECK:STDOUT:           {kind: 'Name', text: 'f'},
+// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:       {kind: 'DeducedParameterList', text: ']', subtree_size: 25},
+// CHECK:STDOUT:         {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:       {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:     {kind: 'ClassDeclaration', text: ';', subtree_size: 30},
+// CHECK:STDOUT:         {kind: 'InterfaceIntroducer', text: 'interface'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'Bar'},
+// CHECK:STDOUT:           {kind: 'DeducedParameterListStart', text: '['},
+// CHECK:STDOUT:             {kind: 'Name', text: 'a'},
+// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:           {kind: 'ParameterListComma', text: ','},
+// CHECK:STDOUT:             {kind: 'Name', text: 'b'},
+// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:           {kind: 'ParameterListComma', text: ','},
+// CHECK:STDOUT:             {kind: 'Name', text: 'c'},
+// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:           {kind: 'ParameterListComma', text: ','},
+// CHECK:STDOUT:             {kind: 'Name', text: 'd'},
+// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:           {kind: 'ParameterListComma', text: ','},
+// CHECK:STDOUT:             {kind: 'Name', text: 'e'},
+// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:           {kind: 'ParameterListComma', text: ','},
+// CHECK:STDOUT:             {kind: 'Name', text: 'f'},
+// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'DeducedParameterList', text: ']', subtree_size: 25},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 30},
+// CHECK:STDOUT:     {kind: 'InterfaceDefinition', text: '}', subtree_size: 31},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 33 - 32
toolchain/parse/testdata/generics/deduced_params/two.carbon

@@ -8,35 +8,36 @@ class Foo[a: i32, b: i32]();
 
 interface Bar[a: i32, b: i32]() {}
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'ClassIntroducer', text: 'class'},
-// CHECK:STDOUT:   {kind: 'Name', text: 'Foo'},
-// CHECK:STDOUT:     {kind: 'DeducedParameterListStart', text: '['},
-// CHECK:STDOUT:       {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:       {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:     {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'ParameterListComma', text: ','},
-// CHECK:STDOUT:       {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:       {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:     {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:   {kind: 'DeducedParameterList', text: ']', subtree_size: 9},
-// CHECK:STDOUT:     {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:   {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT: {kind: 'ClassDeclaration', text: ';', subtree_size: 14},
-// CHECK:STDOUT:     {kind: 'InterfaceIntroducer', text: 'interface'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'Bar'},
-// CHECK:STDOUT:       {kind: 'DeducedParameterListStart', text: '['},
-// CHECK:STDOUT:         {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'ParameterListComma', text: ','},
-// CHECK:STDOUT:         {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'DeducedParameterList', text: ']', subtree_size: 9},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 14},
-// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 15},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: two.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'ClassIntroducer', text: 'class'},
+// CHECK:STDOUT:       {kind: 'Name', text: 'Foo'},
+// CHECK:STDOUT:         {kind: 'DeducedParameterListStart', text: '['},
+// CHECK:STDOUT:           {kind: 'Name', text: 'a'},
+// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'ParameterListComma', text: ','},
+// CHECK:STDOUT:           {kind: 'Name', text: 'b'},
+// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:       {kind: 'DeducedParameterList', text: ']', subtree_size: 9},
+// CHECK:STDOUT:         {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:       {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:     {kind: 'ClassDeclaration', text: ';', subtree_size: 14},
+// CHECK:STDOUT:         {kind: 'InterfaceIntroducer', text: 'interface'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'Bar'},
+// CHECK:STDOUT:           {kind: 'DeducedParameterListStart', text: '['},
+// CHECK:STDOUT:             {kind: 'Name', text: 'a'},
+// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:           {kind: 'ParameterListComma', text: ','},
+// CHECK:STDOUT:             {kind: 'Name', text: 'b'},
+// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'DeducedParameterList', text: ']', subtree_size: 9},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 14},
+// CHECK:STDOUT:     {kind: 'InterfaceDefinition', text: '}', subtree_size: 15},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 35 - 34
toolchain/parse/testdata/generics/deduced_params/two_suffix_comma.carbon

@@ -8,37 +8,38 @@ class Foo[a: i32, b: i32,]();
 
 interface Bar[a: i32, b: i32,]() {}
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'ClassIntroducer', text: 'class'},
-// CHECK:STDOUT:   {kind: 'Name', text: 'Foo'},
-// CHECK:STDOUT:     {kind: 'DeducedParameterListStart', text: '['},
-// CHECK:STDOUT:       {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:       {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:     {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'ParameterListComma', text: ','},
-// CHECK:STDOUT:       {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:       {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:     {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'ParameterListComma', text: ','},
-// CHECK:STDOUT:   {kind: 'DeducedParameterList', text: ']', subtree_size: 10},
-// CHECK:STDOUT:     {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:   {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT: {kind: 'ClassDeclaration', text: ';', subtree_size: 15},
-// CHECK:STDOUT:     {kind: 'InterfaceIntroducer', text: 'interface'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'Bar'},
-// CHECK:STDOUT:       {kind: 'DeducedParameterListStart', text: '['},
-// CHECK:STDOUT:         {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'ParameterListComma', text: ','},
-// CHECK:STDOUT:         {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'ParameterListComma', text: ','},
-// CHECK:STDOUT:     {kind: 'DeducedParameterList', text: ']', subtree_size: 10},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 15},
-// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 16},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: two_suffix_comma.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'ClassIntroducer', text: 'class'},
+// CHECK:STDOUT:       {kind: 'Name', text: 'Foo'},
+// CHECK:STDOUT:         {kind: 'DeducedParameterListStart', text: '['},
+// CHECK:STDOUT:           {kind: 'Name', text: 'a'},
+// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'ParameterListComma', text: ','},
+// CHECK:STDOUT:           {kind: 'Name', text: 'b'},
+// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'ParameterListComma', text: ','},
+// CHECK:STDOUT:       {kind: 'DeducedParameterList', text: ']', subtree_size: 10},
+// CHECK:STDOUT:         {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:       {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:     {kind: 'ClassDeclaration', text: ';', subtree_size: 15},
+// CHECK:STDOUT:         {kind: 'InterfaceIntroducer', text: 'interface'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'Bar'},
+// CHECK:STDOUT:           {kind: 'DeducedParameterListStart', text: '['},
+// CHECK:STDOUT:             {kind: 'Name', text: 'a'},
+// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:           {kind: 'ParameterListComma', text: ','},
+// CHECK:STDOUT:             {kind: 'Name', text: 'b'},
+// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:           {kind: 'ParameterListComma', text: ','},
+// CHECK:STDOUT:         {kind: 'DeducedParameterList', text: ']', subtree_size: 10},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 15},
+// CHECK:STDOUT:     {kind: 'InterfaceDefinition', text: '}', subtree_size: 16},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 12 - 11
toolchain/parse/testdata/generics/generic_params/basic.carbon

@@ -6,14 +6,15 @@
 
 fn foo(a:! i32);
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:   {kind: 'Name', text: 'foo'},
-// CHECK:STDOUT:     {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:       {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:       {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:     {kind: 'GenericPatternBinding', text: ':!', subtree_size: 3},
-// CHECK:STDOUT:   {kind: 'ParameterList', text: ')', subtree_size: 5},
-// CHECK:STDOUT: {kind: 'FunctionDeclaration', text: ';', subtree_size: 8},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: basic.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:       {kind: 'Name', text: 'foo'},
+// CHECK:STDOUT:         {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:           {kind: 'Name', text: 'a'},
+// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'GenericPatternBinding', text: ':!', subtree_size: 3},
+// CHECK:STDOUT:       {kind: 'ParameterList', text: ')', subtree_size: 5},
+// CHECK:STDOUT:     {kind: 'FunctionDeclaration', text: ';', subtree_size: 8},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 13 - 12
toolchain/parse/testdata/generics/generic_params/template.carbon

@@ -6,15 +6,16 @@
 
 fn foo(template a:! i32);
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:   {kind: 'Name', text: 'foo'},
-// CHECK:STDOUT:     {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:       {kind: 'GenericPatternBinding', text: ':!', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'Template', text: 'template', subtree_size: 4},
-// CHECK:STDOUT:   {kind: 'ParameterList', text: ')', subtree_size: 6},
-// CHECK:STDOUT: {kind: 'FunctionDeclaration', text: ';', subtree_size: 9},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: template.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:       {kind: 'Name', text: 'foo'},
+// CHECK:STDOUT:         {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:             {kind: 'Name', text: 'a'},
+// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'GenericPatternBinding', text: ':!', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'Template', text: 'template', subtree_size: 4},
+// CHECK:STDOUT:       {kind: 'ParameterList', text: ')', subtree_size: 6},
+// CHECK:STDOUT:     {kind: 'FunctionDeclaration', text: ';', subtree_size: 9},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 14 - 13
toolchain/parse/testdata/generics/generic_params/template_addr.carbon

@@ -6,16 +6,17 @@
 
 fn foo(template addr a:! i32);
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:   {kind: 'Name', text: 'foo'},
-// CHECK:STDOUT:     {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:           {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:         {kind: 'GenericPatternBinding', text: ':!', subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'Address', text: 'addr', subtree_size: 4},
-// CHECK:STDOUT:     {kind: 'Template', text: 'template', subtree_size: 5},
-// CHECK:STDOUT:   {kind: 'ParameterList', text: ')', subtree_size: 7},
-// CHECK:STDOUT: {kind: 'FunctionDeclaration', text: ';', subtree_size: 10},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: template_addr.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:       {kind: 'Name', text: 'foo'},
+// CHECK:STDOUT:         {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:               {kind: 'Name', text: 'a'},
+// CHECK:STDOUT:               {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'GenericPatternBinding', text: ':!', subtree_size: 3},
+// CHECK:STDOUT:           {kind: 'Address', text: 'addr', subtree_size: 4},
+// CHECK:STDOUT:         {kind: 'Template', text: 'template', subtree_size: 5},
+// CHECK:STDOUT:       {kind: 'ParameterList', text: ')', subtree_size: 7},
+// CHECK:STDOUT:     {kind: 'FunctionDeclaration', text: ';', subtree_size: 10},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 38 - 37
toolchain/parse/testdata/generics/interface/basic.carbon

@@ -9,40 +9,41 @@ interface Foo {
   fn Add[self: foo](b: Self) -> Self;
 }
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:     {kind: 'InterfaceIntroducer', text: 'interface'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'Foo'},
-// CHECK:STDOUT:   {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'Add'},
-// CHECK:STDOUT:       {kind: 'DeducedParameterListStart', text: '['},
-// CHECK:STDOUT:         {kind: 'SelfValueName', text: 'self'},
-// CHECK:STDOUT:         {kind: 'SelfTypeNameExpression', text: 'Self'},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'DeducedParameterList', text: ']', subtree_size: 5},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:         {kind: 'SelfTypeNameExpression', text: 'Self'},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 5},
-// CHECK:STDOUT:       {kind: 'SelfTypeNameExpression', text: 'Self'},
-// CHECK:STDOUT:     {kind: 'ReturnType', text: '->', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'FunctionDeclaration', text: ';', subtree_size: 15},
-// CHECK:STDOUT:     {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'Add'},
-// CHECK:STDOUT:       {kind: 'DeducedParameterListStart', text: '['},
-// CHECK:STDOUT:         {kind: 'SelfValueName', text: 'self'},
-// CHECK:STDOUT:         {kind: 'NameExpression', text: 'foo'},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'DeducedParameterList', text: ']', subtree_size: 5},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:         {kind: 'SelfTypeNameExpression', text: 'Self'},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 5},
-// CHECK:STDOUT:       {kind: 'SelfTypeNameExpression', text: 'Self'},
-// CHECK:STDOUT:     {kind: 'ReturnType', text: '->', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'FunctionDeclaration', text: ';', subtree_size: 15},
-// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 34},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: basic.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:         {kind: 'InterfaceIntroducer', text: 'interface'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'Foo'},
+// CHECK:STDOUT:       {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'Add'},
+// CHECK:STDOUT:           {kind: 'DeducedParameterListStart', text: '['},
+// CHECK:STDOUT:             {kind: 'SelfValueName', text: 'self'},
+// CHECK:STDOUT:             {kind: 'SelfTypeNameExpression', text: 'Self'},
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'DeducedParameterList', text: ']', subtree_size: 5},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:             {kind: 'Name', text: 'b'},
+// CHECK:STDOUT:             {kind: 'SelfTypeNameExpression', text: 'Self'},
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 5},
+// CHECK:STDOUT:           {kind: 'SelfTypeNameExpression', text: 'Self'},
+// CHECK:STDOUT:         {kind: 'ReturnType', text: '->', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'FunctionDeclaration', text: ';', subtree_size: 15},
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'Add'},
+// CHECK:STDOUT:           {kind: 'DeducedParameterListStart', text: '['},
+// CHECK:STDOUT:             {kind: 'SelfValueName', text: 'self'},
+// CHECK:STDOUT:             {kind: 'NameExpression', text: 'foo'},
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'DeducedParameterList', text: ']', subtree_size: 5},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:             {kind: 'Name', text: 'b'},
+// CHECK:STDOUT:             {kind: 'SelfTypeNameExpression', text: 'Self'},
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 5},
+// CHECK:STDOUT:           {kind: 'SelfTypeNameExpression', text: 'Self'},
+// CHECK:STDOUT:         {kind: 'ReturnType', text: '->', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'FunctionDeclaration', text: ';', subtree_size: 15},
+// CHECK:STDOUT:     {kind: 'InterfaceDefinition', text: '}', subtree_size: 34},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 8 - 7
toolchain/parse/testdata/generics/interface/declaration.carbon

@@ -7,10 +7,11 @@
 interface Foo {
 }
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:     {kind: 'InterfaceIntroducer', text: 'interface'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'Foo'},
-// CHECK:STDOUT:   {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3},
-// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 4},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: declaration.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:         {kind: 'InterfaceIntroducer', text: 'interface'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'Foo'},
+// CHECK:STDOUT:       {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3},
+// CHECK:STDOUT:     {kind: 'InterfaceDefinition', text: '}', subtree_size: 4},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 8 - 7
toolchain/parse/testdata/generics/interface/empty_body.carbon

@@ -6,10 +6,11 @@
 interface Foo {
 }
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:     {kind: 'InterfaceIntroducer', text: 'interface'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'Foo'},
-// CHECK:STDOUT:   {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3},
-// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 4},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: empty_body.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:         {kind: 'InterfaceIntroducer', text: 'interface'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'Foo'},
+// CHECK:STDOUT:       {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3},
+// CHECK:STDOUT:     {kind: 'InterfaceDefinition', text: '}', subtree_size: 4},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 7 - 6
toolchain/parse/testdata/generics/interface/fail_missing_name.carbon

@@ -10,9 +10,10 @@
 interface {
 }
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'InterfaceIntroducer', text: 'interface'},
-// CHECK:STDOUT:   {kind: 'InvalidParse', text: '{'},
-// CHECK:STDOUT: {kind: 'InterfaceDeclaration', text: 'interface', has_error: yes, subtree_size: 3},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: fail_missing_name.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'InterfaceIntroducer', text: 'interface'},
+// CHECK:STDOUT:       {kind: 'InvalidParse', text: '{'},
+// CHECK:STDOUT:     {kind: 'InterfaceDeclaration', text: 'interface', has_error: yes, subtree_size: 3},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 13 - 12
toolchain/parse/testdata/generics/interface/fail_missing_open_curly.carbon

@@ -11,15 +11,16 @@ interface Bar Baz {}
 
 interface Foo
 
-// CHECK:STDERR: fail_missing_open_curly.carbon:[[@LINE+11]]:19: `interface` declarations must either end with a `;` or have a `{ ... }` block for a definition.
-// CHECK:STDERR: // CHECK:STDOUT: ]
-// CHECK:STDERR:                   ^
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'InterfaceIntroducer', text: 'interface'},
-// CHECK:STDOUT:   {kind: 'Name', text: 'Bar'},
-// CHECK:STDOUT: {kind: 'InterfaceDeclaration', text: 'interface', has_error: yes, subtree_size: 3},
-// CHECK:STDOUT:   {kind: 'InterfaceIntroducer', text: 'interface'},
-// CHECK:STDOUT:   {kind: 'Name', text: 'Foo'},
-// CHECK:STDOUT: {kind: 'InterfaceDeclaration', text: 'interface', has_error: yes, subtree_size: 3},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDERR: fail_missing_open_curly.carbon:[[@LINE+12]]:21: `interface` declarations must either end with a `;` or have a `{ ... }` block for a definition.
+// CHECK:STDERR: // CHECK:STDOUT:   ]
+// CHECK:STDERR:                     ^
+// CHECK:STDOUT: - filename: fail_missing_open_curly.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'InterfaceIntroducer', text: 'interface'},
+// CHECK:STDOUT:       {kind: 'Name', text: 'Bar'},
+// CHECK:STDOUT:     {kind: 'InterfaceDeclaration', text: 'interface', has_error: yes, subtree_size: 3},
+// CHECK:STDOUT:       {kind: 'InterfaceIntroducer', text: 'interface'},
+// CHECK:STDOUT:       {kind: 'Name', text: 'Foo'},
+// CHECK:STDOUT:     {kind: 'InterfaceDeclaration', text: 'interface', has_error: yes, subtree_size: 3},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 23 - 22
toolchain/parse/testdata/generics/interface/fail_no_impl_allowed.carbon

@@ -13,25 +13,26 @@ interface Foo {
   }
 }
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:     {kind: 'InterfaceIntroducer', text: 'interface'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'Foo'},
-// CHECK:STDOUT:   {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'Add'},
-// CHECK:STDOUT:       {kind: 'DeducedParameterListStart', text: '['},
-// CHECK:STDOUT:         {kind: 'SelfValueName', text: 'self'},
-// CHECK:STDOUT:         {kind: 'SelfTypeNameExpression', text: 'Self'},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'DeducedParameterList', text: ']', subtree_size: 5},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:         {kind: 'SelfTypeNameExpression', text: 'Self'},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 5},
-// CHECK:STDOUT:       {kind: 'SelfTypeNameExpression', text: 'Self'},
-// CHECK:STDOUT:     {kind: 'ReturnType', text: '->', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'FunctionDeclaration', text: 'fn', has_error: yes, subtree_size: 15},
-// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 19},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: fail_no_impl_allowed.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:         {kind: 'InterfaceIntroducer', text: 'interface'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'Foo'},
+// CHECK:STDOUT:       {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'Add'},
+// CHECK:STDOUT:           {kind: 'DeducedParameterListStart', text: '['},
+// CHECK:STDOUT:             {kind: 'SelfValueName', text: 'self'},
+// CHECK:STDOUT:             {kind: 'SelfTypeNameExpression', text: 'Self'},
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'DeducedParameterList', text: ']', subtree_size: 5},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:             {kind: 'Name', text: 'b'},
+// CHECK:STDOUT:             {kind: 'SelfTypeNameExpression', text: 'Self'},
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 5},
+// CHECK:STDOUT:           {kind: 'SelfTypeNameExpression', text: 'Self'},
+// CHECK:STDOUT:         {kind: 'ReturnType', text: '->', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'FunctionDeclaration', text: 'fn', has_error: yes, subtree_size: 15},
+// CHECK:STDOUT:     {kind: 'InterfaceDefinition', text: '}', subtree_size: 19},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 38 - 37
toolchain/parse/testdata/generics/interface/fail_self_param_syntax.carbon

@@ -16,40 +16,41 @@ interface Foo {
   fn Mul[Self](b: Self) -> Self;
 }
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:     {kind: 'InterfaceIntroducer', text: 'interface'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'Foo'},
-// CHECK:STDOUT:   {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'Sub'},
-// CHECK:STDOUT:       {kind: 'DeducedParameterListStart', text: '['},
-// CHECK:STDOUT:         {kind: 'Name', text: 'me'},
-// CHECK:STDOUT:         {kind: 'InvalidParse', text: 'Self', has_error: yes},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: 'me', has_error: yes, subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'DeducedParameterList', text: ']', has_error: yes, subtree_size: 5},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:         {kind: 'SelfTypeNameExpression', text: 'Self'},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 5},
-// CHECK:STDOUT:       {kind: 'SelfTypeNameExpression', text: 'Self'},
-// CHECK:STDOUT:     {kind: 'ReturnType', text: '->', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'FunctionDeclaration', text: ';', subtree_size: 15},
-// CHECK:STDOUT:     {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'Mul'},
-// CHECK:STDOUT:       {kind: 'DeducedParameterListStart', text: '['},
-// CHECK:STDOUT:         {kind: 'Name', text: 'Self', has_error: yes},
-// CHECK:STDOUT:         {kind: 'InvalidParse', text: 'Self', has_error: yes},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: 'Self', has_error: yes, subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'DeducedParameterList', text: ']', has_error: yes, subtree_size: 5},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:         {kind: 'SelfTypeNameExpression', text: 'Self'},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 5},
-// CHECK:STDOUT:       {kind: 'SelfTypeNameExpression', text: 'Self'},
-// CHECK:STDOUT:     {kind: 'ReturnType', text: '->', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'FunctionDeclaration', text: ';', subtree_size: 15},
-// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 34},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: fail_self_param_syntax.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:         {kind: 'InterfaceIntroducer', text: 'interface'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'Foo'},
+// CHECK:STDOUT:       {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'Sub'},
+// CHECK:STDOUT:           {kind: 'DeducedParameterListStart', text: '['},
+// CHECK:STDOUT:             {kind: 'Name', text: 'me'},
+// CHECK:STDOUT:             {kind: 'InvalidParse', text: 'Self', has_error: yes},
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: 'me', has_error: yes, subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'DeducedParameterList', text: ']', has_error: yes, subtree_size: 5},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:             {kind: 'Name', text: 'b'},
+// CHECK:STDOUT:             {kind: 'SelfTypeNameExpression', text: 'Self'},
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 5},
+// CHECK:STDOUT:           {kind: 'SelfTypeNameExpression', text: 'Self'},
+// CHECK:STDOUT:         {kind: 'ReturnType', text: '->', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'FunctionDeclaration', text: ';', subtree_size: 15},
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'Mul'},
+// CHECK:STDOUT:           {kind: 'DeducedParameterListStart', text: '['},
+// CHECK:STDOUT:             {kind: 'Name', text: 'Self', has_error: yes},
+// CHECK:STDOUT:             {kind: 'InvalidParse', text: 'Self', has_error: yes},
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: 'Self', has_error: yes, subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'DeducedParameterList', text: ']', has_error: yes, subtree_size: 5},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:             {kind: 'Name', text: 'b'},
+// CHECK:STDOUT:             {kind: 'SelfTypeNameExpression', text: 'Self'},
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 5},
+// CHECK:STDOUT:           {kind: 'SelfTypeNameExpression', text: 'Self'},
+// CHECK:STDOUT:         {kind: 'ReturnType', text: '->', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'FunctionDeclaration', text: ';', subtree_size: 15},
+// CHECK:STDOUT:     {kind: 'InterfaceDefinition', text: '}', subtree_size: 34},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 15 - 14
toolchain/parse/testdata/generics/interface/non_instance_fn.carbon

@@ -8,17 +8,18 @@ interface Foo {
   fn FooFactory() -> Self;
 }
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:     {kind: 'InterfaceIntroducer', text: 'interface'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'Foo'},
-// CHECK:STDOUT:   {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'FooFactory'},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:       {kind: 'SelfTypeNameExpression', text: 'Self'},
-// CHECK:STDOUT:     {kind: 'ReturnType', text: '->', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'FunctionDeclaration', text: ';', subtree_size: 7},
-// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 11},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: non_instance_fn.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:         {kind: 'InterfaceIntroducer', text: 'interface'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'Foo'},
+// CHECK:STDOUT:       {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'FooFactory'},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'SelfTypeNameExpression', text: 'Self'},
+// CHECK:STDOUT:         {kind: 'ReturnType', text: '->', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'FunctionDeclaration', text: ';', subtree_size: 7},
+// CHECK:STDOUT:     {kind: 'InterfaceDefinition', text: '}', subtree_size: 11},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 41 - 40
toolchain/parse/testdata/generics/interface/self_pointer.carbon

@@ -9,44 +9,45 @@ interface Foo {
   fn Sub[addr self: foo*](b: Self) -> Self;
 }
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:     {kind: 'InterfaceIntroducer', text: 'interface'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'Foo'},
-// CHECK:STDOUT:   {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'Sub'},
-// CHECK:STDOUT:       {kind: 'DeducedParameterListStart', text: '['},
-// CHECK:STDOUT:           {kind: 'SelfValueName', text: 'self'},
+// CHECK:STDOUT: - filename: self_pointer.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:         {kind: 'InterfaceIntroducer', text: 'interface'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'Foo'},
+// CHECK:STDOUT:       {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'Sub'},
+// CHECK:STDOUT:           {kind: 'DeducedParameterListStart', text: '['},
+// CHECK:STDOUT:               {kind: 'SelfValueName', text: 'self'},
+// CHECK:STDOUT:                 {kind: 'SelfTypeNameExpression', text: 'Self'},
+// CHECK:STDOUT:               {kind: 'PostfixOperator', text: '*', subtree_size: 2},
+// CHECK:STDOUT:             {kind: 'PatternBinding', text: ':', subtree_size: 4},
+// CHECK:STDOUT:           {kind: 'Address', text: 'addr', subtree_size: 5},
+// CHECK:STDOUT:         {kind: 'DeducedParameterList', text: ']', subtree_size: 7},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:             {kind: 'Name', text: 'b'},
 // CHECK:STDOUT:             {kind: 'SelfTypeNameExpression', text: 'Self'},
-// CHECK:STDOUT:           {kind: 'PostfixOperator', text: '*', subtree_size: 2},
-// CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 4},
-// CHECK:STDOUT:       {kind: 'Address', text: 'addr', subtree_size: 5},
-// CHECK:STDOUT:     {kind: 'DeducedParameterList', text: ']', subtree_size: 7},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:         {kind: 'SelfTypeNameExpression', text: 'Self'},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 5},
-// CHECK:STDOUT:       {kind: 'SelfTypeNameExpression', text: 'Self'},
-// CHECK:STDOUT:     {kind: 'ReturnType', text: '->', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'FunctionDeclaration', text: ';', subtree_size: 17},
-// CHECK:STDOUT:     {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'Sub'},
-// CHECK:STDOUT:       {kind: 'DeducedParameterListStart', text: '['},
-// CHECK:STDOUT:           {kind: 'SelfValueName', text: 'self'},
-// CHECK:STDOUT:             {kind: 'NameExpression', text: 'foo'},
-// CHECK:STDOUT:           {kind: 'PostfixOperator', text: '*', subtree_size: 2},
-// CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 4},
-// CHECK:STDOUT:       {kind: 'Address', text: 'addr', subtree_size: 5},
-// CHECK:STDOUT:     {kind: 'DeducedParameterList', text: ']', subtree_size: 7},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:         {kind: 'SelfTypeNameExpression', text: 'Self'},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 5},
-// CHECK:STDOUT:       {kind: 'SelfTypeNameExpression', text: 'Self'},
-// CHECK:STDOUT:     {kind: 'ReturnType', text: '->', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'FunctionDeclaration', text: ';', subtree_size: 17},
-// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 38},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 5},
+// CHECK:STDOUT:           {kind: 'SelfTypeNameExpression', text: 'Self'},
+// CHECK:STDOUT:         {kind: 'ReturnType', text: '->', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'FunctionDeclaration', text: ';', subtree_size: 17},
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'Sub'},
+// CHECK:STDOUT:           {kind: 'DeducedParameterListStart', text: '['},
+// CHECK:STDOUT:               {kind: 'SelfValueName', text: 'self'},
+// CHECK:STDOUT:                 {kind: 'NameExpression', text: 'foo'},
+// CHECK:STDOUT:               {kind: 'PostfixOperator', text: '*', subtree_size: 2},
+// CHECK:STDOUT:             {kind: 'PatternBinding', text: ':', subtree_size: 4},
+// CHECK:STDOUT:           {kind: 'Address', text: 'addr', subtree_size: 5},
+// CHECK:STDOUT:         {kind: 'DeducedParameterList', text: ']', subtree_size: 7},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:             {kind: 'Name', text: 'b'},
+// CHECK:STDOUT:             {kind: 'SelfTypeNameExpression', text: 'Self'},
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 5},
+// CHECK:STDOUT:           {kind: 'SelfTypeNameExpression', text: 'Self'},
+// CHECK:STDOUT:         {kind: 'ReturnType', text: '->', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'FunctionDeclaration', text: ';', subtree_size: 17},
+// CHECK:STDOUT:     {kind: 'InterfaceDefinition', text: '}', subtree_size: 38},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 13 - 12
toolchain/parse/testdata/generics/named_constraint/basic.carbon

@@ -8,15 +8,16 @@ constraint Foo {
   fn Baz();
 }
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:     {kind: 'NamedConstraintIntroducer', text: 'constraint'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'Foo'},
-// CHECK:STDOUT:   {kind: 'NamedConstraintDefinitionStart', text: '{', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'Baz'},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'FunctionDeclaration', text: ';', subtree_size: 5},
-// CHECK:STDOUT: {kind: 'NamedConstraintDefinition', text: '}', subtree_size: 9},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: basic.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:         {kind: 'NamedConstraintIntroducer', text: 'constraint'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'Foo'},
+// CHECK:STDOUT:       {kind: 'NamedConstraintDefinitionStart', text: '{', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'Baz'},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'FunctionDeclaration', text: ';', subtree_size: 5},
+// CHECK:STDOUT:     {kind: 'NamedConstraintDefinition', text: '}', subtree_size: 9},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 23 - 22
toolchain/parse/testdata/generics/named_constraint/fail_no_impl_allowed.carbon

@@ -11,25 +11,26 @@ constraint Foo {
   fn Add[self: Self](b: Self) -> Self {}
 }
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:     {kind: 'NamedConstraintIntroducer', text: 'constraint'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'Foo'},
-// CHECK:STDOUT:   {kind: 'NamedConstraintDefinitionStart', text: '{', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'Add'},
-// CHECK:STDOUT:       {kind: 'DeducedParameterListStart', text: '['},
-// CHECK:STDOUT:         {kind: 'SelfValueName', text: 'self'},
-// CHECK:STDOUT:         {kind: 'SelfTypeNameExpression', text: 'Self'},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'DeducedParameterList', text: ']', subtree_size: 5},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:         {kind: 'SelfTypeNameExpression', text: 'Self'},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 5},
-// CHECK:STDOUT:       {kind: 'SelfTypeNameExpression', text: 'Self'},
-// CHECK:STDOUT:     {kind: 'ReturnType', text: '->', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'FunctionDeclaration', text: 'fn', has_error: yes, subtree_size: 15},
-// CHECK:STDOUT: {kind: 'NamedConstraintDefinition', text: '}', subtree_size: 19},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: fail_no_impl_allowed.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:         {kind: 'NamedConstraintIntroducer', text: 'constraint'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'Foo'},
+// CHECK:STDOUT:       {kind: 'NamedConstraintDefinitionStart', text: '{', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'Add'},
+// CHECK:STDOUT:           {kind: 'DeducedParameterListStart', text: '['},
+// CHECK:STDOUT:             {kind: 'SelfValueName', text: 'self'},
+// CHECK:STDOUT:             {kind: 'SelfTypeNameExpression', text: 'Self'},
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'DeducedParameterList', text: ']', subtree_size: 5},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:             {kind: 'Name', text: 'b'},
+// CHECK:STDOUT:             {kind: 'SelfTypeNameExpression', text: 'Self'},
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 5},
+// CHECK:STDOUT:           {kind: 'SelfTypeNameExpression', text: 'Self'},
+// CHECK:STDOUT:         {kind: 'ReturnType', text: '->', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'FunctionDeclaration', text: 'fn', has_error: yes, subtree_size: 15},
+// CHECK:STDOUT:     {kind: 'NamedConstraintDefinition', text: '}', subtree_size: 19},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 15 - 14
toolchain/parse/testdata/generics/params/empty.carbon

@@ -8,17 +8,18 @@ class Foo();
 
 interface Bar() {}
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'ClassIntroducer', text: 'class'},
-// CHECK:STDOUT:   {kind: 'Name', text: 'Foo'},
-// CHECK:STDOUT:     {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:   {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT: {kind: 'ClassDeclaration', text: ';', subtree_size: 5},
-// CHECK:STDOUT:     {kind: 'InterfaceIntroducer', text: 'interface'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'Bar'},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 5},
-// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 6},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: empty.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'ClassIntroducer', text: 'class'},
+// CHECK:STDOUT:       {kind: 'Name', text: 'Foo'},
+// CHECK:STDOUT:         {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:       {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:     {kind: 'ClassDeclaration', text: ';', subtree_size: 5},
+// CHECK:STDOUT:         {kind: 'InterfaceIntroducer', text: 'interface'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'Bar'},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 5},
+// CHECK:STDOUT:     {kind: 'InterfaceDefinition', text: '}', subtree_size: 6},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 21 - 20
toolchain/parse/testdata/generics/params/one.carbon

@@ -8,23 +8,24 @@ class Foo(a: i32);
 
 interface Bar(a: i32) {}
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'ClassIntroducer', text: 'class'},
-// CHECK:STDOUT:   {kind: 'Name', text: 'Foo'},
-// CHECK:STDOUT:     {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:       {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:       {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:     {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:   {kind: 'ParameterList', text: ')', subtree_size: 5},
-// CHECK:STDOUT: {kind: 'ClassDeclaration', text: ';', subtree_size: 8},
-// CHECK:STDOUT:     {kind: 'InterfaceIntroducer', text: 'interface'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'Bar'},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 5},
-// CHECK:STDOUT:   {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 8},
-// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 9},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: one.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'ClassIntroducer', text: 'class'},
+// CHECK:STDOUT:       {kind: 'Name', text: 'Foo'},
+// CHECK:STDOUT:         {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:           {kind: 'Name', text: 'a'},
+// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:       {kind: 'ParameterList', text: ')', subtree_size: 5},
+// CHECK:STDOUT:     {kind: 'ClassDeclaration', text: ';', subtree_size: 8},
+// CHECK:STDOUT:         {kind: 'InterfaceIntroducer', text: 'interface'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'Bar'},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:             {kind: 'Name', text: 'a'},
+// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 5},
+// CHECK:STDOUT:       {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 8},
+// CHECK:STDOUT:     {kind: 'InterfaceDefinition', text: '}', subtree_size: 9},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 23 - 22
toolchain/parse/testdata/generics/params/one_suffix_comma.carbon

@@ -8,25 +8,26 @@ class Foo(a: i32,);
 
 interface Bar(a: i32,) {}
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'ClassIntroducer', text: 'class'},
-// CHECK:STDOUT:   {kind: 'Name', text: 'Foo'},
-// CHECK:STDOUT:     {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:       {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:       {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:     {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'ParameterListComma', text: ','},
-// CHECK:STDOUT:   {kind: 'ParameterList', text: ')', subtree_size: 6},
-// CHECK:STDOUT: {kind: 'ClassDeclaration', text: ';', subtree_size: 9},
-// CHECK:STDOUT:     {kind: 'InterfaceIntroducer', text: 'interface'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'Bar'},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'ParameterListComma', text: ','},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 6},
-// CHECK:STDOUT:   {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 9},
-// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 10},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: one_suffix_comma.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'ClassIntroducer', text: 'class'},
+// CHECK:STDOUT:       {kind: 'Name', text: 'Foo'},
+// CHECK:STDOUT:         {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:           {kind: 'Name', text: 'a'},
+// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'ParameterListComma', text: ','},
+// CHECK:STDOUT:       {kind: 'ParameterList', text: ')', subtree_size: 6},
+// CHECK:STDOUT:     {kind: 'ClassDeclaration', text: ';', subtree_size: 9},
+// CHECK:STDOUT:         {kind: 'InterfaceIntroducer', text: 'interface'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'Bar'},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:             {kind: 'Name', text: 'a'},
+// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:           {kind: 'ParameterListComma', text: ','},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 6},
+// CHECK:STDOUT:       {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 9},
+// CHECK:STDOUT:     {kind: 'InterfaceDefinition', text: '}', subtree_size: 10},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 61 - 60
toolchain/parse/testdata/generics/params/six.carbon

@@ -8,63 +8,64 @@ class Foo(a: i32, b: i32, c: i32, d: i32, e: i32, f: i32);
 
 interface Bar(a: i32, b: i32, c: i32, d: i32, e: i32, f: i32) {}
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'ClassIntroducer', text: 'class'},
-// CHECK:STDOUT:   {kind: 'Name', text: 'Foo'},
-// CHECK:STDOUT:     {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:       {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:       {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:     {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'ParameterListComma', text: ','},
-// CHECK:STDOUT:       {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:       {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:     {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'ParameterListComma', text: ','},
-// CHECK:STDOUT:       {kind: 'Name', text: 'c'},
-// CHECK:STDOUT:       {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:     {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'ParameterListComma', text: ','},
-// CHECK:STDOUT:       {kind: 'Name', text: 'd'},
-// CHECK:STDOUT:       {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:     {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'ParameterListComma', text: ','},
-// CHECK:STDOUT:       {kind: 'Name', text: 'e'},
-// CHECK:STDOUT:       {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:     {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'ParameterListComma', text: ','},
-// CHECK:STDOUT:       {kind: 'Name', text: 'f'},
-// CHECK:STDOUT:       {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:     {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:   {kind: 'ParameterList', text: ')', subtree_size: 25},
-// CHECK:STDOUT: {kind: 'ClassDeclaration', text: ';', subtree_size: 28},
-// CHECK:STDOUT:     {kind: 'InterfaceIntroducer', text: 'interface'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'Bar'},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'ParameterListComma', text: ','},
-// CHECK:STDOUT:         {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'ParameterListComma', text: ','},
-// CHECK:STDOUT:         {kind: 'Name', text: 'c'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'ParameterListComma', text: ','},
-// CHECK:STDOUT:         {kind: 'Name', text: 'd'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'ParameterListComma', text: ','},
-// CHECK:STDOUT:         {kind: 'Name', text: 'e'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'ParameterListComma', text: ','},
-// CHECK:STDOUT:         {kind: 'Name', text: 'f'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 25},
-// CHECK:STDOUT:   {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 28},
-// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 29},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: six.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'ClassIntroducer', text: 'class'},
+// CHECK:STDOUT:       {kind: 'Name', text: 'Foo'},
+// CHECK:STDOUT:         {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:           {kind: 'Name', text: 'a'},
+// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'ParameterListComma', text: ','},
+// CHECK:STDOUT:           {kind: 'Name', text: 'b'},
+// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'ParameterListComma', text: ','},
+// CHECK:STDOUT:           {kind: 'Name', text: 'c'},
+// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'ParameterListComma', text: ','},
+// CHECK:STDOUT:           {kind: 'Name', text: 'd'},
+// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'ParameterListComma', text: ','},
+// CHECK:STDOUT:           {kind: 'Name', text: 'e'},
+// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'ParameterListComma', text: ','},
+// CHECK:STDOUT:           {kind: 'Name', text: 'f'},
+// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:       {kind: 'ParameterList', text: ')', subtree_size: 25},
+// CHECK:STDOUT:     {kind: 'ClassDeclaration', text: ';', subtree_size: 28},
+// CHECK:STDOUT:         {kind: 'InterfaceIntroducer', text: 'interface'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'Bar'},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:             {kind: 'Name', text: 'a'},
+// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:           {kind: 'ParameterListComma', text: ','},
+// CHECK:STDOUT:             {kind: 'Name', text: 'b'},
+// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:           {kind: 'ParameterListComma', text: ','},
+// CHECK:STDOUT:             {kind: 'Name', text: 'c'},
+// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:           {kind: 'ParameterListComma', text: ','},
+// CHECK:STDOUT:             {kind: 'Name', text: 'd'},
+// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:           {kind: 'ParameterListComma', text: ','},
+// CHECK:STDOUT:             {kind: 'Name', text: 'e'},
+// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:           {kind: 'ParameterListComma', text: ','},
+// CHECK:STDOUT:             {kind: 'Name', text: 'f'},
+// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 25},
+// CHECK:STDOUT:       {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 28},
+// CHECK:STDOUT:     {kind: 'InterfaceDefinition', text: '}', subtree_size: 29},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 29 - 28
toolchain/parse/testdata/generics/params/two.carbon

@@ -8,31 +8,32 @@ class Foo(a: i32, b: i32);
 
 interface Bar(a: i32, b: i32) {}
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'ClassIntroducer', text: 'class'},
-// CHECK:STDOUT:   {kind: 'Name', text: 'Foo'},
-// CHECK:STDOUT:     {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:       {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:       {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:     {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'ParameterListComma', text: ','},
-// CHECK:STDOUT:       {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:       {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:     {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:   {kind: 'ParameterList', text: ')', subtree_size: 9},
-// CHECK:STDOUT: {kind: 'ClassDeclaration', text: ';', subtree_size: 12},
-// CHECK:STDOUT:     {kind: 'InterfaceIntroducer', text: 'interface'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'Bar'},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'ParameterListComma', text: ','},
-// CHECK:STDOUT:         {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 9},
-// CHECK:STDOUT:   {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 12},
-// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 13},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: two.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'ClassIntroducer', text: 'class'},
+// CHECK:STDOUT:       {kind: 'Name', text: 'Foo'},
+// CHECK:STDOUT:         {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:           {kind: 'Name', text: 'a'},
+// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'ParameterListComma', text: ','},
+// CHECK:STDOUT:           {kind: 'Name', text: 'b'},
+// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:       {kind: 'ParameterList', text: ')', subtree_size: 9},
+// CHECK:STDOUT:     {kind: 'ClassDeclaration', text: ';', subtree_size: 12},
+// CHECK:STDOUT:         {kind: 'InterfaceIntroducer', text: 'interface'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'Bar'},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:             {kind: 'Name', text: 'a'},
+// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:           {kind: 'ParameterListComma', text: ','},
+// CHECK:STDOUT:             {kind: 'Name', text: 'b'},
+// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 9},
+// CHECK:STDOUT:       {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 12},
+// CHECK:STDOUT:     {kind: 'InterfaceDefinition', text: '}', subtree_size: 13},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 31 - 30
toolchain/parse/testdata/generics/params/two_suffix_comma.carbon

@@ -8,33 +8,34 @@ class Foo(a: i32, b: i32,);
 
 interface Bar(a: i32, b: i32,) {}
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'ClassIntroducer', text: 'class'},
-// CHECK:STDOUT:   {kind: 'Name', text: 'Foo'},
-// CHECK:STDOUT:     {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:       {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:       {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:     {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'ParameterListComma', text: ','},
-// CHECK:STDOUT:       {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:       {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:     {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'ParameterListComma', text: ','},
-// CHECK:STDOUT:   {kind: 'ParameterList', text: ')', subtree_size: 10},
-// CHECK:STDOUT: {kind: 'ClassDeclaration', text: ';', subtree_size: 13},
-// CHECK:STDOUT:     {kind: 'InterfaceIntroducer', text: 'interface'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'Bar'},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'Name', text: 'a'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'ParameterListComma', text: ','},
-// CHECK:STDOUT:         {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'ParameterListComma', text: ','},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 10},
-// CHECK:STDOUT:   {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 13},
-// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 14},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: two_suffix_comma.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'ClassIntroducer', text: 'class'},
+// CHECK:STDOUT:       {kind: 'Name', text: 'Foo'},
+// CHECK:STDOUT:         {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:           {kind: 'Name', text: 'a'},
+// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'ParameterListComma', text: ','},
+// CHECK:STDOUT:           {kind: 'Name', text: 'b'},
+// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'ParameterListComma', text: ','},
+// CHECK:STDOUT:       {kind: 'ParameterList', text: ')', subtree_size: 10},
+// CHECK:STDOUT:     {kind: 'ClassDeclaration', text: ';', subtree_size: 13},
+// CHECK:STDOUT:         {kind: 'InterfaceIntroducer', text: 'interface'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'Bar'},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:             {kind: 'Name', text: 'a'},
+// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:           {kind: 'ParameterListComma', text: ','},
+// CHECK:STDOUT:             {kind: 'Name', text: 'b'},
+// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:           {kind: 'ParameterListComma', text: ','},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 10},
+// CHECK:STDOUT:       {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 13},
+// CHECK:STDOUT:     {kind: 'InterfaceDefinition', text: '}', subtree_size: 14},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 24 - 23
toolchain/parse/testdata/if/basic.carbon

@@ -14,32 +14,33 @@ fn F() {
   }
 }
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:     {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'F'},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
-// CHECK:STDOUT:       {kind: 'IfConditionStart', text: '('},
-// CHECK:STDOUT:       {kind: 'NameExpression', text: 'a'},
-// CHECK:STDOUT:     {kind: 'IfCondition', text: ')', subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'CodeBlockStart', text: '{'},
+// CHECK:STDOUT: - filename: basic.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'F'},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:           {kind: 'IfConditionStart', text: '('},
-// CHECK:STDOUT:           {kind: 'NameExpression', text: 'b'},
+// CHECK:STDOUT:           {kind: 'NameExpression', text: 'a'},
 // CHECK:STDOUT:         {kind: 'IfCondition', text: ')', subtree_size: 3},
 // CHECK:STDOUT:           {kind: 'CodeBlockStart', text: '{'},
 // CHECK:STDOUT:               {kind: 'IfConditionStart', text: '('},
-// CHECK:STDOUT:               {kind: 'NameExpression', text: 'c'},
+// CHECK:STDOUT:               {kind: 'NameExpression', text: 'b'},
 // CHECK:STDOUT:             {kind: 'IfCondition', text: ')', subtree_size: 3},
 // CHECK:STDOUT:               {kind: 'CodeBlockStart', text: '{'},
-// CHECK:STDOUT:                 {kind: 'NameExpression', text: 'd'},
-// CHECK:STDOUT:               {kind: 'ExpressionStatement', text: ';', subtree_size: 2},
-// CHECK:STDOUT:             {kind: 'CodeBlock', text: '}', subtree_size: 4},
-// CHECK:STDOUT:           {kind: 'IfStatement', text: 'if', subtree_size: 8},
-// CHECK:STDOUT:         {kind: 'CodeBlock', text: '}', subtree_size: 10},
-// CHECK:STDOUT:       {kind: 'IfStatement', text: 'if', subtree_size: 14},
-// CHECK:STDOUT:     {kind: 'CodeBlock', text: '}', subtree_size: 16},
-// CHECK:STDOUT:   {kind: 'IfStatement', text: 'if', subtree_size: 20},
-// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 26},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT:                   {kind: 'IfConditionStart', text: '('},
+// CHECK:STDOUT:                   {kind: 'NameExpression', text: 'c'},
+// CHECK:STDOUT:                 {kind: 'IfCondition', text: ')', subtree_size: 3},
+// CHECK:STDOUT:                   {kind: 'CodeBlockStart', text: '{'},
+// CHECK:STDOUT:                     {kind: 'NameExpression', text: 'd'},
+// CHECK:STDOUT:                   {kind: 'ExpressionStatement', text: ';', subtree_size: 2},
+// CHECK:STDOUT:                 {kind: 'CodeBlock', text: '}', subtree_size: 4},
+// CHECK:STDOUT:               {kind: 'IfStatement', text: 'if', subtree_size: 8},
+// CHECK:STDOUT:             {kind: 'CodeBlock', text: '}', subtree_size: 10},
+// CHECK:STDOUT:           {kind: 'IfStatement', text: 'if', subtree_size: 14},
+// CHECK:STDOUT:         {kind: 'CodeBlock', text: '}', subtree_size: 16},
+// CHECK:STDOUT:       {kind: 'IfStatement', text: 'if', subtree_size: 20},
+// CHECK:STDOUT:     {kind: 'FunctionDefinition', text: '}', subtree_size: 26},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 48 - 47
toolchain/parse/testdata/if/else.carbon

@@ -19,58 +19,59 @@ fn F() {
   else { h; }
 }
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:     {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'F'},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
-// CHECK:STDOUT:       {kind: 'IfConditionStart', text: '('},
-// CHECK:STDOUT:       {kind: 'NameExpression', text: 'a'},
-// CHECK:STDOUT:     {kind: 'IfCondition', text: ')', subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'CodeBlockStart', text: '{'},
+// CHECK:STDOUT: - filename: else.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'F'},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:           {kind: 'IfConditionStart', text: '('},
-// CHECK:STDOUT:           {kind: 'NameExpression', text: 'b'},
+// CHECK:STDOUT:           {kind: 'NameExpression', text: 'a'},
 // CHECK:STDOUT:         {kind: 'IfCondition', text: ')', subtree_size: 3},
 // CHECK:STDOUT:           {kind: 'CodeBlockStart', text: '{'},
-// CHECK:STDOUT:             {kind: 'NameExpression', text: 'c'},
+// CHECK:STDOUT:               {kind: 'IfConditionStart', text: '('},
+// CHECK:STDOUT:               {kind: 'NameExpression', text: 'b'},
+// CHECK:STDOUT:             {kind: 'IfCondition', text: ')', subtree_size: 3},
+// CHECK:STDOUT:               {kind: 'CodeBlockStart', text: '{'},
+// CHECK:STDOUT:                 {kind: 'NameExpression', text: 'c'},
+// CHECK:STDOUT:               {kind: 'ExpressionStatement', text: ';', subtree_size: 2},
+// CHECK:STDOUT:             {kind: 'CodeBlock', text: '}', subtree_size: 4},
+// CHECK:STDOUT:             {kind: 'IfStatementElse', text: 'else'},
+// CHECK:STDOUT:               {kind: 'CodeBlockStart', text: '{'},
+// CHECK:STDOUT:                 {kind: 'NameExpression', text: 'd'},
+// CHECK:STDOUT:               {kind: 'ExpressionStatement', text: ';', subtree_size: 2},
+// CHECK:STDOUT:             {kind: 'CodeBlock', text: '}', subtree_size: 4},
+// CHECK:STDOUT:           {kind: 'IfStatement', text: 'if', subtree_size: 13},
+// CHECK:STDOUT:         {kind: 'CodeBlock', text: '}', subtree_size: 15},
+// CHECK:STDOUT:         {kind: 'IfStatementElse', text: 'else'},
+// CHECK:STDOUT:           {kind: 'CodeBlockStart', text: '{'},
+// CHECK:STDOUT:             {kind: 'NameExpression', text: 'e'},
 // CHECK:STDOUT:           {kind: 'ExpressionStatement', text: ';', subtree_size: 2},
 // CHECK:STDOUT:         {kind: 'CodeBlock', text: '}', subtree_size: 4},
-// CHECK:STDOUT:         {kind: 'IfStatementElse', text: 'else'},
+// CHECK:STDOUT:       {kind: 'IfStatement', text: 'if', subtree_size: 24},
+// CHECK:STDOUT:           {kind: 'IfConditionStart', text: '('},
+// CHECK:STDOUT:           {kind: 'NameExpression', text: 'x'},
+// CHECK:STDOUT:         {kind: 'IfCondition', text: ')', subtree_size: 3},
 // CHECK:STDOUT:           {kind: 'CodeBlockStart', text: '{'},
-// CHECK:STDOUT:             {kind: 'NameExpression', text: 'd'},
+// CHECK:STDOUT:             {kind: 'NameExpression', text: 'f'},
 // CHECK:STDOUT:           {kind: 'ExpressionStatement', text: ';', subtree_size: 2},
 // CHECK:STDOUT:         {kind: 'CodeBlock', text: '}', subtree_size: 4},
-// CHECK:STDOUT:       {kind: 'IfStatement', text: 'if', subtree_size: 13},
-// CHECK:STDOUT:     {kind: 'CodeBlock', text: '}', subtree_size: 15},
-// CHECK:STDOUT:     {kind: 'IfStatementElse', text: 'else'},
-// CHECK:STDOUT:       {kind: 'CodeBlockStart', text: '{'},
-// CHECK:STDOUT:         {kind: 'NameExpression', text: 'e'},
-// CHECK:STDOUT:       {kind: 'ExpressionStatement', text: ';', subtree_size: 2},
-// CHECK:STDOUT:     {kind: 'CodeBlock', text: '}', subtree_size: 4},
-// CHECK:STDOUT:   {kind: 'IfStatement', text: 'if', subtree_size: 24},
-// CHECK:STDOUT:       {kind: 'IfConditionStart', text: '('},
-// CHECK:STDOUT:       {kind: 'NameExpression', text: 'x'},
-// CHECK:STDOUT:     {kind: 'IfCondition', text: ')', subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'CodeBlockStart', text: '{'},
-// CHECK:STDOUT:         {kind: 'NameExpression', text: 'f'},
-// CHECK:STDOUT:       {kind: 'ExpressionStatement', text: ';', subtree_size: 2},
-// CHECK:STDOUT:     {kind: 'CodeBlock', text: '}', subtree_size: 4},
-// CHECK:STDOUT:     {kind: 'IfStatementElse', text: 'else'},
-// CHECK:STDOUT:         {kind: 'IfConditionStart', text: '('},
-// CHECK:STDOUT:         {kind: 'NameExpression', text: 'x'},
-// CHECK:STDOUT:       {kind: 'IfCondition', text: ')', subtree_size: 3},
-// CHECK:STDOUT:         {kind: 'CodeBlockStart', text: '{'},
-// CHECK:STDOUT:           {kind: 'NameExpression', text: 'g'},
-// CHECK:STDOUT:         {kind: 'ExpressionStatement', text: ';', subtree_size: 2},
-// CHECK:STDOUT:       {kind: 'CodeBlock', text: '}', subtree_size: 4},
-// CHECK:STDOUT:       {kind: 'IfStatementElse', text: 'else'},
-// CHECK:STDOUT:         {kind: 'CodeBlockStart', text: '{'},
-// CHECK:STDOUT:           {kind: 'NameExpression', text: 'h'},
-// CHECK:STDOUT:         {kind: 'ExpressionStatement', text: ';', subtree_size: 2},
-// CHECK:STDOUT:       {kind: 'CodeBlock', text: '}', subtree_size: 4},
-// CHECK:STDOUT:     {kind: 'IfStatement', text: 'if', subtree_size: 13},
-// CHECK:STDOUT:   {kind: 'IfStatement', text: 'if', subtree_size: 22},
-// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 52},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT:         {kind: 'IfStatementElse', text: 'else'},
+// CHECK:STDOUT:             {kind: 'IfConditionStart', text: '('},
+// CHECK:STDOUT:             {kind: 'NameExpression', text: 'x'},
+// CHECK:STDOUT:           {kind: 'IfCondition', text: ')', subtree_size: 3},
+// CHECK:STDOUT:             {kind: 'CodeBlockStart', text: '{'},
+// CHECK:STDOUT:               {kind: 'NameExpression', text: 'g'},
+// CHECK:STDOUT:             {kind: 'ExpressionStatement', text: ';', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'CodeBlock', text: '}', subtree_size: 4},
+// CHECK:STDOUT:           {kind: 'IfStatementElse', text: 'else'},
+// CHECK:STDOUT:             {kind: 'CodeBlockStart', text: '{'},
+// CHECK:STDOUT:               {kind: 'NameExpression', text: 'h'},
+// CHECK:STDOUT:             {kind: 'ExpressionStatement', text: ';', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'CodeBlock', text: '}', subtree_size: 4},
+// CHECK:STDOUT:         {kind: 'IfStatement', text: 'if', subtree_size: 13},
+// CHECK:STDOUT:       {kind: 'IfStatement', text: 'if', subtree_size: 22},
+// CHECK:STDOUT:     {kind: 'FunctionDefinition', text: '}', subtree_size: 52},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 52 - 51
toolchain/parse/testdata/if/fail_else_unbraced.carbon

@@ -29,58 +29,59 @@ fn F() {
   else { h; }
 }
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:     {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'F'},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
-// CHECK:STDOUT:       {kind: 'IfConditionStart', text: '('},
-// CHECK:STDOUT:       {kind: 'NameExpression', text: 'a'},
-// CHECK:STDOUT:     {kind: 'IfCondition', text: ')', subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'CodeBlockStart', text: 'if', has_error: yes},
+// CHECK:STDOUT: - filename: fail_else_unbraced.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'F'},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:           {kind: 'IfConditionStart', text: '('},
-// CHECK:STDOUT:           {kind: 'NameExpression', text: 'b'},
+// CHECK:STDOUT:           {kind: 'NameExpression', text: 'a'},
 // CHECK:STDOUT:         {kind: 'IfCondition', text: ')', subtree_size: 3},
-// CHECK:STDOUT:           {kind: 'CodeBlockStart', text: 'c', has_error: yes},
-// CHECK:STDOUT:             {kind: 'NameExpression', text: 'c'},
-// CHECK:STDOUT:           {kind: 'ExpressionStatement', text: ';', subtree_size: 2},
-// CHECK:STDOUT:         {kind: 'CodeBlock', text: 'c', has_error: yes, subtree_size: 4},
+// CHECK:STDOUT:           {kind: 'CodeBlockStart', text: 'if', has_error: yes},
+// CHECK:STDOUT:               {kind: 'IfConditionStart', text: '('},
+// CHECK:STDOUT:               {kind: 'NameExpression', text: 'b'},
+// CHECK:STDOUT:             {kind: 'IfCondition', text: ')', subtree_size: 3},
+// CHECK:STDOUT:               {kind: 'CodeBlockStart', text: 'c', has_error: yes},
+// CHECK:STDOUT:                 {kind: 'NameExpression', text: 'c'},
+// CHECK:STDOUT:               {kind: 'ExpressionStatement', text: ';', subtree_size: 2},
+// CHECK:STDOUT:             {kind: 'CodeBlock', text: 'c', has_error: yes, subtree_size: 4},
+// CHECK:STDOUT:             {kind: 'IfStatementElse', text: 'else'},
+// CHECK:STDOUT:               {kind: 'CodeBlockStart', text: 'd', has_error: yes},
+// CHECK:STDOUT:                 {kind: 'NameExpression', text: 'd'},
+// CHECK:STDOUT:               {kind: 'ExpressionStatement', text: ';', subtree_size: 2},
+// CHECK:STDOUT:             {kind: 'CodeBlock', text: 'd', has_error: yes, subtree_size: 4},
+// CHECK:STDOUT:           {kind: 'IfStatement', text: 'if', subtree_size: 13},
+// CHECK:STDOUT:         {kind: 'CodeBlock', text: 'if', has_error: yes, subtree_size: 15},
 // CHECK:STDOUT:         {kind: 'IfStatementElse', text: 'else'},
-// CHECK:STDOUT:           {kind: 'CodeBlockStart', text: 'd', has_error: yes},
-// CHECK:STDOUT:             {kind: 'NameExpression', text: 'd'},
+// CHECK:STDOUT:           {kind: 'CodeBlockStart', text: 'e', has_error: yes},
+// CHECK:STDOUT:             {kind: 'NameExpression', text: 'e'},
 // CHECK:STDOUT:           {kind: 'ExpressionStatement', text: ';', subtree_size: 2},
-// CHECK:STDOUT:         {kind: 'CodeBlock', text: 'd', has_error: yes, subtree_size: 4},
-// CHECK:STDOUT:       {kind: 'IfStatement', text: 'if', subtree_size: 13},
-// CHECK:STDOUT:     {kind: 'CodeBlock', text: 'if', has_error: yes, subtree_size: 15},
-// CHECK:STDOUT:     {kind: 'IfStatementElse', text: 'else'},
-// CHECK:STDOUT:       {kind: 'CodeBlockStart', text: 'e', has_error: yes},
-// CHECK:STDOUT:         {kind: 'NameExpression', text: 'e'},
-// CHECK:STDOUT:       {kind: 'ExpressionStatement', text: ';', subtree_size: 2},
-// CHECK:STDOUT:     {kind: 'CodeBlock', text: 'e', has_error: yes, subtree_size: 4},
-// CHECK:STDOUT:   {kind: 'IfStatement', text: 'if', subtree_size: 24},
-// CHECK:STDOUT:       {kind: 'IfConditionStart', text: '('},
-// CHECK:STDOUT:       {kind: 'NameExpression', text: 'x'},
-// CHECK:STDOUT:     {kind: 'IfCondition', text: ')', subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'CodeBlockStart', text: '{'},
-// CHECK:STDOUT:         {kind: 'NameExpression', text: 'f'},
-// CHECK:STDOUT:       {kind: 'ExpressionStatement', text: ';', subtree_size: 2},
-// CHECK:STDOUT:     {kind: 'CodeBlock', text: '}', subtree_size: 4},
-// CHECK:STDOUT:     {kind: 'IfStatementElse', text: 'else'},
-// CHECK:STDOUT:         {kind: 'IfConditionStart', text: '('},
-// CHECK:STDOUT:         {kind: 'NameExpression', text: 'x'},
-// CHECK:STDOUT:       {kind: 'IfCondition', text: ')', subtree_size: 3},
-// CHECK:STDOUT:         {kind: 'CodeBlockStart', text: '{'},
-// CHECK:STDOUT:           {kind: 'NameExpression', text: 'g'},
-// CHECK:STDOUT:         {kind: 'ExpressionStatement', text: ';', subtree_size: 2},
-// CHECK:STDOUT:       {kind: 'CodeBlock', text: '}', subtree_size: 4},
-// CHECK:STDOUT:       {kind: 'IfStatementElse', text: 'else'},
-// CHECK:STDOUT:         {kind: 'CodeBlockStart', text: '{'},
-// CHECK:STDOUT:           {kind: 'NameExpression', text: 'h'},
-// CHECK:STDOUT:         {kind: 'ExpressionStatement', text: ';', subtree_size: 2},
-// CHECK:STDOUT:       {kind: 'CodeBlock', text: '}', subtree_size: 4},
-// CHECK:STDOUT:     {kind: 'IfStatement', text: 'if', subtree_size: 13},
-// CHECK:STDOUT:   {kind: 'IfStatement', text: 'if', subtree_size: 22},
-// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 52},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT:         {kind: 'CodeBlock', text: 'e', has_error: yes, subtree_size: 4},
+// CHECK:STDOUT:       {kind: 'IfStatement', text: 'if', subtree_size: 24},
+// CHECK:STDOUT:           {kind: 'IfConditionStart', text: '('},
+// CHECK:STDOUT:           {kind: 'NameExpression', text: 'x'},
+// CHECK:STDOUT:         {kind: 'IfCondition', text: ')', subtree_size: 3},
+// CHECK:STDOUT:           {kind: 'CodeBlockStart', text: '{'},
+// CHECK:STDOUT:             {kind: 'NameExpression', text: 'f'},
+// CHECK:STDOUT:           {kind: 'ExpressionStatement', text: ';', subtree_size: 2},
+// CHECK:STDOUT:         {kind: 'CodeBlock', text: '}', subtree_size: 4},
+// CHECK:STDOUT:         {kind: 'IfStatementElse', text: 'else'},
+// CHECK:STDOUT:             {kind: 'IfConditionStart', text: '('},
+// CHECK:STDOUT:             {kind: 'NameExpression', text: 'x'},
+// CHECK:STDOUT:           {kind: 'IfCondition', text: ')', subtree_size: 3},
+// CHECK:STDOUT:             {kind: 'CodeBlockStart', text: '{'},
+// CHECK:STDOUT:               {kind: 'NameExpression', text: 'g'},
+// CHECK:STDOUT:             {kind: 'ExpressionStatement', text: ';', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'CodeBlock', text: '}', subtree_size: 4},
+// CHECK:STDOUT:           {kind: 'IfStatementElse', text: 'else'},
+// CHECK:STDOUT:             {kind: 'CodeBlockStart', text: '{'},
+// CHECK:STDOUT:               {kind: 'NameExpression', text: 'h'},
+// CHECK:STDOUT:             {kind: 'ExpressionStatement', text: ';', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'CodeBlock', text: '}', subtree_size: 4},
+// CHECK:STDOUT:         {kind: 'IfStatement', text: 'if', subtree_size: 13},
+// CHECK:STDOUT:       {kind: 'IfStatement', text: 'if', subtree_size: 22},
+// CHECK:STDOUT:     {kind: 'FunctionDefinition', text: '}', subtree_size: 52},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 35 - 34
toolchain/parse/testdata/if/fail_errors.carbon

@@ -26,37 +26,38 @@ fn F() {
 // CHECK:STDERR: ^
 }
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:     {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'F'},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
-// CHECK:STDOUT:       {kind: 'IfConditionStart', text: 'if', has_error: yes},
-// CHECK:STDOUT:       {kind: 'NameExpression', text: 'a'},
-// CHECK:STDOUT:     {kind: 'IfCondition', text: 'if', has_error: yes, subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'CodeBlockStart', text: '{'},
-// CHECK:STDOUT:     {kind: 'CodeBlock', text: '}', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'IfStatement', text: 'if', subtree_size: 6},
-// CHECK:STDOUT:       {kind: 'IfConditionStart', text: '('},
-// CHECK:STDOUT:       {kind: 'InvalidParse', text: ')', has_error: yes},
-// CHECK:STDOUT:     {kind: 'IfCondition', text: ')', has_error: yes, subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'CodeBlockStart', text: '{'},
-// CHECK:STDOUT:     {kind: 'CodeBlock', text: '}', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'IfStatement', text: 'if', subtree_size: 6},
-// CHECK:STDOUT:       {kind: 'IfConditionStart', text: '('},
-// CHECK:STDOUT:       {kind: 'NameExpression', text: 'b'},
-// CHECK:STDOUT:     {kind: 'IfCondition', text: ')', has_error: yes, subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'CodeBlockStart', text: '{'},
-// CHECK:STDOUT:     {kind: 'CodeBlock', text: '}', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'IfStatement', text: 'if', subtree_size: 6},
-// CHECK:STDOUT:       {kind: 'IfConditionStart', text: '('},
-// CHECK:STDOUT:       {kind: 'NameExpression', text: 'd'},
-// CHECK:STDOUT:     {kind: 'IfCondition', text: ')', subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'CodeBlockStart', text: '}', has_error: yes},
-// CHECK:STDOUT:       {kind: 'InvalidParse', text: '}', has_error: yes},
-// CHECK:STDOUT:     {kind: 'CodeBlock', text: '}', has_error: yes, subtree_size: 3},
-// CHECK:STDOUT:   {kind: 'IfStatement', text: 'if', subtree_size: 7},
-// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 31},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: fail_errors.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'F'},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
+// CHECK:STDOUT:           {kind: 'IfConditionStart', text: 'if', has_error: yes},
+// CHECK:STDOUT:           {kind: 'NameExpression', text: 'a'},
+// CHECK:STDOUT:         {kind: 'IfCondition', text: 'if', has_error: yes, subtree_size: 3},
+// CHECK:STDOUT:           {kind: 'CodeBlockStart', text: '{'},
+// CHECK:STDOUT:         {kind: 'CodeBlock', text: '}', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'IfStatement', text: 'if', subtree_size: 6},
+// CHECK:STDOUT:           {kind: 'IfConditionStart', text: '('},
+// CHECK:STDOUT:           {kind: 'InvalidParse', text: ')', has_error: yes},
+// CHECK:STDOUT:         {kind: 'IfCondition', text: ')', has_error: yes, subtree_size: 3},
+// CHECK:STDOUT:           {kind: 'CodeBlockStart', text: '{'},
+// CHECK:STDOUT:         {kind: 'CodeBlock', text: '}', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'IfStatement', text: 'if', subtree_size: 6},
+// CHECK:STDOUT:           {kind: 'IfConditionStart', text: '('},
+// CHECK:STDOUT:           {kind: 'NameExpression', text: 'b'},
+// CHECK:STDOUT:         {kind: 'IfCondition', text: ')', has_error: yes, subtree_size: 3},
+// CHECK:STDOUT:           {kind: 'CodeBlockStart', text: '{'},
+// CHECK:STDOUT:         {kind: 'CodeBlock', text: '}', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'IfStatement', text: 'if', subtree_size: 6},
+// CHECK:STDOUT:           {kind: 'IfConditionStart', text: '('},
+// CHECK:STDOUT:           {kind: 'NameExpression', text: 'd'},
+// CHECK:STDOUT:         {kind: 'IfCondition', text: ')', subtree_size: 3},
+// CHECK:STDOUT:           {kind: 'CodeBlockStart', text: '}', has_error: yes},
+// CHECK:STDOUT:           {kind: 'InvalidParse', text: '}', has_error: yes},
+// CHECK:STDOUT:         {kind: 'CodeBlock', text: '}', has_error: yes, subtree_size: 3},
+// CHECK:STDOUT:       {kind: 'IfStatement', text: 'if', subtree_size: 7},
+// CHECK:STDOUT:     {kind: 'FunctionDefinition', text: '}', subtree_size: 31},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 16 - 15
toolchain/parse/testdata/if/fail_missing_cond.carbon

@@ -12,18 +12,19 @@ fn F() {
   }
 }
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:     {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'F'},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
-// CHECK:STDOUT:       {kind: 'IfConditionStart', text: 'if', has_error: yes},
-// CHECK:STDOUT:       {kind: 'InvalidParse', text: '{', has_error: yes},
-// CHECK:STDOUT:     {kind: 'IfCondition', text: 'if', has_error: yes, subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'CodeBlockStart', text: '{'},
-// CHECK:STDOUT:     {kind: 'CodeBlock', text: '}', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'IfStatement', text: 'if', subtree_size: 6},
-// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 12},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: fail_missing_cond.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'F'},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
+// CHECK:STDOUT:           {kind: 'IfConditionStart', text: 'if', has_error: yes},
+// CHECK:STDOUT:           {kind: 'InvalidParse', text: '{', has_error: yes},
+// CHECK:STDOUT:         {kind: 'IfCondition', text: 'if', has_error: yes, subtree_size: 3},
+// CHECK:STDOUT:           {kind: 'CodeBlockStart', text: '{'},
+// CHECK:STDOUT:         {kind: 'CodeBlock', text: '}', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'IfStatement', text: 'if', subtree_size: 6},
+// CHECK:STDOUT:     {kind: 'FunctionDefinition', text: '}', subtree_size: 12},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 19 - 18
toolchain/parse/testdata/if/fail_square_brackets.carbon

@@ -17,21 +17,22 @@ fn F() {
   if [] {}
 }
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:     {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'F'},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
-// CHECK:STDOUT:       {kind: 'IfConditionStart', text: 'if', has_error: yes},
-// CHECK:STDOUT:           {kind: 'ArrayExpressionStart', text: '['},
-// CHECK:STDOUT:           {kind: 'InvalidParse', text: ']', has_error: yes},
-// CHECK:STDOUT:         {kind: 'ArrayExpressionSemi', text: ']', has_error: yes, subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'ArrayExpression', text: ']', has_error: yes, subtree_size: 4},
-// CHECK:STDOUT:     {kind: 'IfCondition', text: 'if', has_error: yes, subtree_size: 6},
-// CHECK:STDOUT:       {kind: 'CodeBlockStart', text: '{'},
-// CHECK:STDOUT:     {kind: 'CodeBlock', text: '}', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'IfStatement', text: 'if', subtree_size: 9},
-// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 15},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: fail_square_brackets.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'F'},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
+// CHECK:STDOUT:           {kind: 'IfConditionStart', text: 'if', has_error: yes},
+// CHECK:STDOUT:               {kind: 'ArrayExpressionStart', text: '['},
+// CHECK:STDOUT:               {kind: 'InvalidParse', text: ']', has_error: yes},
+// CHECK:STDOUT:             {kind: 'ArrayExpressionSemi', text: ']', has_error: yes, subtree_size: 3},
+// CHECK:STDOUT:           {kind: 'ArrayExpression', text: ']', has_error: yes, subtree_size: 4},
+// CHECK:STDOUT:         {kind: 'IfCondition', text: 'if', has_error: yes, subtree_size: 6},
+// CHECK:STDOUT:           {kind: 'CodeBlockStart', text: '{'},
+// CHECK:STDOUT:         {kind: 'CodeBlock', text: '}', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'IfStatement', text: 'if', subtree_size: 9},
+// CHECK:STDOUT:     {kind: 'FunctionDefinition', text: '}', subtree_size: 15},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 25 - 24
toolchain/parse/testdata/if/fail_unbraced.carbon

@@ -21,32 +21,33 @@ fn F() {
         d;
 }
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:     {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'F'},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
-// CHECK:STDOUT:       {kind: 'IfConditionStart', text: '('},
-// CHECK:STDOUT:       {kind: 'NameExpression', text: 'a'},
-// CHECK:STDOUT:     {kind: 'IfCondition', text: ')', subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'CodeBlockStart', text: 'if', has_error: yes},
+// CHECK:STDOUT: - filename: fail_unbraced.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'F'},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:           {kind: 'IfConditionStart', text: '('},
-// CHECK:STDOUT:           {kind: 'NameExpression', text: 'b'},
+// CHECK:STDOUT:           {kind: 'NameExpression', text: 'a'},
 // CHECK:STDOUT:         {kind: 'IfCondition', text: ')', subtree_size: 3},
 // CHECK:STDOUT:           {kind: 'CodeBlockStart', text: 'if', has_error: yes},
 // CHECK:STDOUT:               {kind: 'IfConditionStart', text: '('},
-// CHECK:STDOUT:               {kind: 'NameExpression', text: 'c'},
+// CHECK:STDOUT:               {kind: 'NameExpression', text: 'b'},
 // CHECK:STDOUT:             {kind: 'IfCondition', text: ')', subtree_size: 3},
-// CHECK:STDOUT:               {kind: 'CodeBlockStart', text: 'd', has_error: yes},
-// CHECK:STDOUT:                 {kind: 'NameExpression', text: 'd'},
-// CHECK:STDOUT:               {kind: 'ExpressionStatement', text: ';', subtree_size: 2},
-// CHECK:STDOUT:             {kind: 'CodeBlock', text: 'd', has_error: yes, subtree_size: 4},
-// CHECK:STDOUT:           {kind: 'IfStatement', text: 'if', subtree_size: 8},
-// CHECK:STDOUT:         {kind: 'CodeBlock', text: 'if', has_error: yes, subtree_size: 10},
-// CHECK:STDOUT:       {kind: 'IfStatement', text: 'if', subtree_size: 14},
-// CHECK:STDOUT:     {kind: 'CodeBlock', text: 'if', has_error: yes, subtree_size: 16},
-// CHECK:STDOUT:   {kind: 'IfStatement', text: 'if', subtree_size: 20},
-// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 26},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT:               {kind: 'CodeBlockStart', text: 'if', has_error: yes},
+// CHECK:STDOUT:                   {kind: 'IfConditionStart', text: '('},
+// CHECK:STDOUT:                   {kind: 'NameExpression', text: 'c'},
+// CHECK:STDOUT:                 {kind: 'IfCondition', text: ')', subtree_size: 3},
+// CHECK:STDOUT:                   {kind: 'CodeBlockStart', text: 'd', has_error: yes},
+// CHECK:STDOUT:                     {kind: 'NameExpression', text: 'd'},
+// CHECK:STDOUT:                   {kind: 'ExpressionStatement', text: ';', subtree_size: 2},
+// CHECK:STDOUT:                 {kind: 'CodeBlock', text: 'd', has_error: yes, subtree_size: 4},
+// CHECK:STDOUT:               {kind: 'IfStatement', text: 'if', subtree_size: 8},
+// CHECK:STDOUT:             {kind: 'CodeBlock', text: 'if', has_error: yes, subtree_size: 10},
+// CHECK:STDOUT:           {kind: 'IfStatement', text: 'if', subtree_size: 14},
+// CHECK:STDOUT:         {kind: 'CodeBlock', text: 'if', has_error: yes, subtree_size: 16},
+// CHECK:STDOUT:       {kind: 'IfStatement', text: 'if', subtree_size: 20},
+// CHECK:STDOUT:     {kind: 'FunctionDefinition', text: '}', subtree_size: 26},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 31 - 30
toolchain/parse/testdata/if_expression/basic.carbon

@@ -8,33 +8,34 @@ fn F(b: bool, x: i32, y: i32) -> bool {
   return if b then x else y;
 }
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:     {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'F'},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'bool'},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'ParameterListComma', text: ','},
-// CHECK:STDOUT:         {kind: 'Name', text: 'x'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'ParameterListComma', text: ','},
-// CHECK:STDOUT:         {kind: 'Name', text: 'y'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 13},
-// CHECK:STDOUT:       {kind: 'Literal', text: 'bool'},
-// CHECK:STDOUT:     {kind: 'ReturnType', text: '->', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 18},
-// CHECK:STDOUT:     {kind: 'ReturnStatementStart', text: 'return'},
-// CHECK:STDOUT:         {kind: 'NameExpression', text: 'b'},
-// CHECK:STDOUT:       {kind: 'IfExpressionIf', text: 'if', subtree_size: 2},
-// CHECK:STDOUT:         {kind: 'NameExpression', text: 'x'},
-// CHECK:STDOUT:       {kind: 'IfExpressionThen', text: 'then', subtree_size: 2},
-// CHECK:STDOUT:       {kind: 'NameExpression', text: 'y'},
-// CHECK:STDOUT:     {kind: 'IfExpressionElse', text: 'else', subtree_size: 6},
-// CHECK:STDOUT:   {kind: 'ReturnStatement', text: ';', subtree_size: 8},
-// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 27},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: basic.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'F'},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:             {kind: 'Name', text: 'b'},
+// CHECK:STDOUT:             {kind: 'Literal', text: 'bool'},
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:           {kind: 'ParameterListComma', text: ','},
+// CHECK:STDOUT:             {kind: 'Name', text: 'x'},
+// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:           {kind: 'ParameterListComma', text: ','},
+// CHECK:STDOUT:             {kind: 'Name', text: 'y'},
+// CHECK:STDOUT:             {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 13},
+// CHECK:STDOUT:           {kind: 'Literal', text: 'bool'},
+// CHECK:STDOUT:         {kind: 'ReturnType', text: '->', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 18},
+// CHECK:STDOUT:         {kind: 'ReturnStatementStart', text: 'return'},
+// CHECK:STDOUT:             {kind: 'NameExpression', text: 'b'},
+// CHECK:STDOUT:           {kind: 'IfExpressionIf', text: 'if', subtree_size: 2},
+// CHECK:STDOUT:             {kind: 'NameExpression', text: 'x'},
+// CHECK:STDOUT:           {kind: 'IfExpressionThen', text: 'then', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'NameExpression', text: 'y'},
+// CHECK:STDOUT:         {kind: 'IfExpressionElse', text: 'else', subtree_size: 6},
+// CHECK:STDOUT:       {kind: 'ReturnStatement', text: ';', subtree_size: 8},
+// CHECK:STDOUT:     {kind: 'FunctionDefinition', text: '}', subtree_size: 27},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 21 - 20
toolchain/parse/testdata/if_expression/fail_condition_missing.carbon

@@ -11,23 +11,24 @@ fn F() {
   var n: i32 = if;
 }
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:     {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'F'},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
-// CHECK:STDOUT:     {kind: 'VariableIntroducer', text: 'var'},
-// CHECK:STDOUT:       {kind: 'Name', text: 'n'},
-// CHECK:STDOUT:       {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:     {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'VariableInitializer', text: '='},
-// CHECK:STDOUT:         {kind: 'InvalidParse', text: ';', has_error: yes},
-// CHECK:STDOUT:       {kind: 'IfExpressionIf', text: 'if', has_error: yes, subtree_size: 2},
-// CHECK:STDOUT:       {kind: 'InvalidParse', text: ';', has_error: yes},
-// CHECK:STDOUT:       {kind: 'InvalidParse', text: ';', has_error: yes},
-// CHECK:STDOUT:     {kind: 'IfExpressionElse', text: 'if', has_error: yes, subtree_size: 5},
-// CHECK:STDOUT:   {kind: 'VariableDeclaration', text: ';', subtree_size: 11},
-// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 17},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: fail_condition_missing.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'F'},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
+// CHECK:STDOUT:         {kind: 'VariableIntroducer', text: 'var'},
+// CHECK:STDOUT:           {kind: 'Name', text: 'n'},
+// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'VariableInitializer', text: '='},
+// CHECK:STDOUT:             {kind: 'InvalidParse', text: ';', has_error: yes},
+// CHECK:STDOUT:           {kind: 'IfExpressionIf', text: 'if', has_error: yes, subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'InvalidParse', text: ';', has_error: yes},
+// CHECK:STDOUT:           {kind: 'InvalidParse', text: ';', has_error: yes},
+// CHECK:STDOUT:         {kind: 'IfExpressionElse', text: 'if', has_error: yes, subtree_size: 5},
+// CHECK:STDOUT:       {kind: 'VariableDeclaration', text: ';', subtree_size: 11},
+// CHECK:STDOUT:     {kind: 'FunctionDefinition', text: '}', subtree_size: 17},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 22 - 21
toolchain/parse/testdata/if_expression/fail_else_expr_missing.carbon

@@ -11,24 +11,25 @@ fn F() {
   var n: i32 = if true then 1 else;
 }
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:     {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'F'},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
-// CHECK:STDOUT:     {kind: 'VariableIntroducer', text: 'var'},
-// CHECK:STDOUT:       {kind: 'Name', text: 'n'},
-// CHECK:STDOUT:       {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:     {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'VariableInitializer', text: '='},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'true'},
-// CHECK:STDOUT:       {kind: 'IfExpressionIf', text: 'if', subtree_size: 2},
-// CHECK:STDOUT:         {kind: 'Literal', text: '1'},
-// CHECK:STDOUT:       {kind: 'IfExpressionThen', text: 'then', subtree_size: 2},
-// CHECK:STDOUT:       {kind: 'InvalidParse', text: ';', has_error: yes},
-// CHECK:STDOUT:     {kind: 'IfExpressionElse', text: 'else', has_error: yes, subtree_size: 6},
-// CHECK:STDOUT:   {kind: 'VariableDeclaration', text: ';', subtree_size: 12},
-// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 18},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: fail_else_expr_missing.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'F'},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
+// CHECK:STDOUT:         {kind: 'VariableIntroducer', text: 'var'},
+// CHECK:STDOUT:           {kind: 'Name', text: 'n'},
+// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'VariableInitializer', text: '='},
+// CHECK:STDOUT:             {kind: 'Literal', text: 'true'},
+// CHECK:STDOUT:           {kind: 'IfExpressionIf', text: 'if', subtree_size: 2},
+// CHECK:STDOUT:             {kind: 'Literal', text: '1'},
+// CHECK:STDOUT:           {kind: 'IfExpressionThen', text: 'then', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'InvalidParse', text: ';', has_error: yes},
+// CHECK:STDOUT:         {kind: 'IfExpressionElse', text: 'else', has_error: yes, subtree_size: 6},
+// CHECK:STDOUT:       {kind: 'VariableDeclaration', text: ';', subtree_size: 12},
+// CHECK:STDOUT:     {kind: 'FunctionDefinition', text: '}', subtree_size: 18},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 22 - 21
toolchain/parse/testdata/if_expression/fail_else_missing.carbon

@@ -11,24 +11,25 @@ fn F() {
   var n: i32 = if true then 1;
 }
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:     {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'F'},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
-// CHECK:STDOUT:     {kind: 'VariableIntroducer', text: 'var'},
-// CHECK:STDOUT:       {kind: 'Name', text: 'n'},
-// CHECK:STDOUT:       {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:     {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'VariableInitializer', text: '='},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'true'},
-// CHECK:STDOUT:       {kind: 'IfExpressionIf', text: 'if', subtree_size: 2},
-// CHECK:STDOUT:         {kind: 'Literal', text: '1'},
-// CHECK:STDOUT:       {kind: 'IfExpressionThen', text: 'then', subtree_size: 2},
-// CHECK:STDOUT:       {kind: 'InvalidParse', text: ';', has_error: yes},
-// CHECK:STDOUT:     {kind: 'IfExpressionElse', text: 'if', has_error: yes, subtree_size: 6},
-// CHECK:STDOUT:   {kind: 'VariableDeclaration', text: ';', subtree_size: 12},
-// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 18},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: fail_else_missing.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'F'},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
+// CHECK:STDOUT:         {kind: 'VariableIntroducer', text: 'var'},
+// CHECK:STDOUT:           {kind: 'Name', text: 'n'},
+// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'VariableInitializer', text: '='},
+// CHECK:STDOUT:             {kind: 'Literal', text: 'true'},
+// CHECK:STDOUT:           {kind: 'IfExpressionIf', text: 'if', subtree_size: 2},
+// CHECK:STDOUT:             {kind: 'Literal', text: '1'},
+// CHECK:STDOUT:           {kind: 'IfExpressionThen', text: 'then', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'InvalidParse', text: ';', has_error: yes},
+// CHECK:STDOUT:         {kind: 'IfExpressionElse', text: 'if', has_error: yes, subtree_size: 6},
+// CHECK:STDOUT:       {kind: 'VariableDeclaration', text: ';', subtree_size: 12},
+// CHECK:STDOUT:     {kind: 'FunctionDefinition', text: '}', subtree_size: 18},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 22 - 21
toolchain/parse/testdata/if_expression/fail_then_expr_missing.carbon

@@ -11,24 +11,25 @@ fn F() {
   var n: i32 = if true then;
 }
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:     {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'F'},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
-// CHECK:STDOUT:     {kind: 'VariableIntroducer', text: 'var'},
-// CHECK:STDOUT:       {kind: 'Name', text: 'n'},
-// CHECK:STDOUT:       {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:     {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'VariableInitializer', text: '='},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'true'},
-// CHECK:STDOUT:       {kind: 'IfExpressionIf', text: 'if', subtree_size: 2},
-// CHECK:STDOUT:         {kind: 'InvalidParse', text: ';', has_error: yes},
-// CHECK:STDOUT:       {kind: 'IfExpressionThen', text: 'then', has_error: yes, subtree_size: 2},
-// CHECK:STDOUT:       {kind: 'InvalidParse', text: ';', has_error: yes},
-// CHECK:STDOUT:     {kind: 'IfExpressionElse', text: 'if', has_error: yes, subtree_size: 6},
-// CHECK:STDOUT:   {kind: 'VariableDeclaration', text: ';', subtree_size: 12},
-// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 18},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: fail_then_expr_missing.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'F'},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
+// CHECK:STDOUT:         {kind: 'VariableIntroducer', text: 'var'},
+// CHECK:STDOUT:           {kind: 'Name', text: 'n'},
+// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'VariableInitializer', text: '='},
+// CHECK:STDOUT:             {kind: 'Literal', text: 'true'},
+// CHECK:STDOUT:           {kind: 'IfExpressionIf', text: 'if', subtree_size: 2},
+// CHECK:STDOUT:             {kind: 'InvalidParse', text: ';', has_error: yes},
+// CHECK:STDOUT:           {kind: 'IfExpressionThen', text: 'then', has_error: yes, subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'InvalidParse', text: ';', has_error: yes},
+// CHECK:STDOUT:         {kind: 'IfExpressionElse', text: 'if', has_error: yes, subtree_size: 6},
+// CHECK:STDOUT:       {kind: 'VariableDeclaration', text: ';', subtree_size: 12},
+// CHECK:STDOUT:     {kind: 'FunctionDefinition', text: '}', subtree_size: 18},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 21 - 20
toolchain/parse/testdata/if_expression/fail_then_missing.carbon

@@ -11,23 +11,24 @@ fn F() {
   var n: i32 = if true;
 }
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:     {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'F'},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
-// CHECK:STDOUT:     {kind: 'VariableIntroducer', text: 'var'},
-// CHECK:STDOUT:       {kind: 'Name', text: 'n'},
-// CHECK:STDOUT:       {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:     {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'VariableInitializer', text: '='},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'true'},
-// CHECK:STDOUT:       {kind: 'IfExpressionIf', text: 'if', subtree_size: 2},
-// CHECK:STDOUT:       {kind: 'InvalidParse', text: ';', has_error: yes},
-// CHECK:STDOUT:       {kind: 'InvalidParse', text: ';', has_error: yes},
-// CHECK:STDOUT:     {kind: 'IfExpressionElse', text: 'if', has_error: yes, subtree_size: 5},
-// CHECK:STDOUT:   {kind: 'VariableDeclaration', text: ';', subtree_size: 11},
-// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 17},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: fail_then_missing.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'F'},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
+// CHECK:STDOUT:         {kind: 'VariableIntroducer', text: 'var'},
+// CHECK:STDOUT:           {kind: 'Name', text: 'n'},
+// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:         {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'VariableInitializer', text: '='},
+// CHECK:STDOUT:             {kind: 'Literal', text: 'true'},
+// CHECK:STDOUT:           {kind: 'IfExpressionIf', text: 'if', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'InvalidParse', text: ';', has_error: yes},
+// CHECK:STDOUT:           {kind: 'InvalidParse', text: ';', has_error: yes},
+// CHECK:STDOUT:         {kind: 'IfExpressionElse', text: 'if', has_error: yes, subtree_size: 5},
+// CHECK:STDOUT:       {kind: 'VariableDeclaration', text: ';', subtree_size: 11},
+// CHECK:STDOUT:     {kind: 'FunctionDefinition', text: '}', subtree_size: 17},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 18 - 17
toolchain/parse/testdata/if_expression/fail_top_level_if.carbon

@@ -17,20 +17,21 @@ fn F() {
   if true then 1 else 2;
 }
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:     {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'F'},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
-// CHECK:STDOUT:       {kind: 'IfConditionStart', text: 'if', has_error: yes},
-// CHECK:STDOUT:       {kind: 'Literal', text: 'true'},
-// CHECK:STDOUT:     {kind: 'IfCondition', text: 'if', has_error: yes, subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'CodeBlockStart', text: 'then', has_error: yes},
-// CHECK:STDOUT:         {kind: 'InvalidParse', text: 'then', has_error: yes},
-// CHECK:STDOUT:       {kind: 'ExpressionStatement', text: ';', has_error: yes, subtree_size: 2},
-// CHECK:STDOUT:     {kind: 'CodeBlock', text: 'then', has_error: yes, subtree_size: 4},
-// CHECK:STDOUT:   {kind: 'IfStatement', text: 'if', subtree_size: 8},
-// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 14},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: fail_top_level_if.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'F'},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
+// CHECK:STDOUT:           {kind: 'IfConditionStart', text: 'if', has_error: yes},
+// CHECK:STDOUT:           {kind: 'Literal', text: 'true'},
+// CHECK:STDOUT:         {kind: 'IfCondition', text: 'if', has_error: yes, subtree_size: 3},
+// CHECK:STDOUT:           {kind: 'CodeBlockStart', text: 'then', has_error: yes},
+// CHECK:STDOUT:             {kind: 'InvalidParse', text: 'then', has_error: yes},
+// CHECK:STDOUT:           {kind: 'ExpressionStatement', text: ';', has_error: yes, subtree_size: 2},
+// CHECK:STDOUT:         {kind: 'CodeBlock', text: 'then', has_error: yes, subtree_size: 4},
+// CHECK:STDOUT:       {kind: 'IfStatement', text: 'if', subtree_size: 8},
+// CHECK:STDOUT:     {kind: 'FunctionDefinition', text: '}', subtree_size: 14},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 32 - 31
toolchain/parse/testdata/if_expression/in_type.carbon

@@ -10,34 +10,35 @@ fn F() -> if true then i32 else i32* {
   return if true then n else &n;
 }
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'VariableIntroducer', text: 'var'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'n'},
-// CHECK:STDOUT:     {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:   {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT: {kind: 'VariableDeclaration', text: ';', subtree_size: 5},
-// CHECK:STDOUT:     {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'F'},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'true'},
-// CHECK:STDOUT:         {kind: 'IfExpressionIf', text: 'if', subtree_size: 2},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:         {kind: 'IfExpressionThen', text: 'then', subtree_size: 2},
-// CHECK:STDOUT:           {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:         {kind: 'PostfixOperator', text: '*', subtree_size: 2},
-// CHECK:STDOUT:       {kind: 'IfExpressionElse', text: 'else', subtree_size: 7},
-// CHECK:STDOUT:     {kind: 'ReturnType', text: '->', subtree_size: 8},
-// CHECK:STDOUT:   {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 13},
-// CHECK:STDOUT:     {kind: 'ReturnStatementStart', text: 'return'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'true'},
-// CHECK:STDOUT:       {kind: 'IfExpressionIf', text: 'if', subtree_size: 2},
-// CHECK:STDOUT:         {kind: 'NameExpression', text: 'n'},
-// CHECK:STDOUT:       {kind: 'IfExpressionThen', text: 'then', subtree_size: 2},
-// CHECK:STDOUT:         {kind: 'NameExpression', text: 'n'},
-// CHECK:STDOUT:       {kind: 'PrefixOperator', text: '&', subtree_size: 2},
-// CHECK:STDOUT:     {kind: 'IfExpressionElse', text: 'else', subtree_size: 7},
-// CHECK:STDOUT:   {kind: 'ReturnStatement', text: ';', subtree_size: 9},
-// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 23},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: in_type.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'n'},
+// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:     {kind: 'VariableDeclaration', text: ';', subtree_size: 5},
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'F'},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:               {kind: 'Literal', text: 'true'},
+// CHECK:STDOUT:             {kind: 'IfExpressionIf', text: 'if', subtree_size: 2},
+// CHECK:STDOUT:               {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'IfExpressionThen', text: 'then', subtree_size: 2},
+// CHECK:STDOUT:               {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:             {kind: 'PostfixOperator', text: '*', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'IfExpressionElse', text: 'else', subtree_size: 7},
+// CHECK:STDOUT:         {kind: 'ReturnType', text: '->', subtree_size: 8},
+// CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 13},
+// CHECK:STDOUT:         {kind: 'ReturnStatementStart', text: 'return'},
+// CHECK:STDOUT:             {kind: 'Literal', text: 'true'},
+// CHECK:STDOUT:           {kind: 'IfExpressionIf', text: 'if', subtree_size: 2},
+// CHECK:STDOUT:             {kind: 'NameExpression', text: 'n'},
+// CHECK:STDOUT:           {kind: 'IfExpressionThen', text: 'then', subtree_size: 2},
+// CHECK:STDOUT:             {kind: 'NameExpression', text: 'n'},
+// CHECK:STDOUT:           {kind: 'PrefixOperator', text: '&', subtree_size: 2},
+// CHECK:STDOUT:         {kind: 'IfExpressionElse', text: 'else', subtree_size: 7},
+// CHECK:STDOUT:       {kind: 'ReturnStatement', text: ';', subtree_size: 9},
+// CHECK:STDOUT:     {kind: 'FunctionDefinition', text: '}', subtree_size: 23},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 31 - 30
toolchain/parse/testdata/if_expression/precedence.carbon

@@ -8,34 +8,35 @@ fn F(b: bool) -> bool {
   return if b and b then b and b else b or b;
 }
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:     {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'F'},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'Name', text: 'b'},
-// CHECK:STDOUT:         {kind: 'Literal', text: 'bool'},
-// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 5},
-// CHECK:STDOUT:       {kind: 'Literal', text: 'bool'},
-// CHECK:STDOUT:     {kind: 'ReturnType', text: '->', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 10},
-// CHECK:STDOUT:     {kind: 'ReturnStatementStart', text: 'return'},
+// CHECK:STDOUT: - filename: precedence.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'F'},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:             {kind: 'Name', text: 'b'},
+// CHECK:STDOUT:             {kind: 'Literal', text: 'bool'},
+// CHECK:STDOUT:           {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 5},
+// CHECK:STDOUT:           {kind: 'Literal', text: 'bool'},
+// CHECK:STDOUT:         {kind: 'ReturnType', text: '->', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 10},
+// CHECK:STDOUT:         {kind: 'ReturnStatementStart', text: 'return'},
+// CHECK:STDOUT:                 {kind: 'NameExpression', text: 'b'},
+// CHECK:STDOUT:               {kind: 'ShortCircuitOperand', text: 'and', subtree_size: 2},
+// CHECK:STDOUT:               {kind: 'NameExpression', text: 'b'},
+// CHECK:STDOUT:             {kind: 'InfixOperator', text: 'and', subtree_size: 4},
+// CHECK:STDOUT:           {kind: 'IfExpressionIf', text: 'if', subtree_size: 5},
+// CHECK:STDOUT:                 {kind: 'NameExpression', text: 'b'},
+// CHECK:STDOUT:               {kind: 'ShortCircuitOperand', text: 'and', subtree_size: 2},
+// CHECK:STDOUT:               {kind: 'NameExpression', text: 'b'},
+// CHECK:STDOUT:             {kind: 'InfixOperator', text: 'and', subtree_size: 4},
+// CHECK:STDOUT:           {kind: 'IfExpressionThen', text: 'then', subtree_size: 5},
+// CHECK:STDOUT:               {kind: 'NameExpression', text: 'b'},
+// CHECK:STDOUT:             {kind: 'ShortCircuitOperand', text: 'or', subtree_size: 2},
 // CHECK:STDOUT:             {kind: 'NameExpression', text: 'b'},
-// CHECK:STDOUT:           {kind: 'ShortCircuitOperand', text: 'and', subtree_size: 2},
-// CHECK:STDOUT:           {kind: 'NameExpression', text: 'b'},
-// CHECK:STDOUT:         {kind: 'InfixOperator', text: 'and', subtree_size: 4},
-// CHECK:STDOUT:       {kind: 'IfExpressionIf', text: 'if', subtree_size: 5},
-// CHECK:STDOUT:             {kind: 'NameExpression', text: 'b'},
-// CHECK:STDOUT:           {kind: 'ShortCircuitOperand', text: 'and', subtree_size: 2},
-// CHECK:STDOUT:           {kind: 'NameExpression', text: 'b'},
-// CHECK:STDOUT:         {kind: 'InfixOperator', text: 'and', subtree_size: 4},
-// CHECK:STDOUT:       {kind: 'IfExpressionThen', text: 'then', subtree_size: 5},
-// CHECK:STDOUT:           {kind: 'NameExpression', text: 'b'},
-// CHECK:STDOUT:         {kind: 'ShortCircuitOperand', text: 'or', subtree_size: 2},
-// CHECK:STDOUT:         {kind: 'NameExpression', text: 'b'},
-// CHECK:STDOUT:       {kind: 'InfixOperator', text: 'or', subtree_size: 4},
-// CHECK:STDOUT:     {kind: 'IfExpressionElse', text: 'else', subtree_size: 15},
-// CHECK:STDOUT:   {kind: 'ReturnStatement', text: ';', subtree_size: 17},
-// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 28},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT:           {kind: 'InfixOperator', text: 'or', subtree_size: 4},
+// CHECK:STDOUT:         {kind: 'IfExpressionElse', text: 'else', subtree_size: 15},
+// CHECK:STDOUT:       {kind: 'ReturnStatement', text: ';', subtree_size: 17},
+// CHECK:STDOUT:     {kind: 'FunctionDefinition', text: '}', subtree_size: 28},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 14 - 13
toolchain/parse/testdata/index/assign_to_var.carbon

@@ -6,16 +6,17 @@
 
 var v: i32 = t[0];
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'VariableIntroducer', text: 'var'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'v'},
-// CHECK:STDOUT:     {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:   {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:   {kind: 'VariableInitializer', text: '='},
-// CHECK:STDOUT:       {kind: 'NameExpression', text: 't'},
-// CHECK:STDOUT:     {kind: 'IndexExpressionStart', text: '[', subtree_size: 2},
-// CHECK:STDOUT:     {kind: 'Literal', text: '0'},
-// CHECK:STDOUT:   {kind: 'IndexExpression', text: ']', subtree_size: 4},
-// CHECK:STDOUT: {kind: 'VariableDeclaration', text: ';', subtree_size: 10},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: assign_to_var.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'v'},
+// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},
+// CHECK:STDOUT:           {kind: 'NameExpression', text: 't'},
+// CHECK:STDOUT:         {kind: 'IndexExpressionStart', text: '[', subtree_size: 2},
+// CHECK:STDOUT:         {kind: 'Literal', text: '0'},
+// CHECK:STDOUT:       {kind: 'IndexExpression', text: ']', subtree_size: 4},
+// CHECK:STDOUT:     {kind: 'VariableDeclaration', text: ';', subtree_size: 10},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 14 - 13
toolchain/parse/testdata/index/fail_empty_expr.carbon

@@ -9,16 +9,17 @@
 // CHECK:STDERR:                ^
 var v: i32 = t[];
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'VariableIntroducer', text: 'var'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'v'},
-// CHECK:STDOUT:     {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:   {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:   {kind: 'VariableInitializer', text: '='},
-// CHECK:STDOUT:       {kind: 'NameExpression', text: 't'},
-// CHECK:STDOUT:     {kind: 'IndexExpressionStart', text: '[', subtree_size: 2},
-// CHECK:STDOUT:     {kind: 'InvalidParse', text: ']', has_error: yes},
-// CHECK:STDOUT:   {kind: 'IndexExpression', text: ']', has_error: yes, subtree_size: 4},
-// CHECK:STDOUT: {kind: 'VariableDeclaration', text: ';', subtree_size: 10},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: fail_empty_expr.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'v'},
+// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},
+// CHECK:STDOUT:           {kind: 'NameExpression', text: 't'},
+// CHECK:STDOUT:         {kind: 'IndexExpressionStart', text: '[', subtree_size: 2},
+// CHECK:STDOUT:         {kind: 'InvalidParse', text: ']', has_error: yes},
+// CHECK:STDOUT:       {kind: 'IndexExpression', text: ']', has_error: yes, subtree_size: 4},
+// CHECK:STDOUT:     {kind: 'VariableDeclaration', text: ';', subtree_size: 10},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 14 - 13
toolchain/parse/testdata/index/fail_malformed_expr.carbon

@@ -9,16 +9,17 @@
 // CHECK:STDERR:                 ^
 var v: i32 = t[0,];
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'VariableIntroducer', text: 'var'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'v'},
-// CHECK:STDOUT:     {kind: 'Literal', text: 'i32'},
-// CHECK:STDOUT:   {kind: 'PatternBinding', text: ':', subtree_size: 3},
-// CHECK:STDOUT:   {kind: 'VariableInitializer', text: '='},
-// CHECK:STDOUT:       {kind: 'NameExpression', text: 't'},
-// CHECK:STDOUT:     {kind: 'IndexExpressionStart', text: '[', subtree_size: 2},
-// CHECK:STDOUT:     {kind: 'Literal', text: '0'},
-// CHECK:STDOUT:   {kind: 'IndexExpression', text: ']', has_error: yes, subtree_size: 4},
-// CHECK:STDOUT: {kind: 'VariableDeclaration', text: ';', subtree_size: 10},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: fail_malformed_expr.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'VariableIntroducer', text: 'var'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'v'},
+// CHECK:STDOUT:         {kind: 'Literal', text: 'i32'},
+// CHECK:STDOUT:       {kind: 'PatternBinding', text: ':', subtree_size: 3},
+// CHECK:STDOUT:       {kind: 'VariableInitializer', text: '='},
+// CHECK:STDOUT:           {kind: 'NameExpression', text: 't'},
+// CHECK:STDOUT:         {kind: 'IndexExpressionStart', text: '[', subtree_size: 2},
+// CHECK:STDOUT:         {kind: 'Literal', text: '0'},
+// CHECK:STDOUT:       {kind: 'IndexExpression', text: ']', has_error: yes, subtree_size: 4},
+// CHECK:STDOUT:     {kind: 'VariableDeclaration', text: ';', subtree_size: 10},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 19 - 18
toolchain/parse/testdata/namespace/basic.carbon

@@ -10,21 +10,22 @@ fn Bar() {
   Foo.Baz();
 }
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'NamespaceStart', text: 'namespace'},
-// CHECK:STDOUT:   {kind: 'Name', text: 'Foo'},
-// CHECK:STDOUT: {kind: 'Namespace', text: ';', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'Bar'},
-// CHECK:STDOUT:       {kind: 'ParameterListStart', text: '('},
-// CHECK:STDOUT:     {kind: 'ParameterList', text: ')', subtree_size: 2},
-// CHECK:STDOUT:   {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
-// CHECK:STDOUT:           {kind: 'NameExpression', text: 'Foo'},
-// CHECK:STDOUT:           {kind: 'Name', text: 'Baz'},
-// CHECK:STDOUT:         {kind: 'MemberAccessExpression', text: '.', subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'CallExpressionStart', text: '(', subtree_size: 4},
-// CHECK:STDOUT:     {kind: 'CallExpression', text: ')', subtree_size: 5},
-// CHECK:STDOUT:   {kind: 'ExpressionStatement', text: ';', subtree_size: 6},
-// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 12},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: basic.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'NamespaceStart', text: 'namespace'},
+// CHECK:STDOUT:       {kind: 'Name', text: 'Foo'},
+// CHECK:STDOUT:     {kind: 'Namespace', text: ';', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'Bar'},
+// CHECK:STDOUT:           {kind: 'ParameterListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'ParameterList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
+// CHECK:STDOUT:               {kind: 'NameExpression', text: 'Foo'},
+// CHECK:STDOUT:               {kind: 'Name', text: 'Baz'},
+// CHECK:STDOUT:             {kind: 'MemberAccessExpression', text: '.', subtree_size: 3},
+// CHECK:STDOUT:           {kind: 'CallExpressionStart', text: '(', subtree_size: 4},
+// CHECK:STDOUT:         {kind: 'CallExpression', text: ')', subtree_size: 5},
+// CHECK:STDOUT:       {kind: 'ExpressionStatement', text: ';', subtree_size: 6},
+// CHECK:STDOUT:     {kind: 'FunctionDefinition', text: '}', subtree_size: 12},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 7 - 6
toolchain/parse/testdata/namespace/fail_args.carbon

@@ -9,9 +9,10 @@
 // CHECK:STDERR:              ^
 namespace Foo();
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'NamespaceStart', text: 'namespace'},
-// CHECK:STDOUT:   {kind: 'Name', text: 'Foo'},
-// CHECK:STDOUT: {kind: 'Namespace', text: ';', has_error: yes, subtree_size: 3},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: fail_args.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'NamespaceStart', text: 'namespace'},
+// CHECK:STDOUT:       {kind: 'Name', text: 'Foo'},
+// CHECK:STDOUT:     {kind: 'Namespace', text: ';', has_error: yes, subtree_size: 3},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 15 - 14
toolchain/parse/testdata/namespace/fail_arrow.carbon

@@ -11,17 +11,18 @@ namespace Foo;
 // CHECK:STDERR:       ^
 fn Foo->Bar() {}
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'NamespaceStart', text: 'namespace'},
-// CHECK:STDOUT:   {kind: 'Name', text: 'Foo'},
-// CHECK:STDOUT: {kind: 'Namespace', text: ';', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'FunctionIntroducer', text: 'fn'},
-// CHECK:STDOUT:     {kind: 'Name', text: 'Foo'},
-// CHECK:STDOUT:           {kind: 'NameExpression', text: 'Bar'},
-// CHECK:STDOUT:         {kind: 'CallExpressionStart', text: '(', subtree_size: 2},
-// CHECK:STDOUT:       {kind: 'CallExpression', text: ')', subtree_size: 3},
-// CHECK:STDOUT:     {kind: 'ReturnType', text: '->', subtree_size: 4},
-// CHECK:STDOUT:   {kind: 'FunctionDefinitionStart', text: '{', has_error: yes, subtree_size: 7},
-// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 8},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: fail_arrow.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'NamespaceStart', text: 'namespace'},
+// CHECK:STDOUT:       {kind: 'Name', text: 'Foo'},
+// CHECK:STDOUT:     {kind: 'Namespace', text: ';', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
+// CHECK:STDOUT:         {kind: 'Name', text: 'Foo'},
+// CHECK:STDOUT:               {kind: 'NameExpression', text: 'Bar'},
+// CHECK:STDOUT:             {kind: 'CallExpressionStart', text: '(', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'CallExpression', text: ')', subtree_size: 3},
+// CHECK:STDOUT:         {kind: 'ReturnType', text: '->', subtree_size: 4},
+// CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', has_error: yes, subtree_size: 7},
+// CHECK:STDOUT:     {kind: 'FunctionDefinition', text: '}', subtree_size: 8},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 9 - 8
toolchain/parse/testdata/namespace/fail_incomplete_name.carbon

@@ -9,11 +9,12 @@
 // CHECK:STDERR:               ^
 namespace Foo.;
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'NamespaceStart', text: 'namespace'},
-// CHECK:STDOUT:     {kind: 'NameExpression', text: 'Foo'},
-// CHECK:STDOUT:     {kind: 'Name', text: ';', has_error: yes},
-// CHECK:STDOUT:   {kind: 'QualifiedDeclaration', text: '.', subtree_size: 3},
-// CHECK:STDOUT: {kind: 'Namespace', text: ';', subtree_size: 5},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: fail_incomplete_name.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'NamespaceStart', text: 'namespace'},
+// CHECK:STDOUT:         {kind: 'NameExpression', text: 'Foo'},
+// CHECK:STDOUT:         {kind: 'Name', text: ';', has_error: yes},
+// CHECK:STDOUT:       {kind: 'QualifiedDeclaration', text: '.', subtree_size: 3},
+// CHECK:STDOUT:     {kind: 'Namespace', text: ';', subtree_size: 5},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

+ 7 - 6
toolchain/parse/testdata/namespace/fail_no_name.carbon

@@ -9,9 +9,10 @@
 // CHECK:STDERR:          ^
 namespace;
 
-// CHECK:STDOUT: [
-// CHECK:STDOUT:   {kind: 'NamespaceStart', text: 'namespace'},
-// CHECK:STDOUT:   {kind: 'InvalidParse', text: ';'},
-// CHECK:STDOUT: {kind: 'Namespace', text: ';', has_error: yes, subtree_size: 3},
-// CHECK:STDOUT: {kind: 'FileEnd', text: ''},
-// CHECK:STDOUT: ]
+// CHECK:STDOUT: - filename: fail_no_name.carbon
+// CHECK:STDOUT:   parse_tree: [
+// CHECK:STDOUT:       {kind: 'NamespaceStart', text: 'namespace'},
+// CHECK:STDOUT:       {kind: 'InvalidParse', text: ';'},
+// CHECK:STDOUT:     {kind: 'Namespace', text: ';', has_error: yes, subtree_size: 3},
+// CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
+// CHECK:STDOUT:   ]

Некоторые файлы не были показаны из-за большого количества измененных файлов