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

Rename `ParamList` to `TuplePattern` (#3479)

Co-authored-by: Richard Smith <richard@metafoo.co.uk>
Geoff Romer 2 лет назад
Родитель
Сommit
6e65a30b5d
100 измененных файлов с 441 добавлено и 418 удалено
  1. 3 1
      toolchain/check/handle_binding_pattern.cpp
  2. 1 1
      toolchain/check/handle_function.cpp
  3. 1 1
      toolchain/check/handle_let.cpp
  4. 7 6
      toolchain/check/handle_pattern_list.cpp
  5. 2 2
      toolchain/check/handle_variable.cpp
  6. 2 2
      toolchain/check/node_stack.h
  7. 3 3
      toolchain/parse/handle_decl_name_and_params.cpp
  8. 0 98
      toolchain/parse/handle_param.cpp
  9. 1 1
      toolchain/parse/handle_pattern.cpp
  10. 103 0
      toolchain/parse/handle_pattern_list.cpp
  11. 25 15
      toolchain/parse/node_kind.def
  12. 27 22
      toolchain/parse/state.def
  13. 2 2
      toolchain/parse/testdata/array/fail_syntax.carbon
  14. 2 2
      toolchain/parse/testdata/basics/fail_invalid_designators.carbon
  15. 2 2
      toolchain/parse/testdata/basics/function_call.carbon
  16. 4 4
      toolchain/parse/testdata/basics/multifile.carbon
  17. 2 2
      toolchain/parse/testdata/basics/numeric_literals.carbon
  18. 2 2
      toolchain/parse/testdata/basics/parens.carbon
  19. 2 2
      toolchain/parse/testdata/class/basic.carbon
  20. 2 2
      toolchain/parse/testdata/class/fail_base_misplaced.carbon
  21. 6 6
      toolchain/parse/testdata/class/fn_definitions.carbon
  22. 2 2
      toolchain/parse/testdata/class/mismatched_introducer.carbon
  23. 2 2
      toolchain/parse/testdata/for/fail_colon_instead_of_in.carbon
  24. 2 2
      toolchain/parse/testdata/for/fail_missing_cond.carbon
  25. 2 2
      toolchain/parse/testdata/for/fail_missing_in.carbon
  26. 2 2
      toolchain/parse/testdata/for/fail_missing_var.carbon
  27. 2 2
      toolchain/parse/testdata/for/fail_returned_var.carbon
  28. 2 2
      toolchain/parse/testdata/for/fail_square_brackets.carbon
  29. 2 2
      toolchain/parse/testdata/for/nested.carbon
  30. 2 2
      toolchain/parse/testdata/for/simple.carbon
  31. 2 2
      toolchain/parse/testdata/function/declaration/addr.carbon
  32. 2 2
      toolchain/parse/testdata/function/declaration/basic.carbon
  33. 2 2
      toolchain/parse/testdata/function/declaration/fail_skip_indented_newline_until_outdent.carbon
  34. 2 2
      toolchain/parse/testdata/function/declaration/fail_skip_indented_newline_with_semi.carbon
  35. 2 2
      toolchain/parse/testdata/function/declaration/fail_skip_indented_newline_without_semi.carbon
  36. 2 2
      toolchain/parse/testdata/function/declaration/fail_skip_to_newline_without_semi.carbon
  37. 2 2
      toolchain/parse/testdata/function/declaration/fail_skip_without_semi_to_curly.carbon
  38. 2 2
      toolchain/parse/testdata/function/declaration/fail_with_identifier_as_param.carbon
  39. 8 8
      toolchain/parse/testdata/function/declaration/impl_fn.carbon
  40. 2 2
      toolchain/parse/testdata/function/declaration/implicit_empty.carbon
  41. 3 3
      toolchain/parse/testdata/function/declaration/implicit_params.carbon
  42. 3 3
      toolchain/parse/testdata/function/declaration/params.carbon
  43. 2 2
      toolchain/parse/testdata/function/declaration/with_return_type.carbon
  44. 2 2
      toolchain/parse/testdata/function/definition/basic.carbon
  45. 2 2
      toolchain/parse/testdata/function/definition/fail_identifier_in_statements.carbon
  46. 3 3
      toolchain/parse/testdata/function/definition/with_params.carbon
  47. 2 2
      toolchain/parse/testdata/function/definition/with_return_type.carbon
  48. 4 4
      toolchain/parse/testdata/generics/deduced_params/empty.carbon
  49. 4 4
      toolchain/parse/testdata/generics/deduced_params/one.carbon
  50. 6 6
      toolchain/parse/testdata/generics/deduced_params/one_suffix_comma.carbon
  51. 14 14
      toolchain/parse/testdata/generics/deduced_params/six.carbon
  52. 6 6
      toolchain/parse/testdata/generics/deduced_params/two.carbon
  53. 8 8
      toolchain/parse/testdata/generics/deduced_params/two_suffix_comma.carbon
  54. 2 2
      toolchain/parse/testdata/generics/generic_params/basic.carbon
  55. 2 2
      toolchain/parse/testdata/generics/generic_params/template.carbon
  56. 2 2
      toolchain/parse/testdata/generics/generic_params/template_addr.carbon
  57. 4 4
      toolchain/parse/testdata/generics/interface/basic.carbon
  58. 4 4
      toolchain/parse/testdata/generics/interface/default_fn.carbon
  59. 4 4
      toolchain/parse/testdata/generics/interface/fail_self_param_syntax.carbon
  60. 4 4
      toolchain/parse/testdata/generics/interface/final_fn.carbon
  61. 2 2
      toolchain/parse/testdata/generics/interface/final_member_definition.carbon
  62. 2 2
      toolchain/parse/testdata/generics/interface/non_instance_fn.carbon
  63. 4 4
      toolchain/parse/testdata/generics/interface/self_pointer.carbon
  64. 2 2
      toolchain/parse/testdata/generics/named_constraint/basic.carbon
  65. 2 2
      toolchain/parse/testdata/generics/named_constraint/defined_method.carbon
  66. 4 4
      toolchain/parse/testdata/generics/params/empty.carbon
  67. 4 4
      toolchain/parse/testdata/generics/params/one.carbon
  68. 6 6
      toolchain/parse/testdata/generics/params/one_suffix_comma.carbon
  69. 14 14
      toolchain/parse/testdata/generics/params/six.carbon
  70. 6 6
      toolchain/parse/testdata/generics/params/two.carbon
  71. 8 8
      toolchain/parse/testdata/generics/params/two_suffix_comma.carbon
  72. 2 2
      toolchain/parse/testdata/if/basic.carbon
  73. 2 2
      toolchain/parse/testdata/if/else.carbon
  74. 2 2
      toolchain/parse/testdata/if/fail_else_unbraced.carbon
  75. 2 2
      toolchain/parse/testdata/if/fail_errors.carbon
  76. 2 2
      toolchain/parse/testdata/if/fail_missing_cond.carbon
  77. 2 2
      toolchain/parse/testdata/if/fail_square_brackets.carbon
  78. 2 2
      toolchain/parse/testdata/if/fail_unbraced.carbon
  79. 4 4
      toolchain/parse/testdata/if_expr/basic.carbon
  80. 2 2
      toolchain/parse/testdata/if_expr/fail_condition_missing.carbon
  81. 2 2
      toolchain/parse/testdata/if_expr/fail_else_expr_missing.carbon
  82. 2 2
      toolchain/parse/testdata/if_expr/fail_else_missing.carbon
  83. 2 2
      toolchain/parse/testdata/if_expr/fail_then_expr_missing.carbon
  84. 2 2
      toolchain/parse/testdata/if_expr/fail_then_missing.carbon
  85. 2 2
      toolchain/parse/testdata/if_expr/fail_top_level_if.carbon
  86. 2 2
      toolchain/parse/testdata/if_expr/in_type.carbon
  87. 2 2
      toolchain/parse/testdata/if_expr/precedence.carbon
  88. 2 2
      toolchain/parse/testdata/let/fail_missing_value.carbon
  89. 2 2
      toolchain/parse/testdata/let/let.carbon
  90. 5 5
      toolchain/parse/testdata/let/let_tuple.carbon
  91. 2 2
      toolchain/parse/testdata/namespace/basic.carbon
  92. 2 2
      toolchain/parse/testdata/namespace/nested.carbon
  93. 2 2
      toolchain/parse/testdata/operators/assign.carbon
  94. 2 2
      toolchain/parse/testdata/operators/associative.carbon
  95. 2 2
      toolchain/parse/testdata/operators/fail_chained_assign.carbon
  96. 2 2
      toolchain/parse/testdata/operators/fail_postincrement.carbon
  97. 2 2
      toolchain/parse/testdata/operators/fail_precedence_and_or.carbon
  98. 2 2
      toolchain/parse/testdata/operators/fail_precedence_as.carbon
  99. 2 2
      toolchain/parse/testdata/operators/fail_precedence_assign.carbon
  100. 2 2
      toolchain/parse/testdata/operators/fail_precedence_or_and.carbon

+ 3 - 1
toolchain/check/handle_binding_pattern.cpp

@@ -115,9 +115,11 @@ auto HandleBindingPattern(Context& context, Parse::NodeId parse_node) -> bool {
     }
 
     case Parse::NodeKind::ImplicitParamListStart:
-    case Parse::NodeKind::ParamListStart:
+    case Parse::NodeKind::TuplePatternStart:
       // Parameters can have incomplete types in a function declaration, but not
       // in a function definition. We don't know which kind we have here.
+      // TODO: A tuple pattern can appear in other places than function
+      // parameters.
       context.AddInstAndPush(parse_node,
                              SemIR::Param{name_node, cast_type_id, name_id});
       // TODO: Create a `BindName` instruction.

+ 1 - 1
toolchain/check/handle_function.cpp

@@ -79,7 +79,7 @@ static auto BuildFunctionDecl(Context& context, bool is_definition)
   }
 
   SemIR::InstBlockId param_refs_id =
-      context.node_stack().Pop<Parse::NodeKind::ParamList>();
+      context.node_stack().Pop<Parse::NodeKind::TuplePattern>();
   SemIR::InstBlockId implicit_param_refs_id =
       context.node_stack().PopIf<Parse::NodeKind::ImplicitParamList>().value_or(
           SemIR::InstBlockId::Empty);

+ 1 - 1
toolchain/check/handle_let.cpp

@@ -11,7 +11,7 @@ namespace Carbon::Check {
 
 auto HandleLetDecl(Context& context, Parse::NodeId parse_node) -> bool {
   auto value_id = context.node_stack().PopExpr();
-  if (context.node_stack().PeekIs<Parse::NodeKind::ParamList>()) {
+  if (context.node_stack().PeekIs<Parse::NodeKind::TuplePattern>()) {
     return context.TODO(parse_node, "tuple pattern in let");
   }
   SemIR::InstId pattern_id =

+ 7 - 6
toolchain/check/handle_param_list.cpp → toolchain/check/handle_pattern_list.cpp

@@ -25,23 +25,24 @@ auto HandleImplicitParamListStart(Context& context, Parse::NodeId parse_node)
   return true;
 }
 
-auto HandleParamList(Context& context, Parse::NodeId parse_node) -> bool {
-  auto refs_id = context.ParamOrArgEnd(Parse::NodeKind::ParamListStart);
+auto HandleTuplePattern(Context& context, Parse::NodeId parse_node) -> bool {
+  auto refs_id = context.ParamOrArgEnd(Parse::NodeKind::TuplePatternStart);
   context.PopScope();
   context.node_stack()
-      .PopAndDiscardSoloParseNode<Parse::NodeKind::ParamListStart>();
+      .PopAndDiscardSoloParseNode<Parse::NodeKind::TuplePatternStart>();
   context.node_stack().Push(parse_node, refs_id);
   return true;
 }
 
-auto HandleParamListComma(Context& context, Parse::NodeId /*parse_node*/)
+auto HandlePatternListComma(Context& context, Parse::NodeId /*parse_node*/)
     -> bool {
   context.ParamOrArgComma();
   return true;
 }
 
-auto HandleParamListStart(Context& context, Parse::NodeId parse_node) -> bool {
-  // A parameter list following an implicit parameter list shares the same
+auto HandleTuplePatternStart(Context& context, Parse::NodeId parse_node)
+    -> bool {
+  // A tuple pattern following an implicit parameter list shares the same
   // scope.
   //
   // TODO: For a declaration like

+ 2 - 2
toolchain/check/handle_variable.cpp

@@ -36,7 +36,7 @@ auto HandleVariableDecl(Context& context, Parse::NodeId parse_node) -> bool {
   auto init_id = SemIR::InstId::Invalid;
   Parse::NodeKind next_kind =
       context.parse_tree().node_kind(context.node_stack().PeekParseNode());
-  if (next_kind == Parse::NodeKind::ParamList) {
+  if (next_kind == Parse::NodeKind::TuplePattern) {
     return context.TODO(parse_node, "tuple pattern in var");
   }
   // TODO: find a more robust way to determine if there was an initializer.
@@ -47,7 +47,7 @@ auto HandleVariableDecl(Context& context, Parse::NodeId parse_node) -> bool {
         .PopAndDiscardSoloParseNode<Parse::NodeKind::VariableInitializer>();
   }
 
-  if (context.node_stack().PeekIs<Parse::NodeKind::ParamList>()) {
+  if (context.node_stack().PeekIs<Parse::NodeKind::TuplePattern>()) {
     return context.TODO(parse_node, "tuple pattern in var");
   }
 

+ 2 - 2
toolchain/check/node_stack.h

@@ -349,7 +349,7 @@ class NodeStack {
       case Parse::NodeKind::IfCondition:
       case Parse::NodeKind::IfExprIf:
       case Parse::NodeKind::ImplicitParamList:
-      case Parse::NodeKind::ParamList:
+      case Parse::NodeKind::TuplePattern:
       case Parse::NodeKind::WhileCondition:
       case Parse::NodeKind::WhileConditionStart:
         return IdKind::InstBlockId;
@@ -371,13 +371,13 @@ class NodeStack {
       case Parse::NodeKind::ImplicitParamListStart:
       case Parse::NodeKind::InterfaceIntroducer:
       case Parse::NodeKind::LetIntroducer:
-      case Parse::NodeKind::ParamListStart:
       case Parse::NodeKind::QualifiedDecl:
       case Parse::NodeKind::ReturnedModifier:
       case Parse::NodeKind::ReturnStatementStart:
       case Parse::NodeKind::ReturnVarModifier:
       case Parse::NodeKind::SelfValueName:
       case Parse::NodeKind::StructLiteralOrStructTypeLiteralStart:
+      case Parse::NodeKind::TuplePatternStart:
       case Parse::NodeKind::VariableInitializer:
       case Parse::NodeKind::VariableIntroducer:
         return IdKind::SoloParseNode;

+ 3 - 3
toolchain/parse/handle_decl_name_and_params.cpp

@@ -86,9 +86,9 @@ static auto HandleDeclNameAndParamsAfterName(Context& context, Params params)
 
   if (context.PositionIs(Lex::TokenKind::OpenSquareBracket)) {
     context.PushState(State::DeclNameAndParamsAfterImplicit);
-    context.PushState(State::ParamListAsImplicit);
+    context.PushState(State::PatternListAsImplicit);
   } else if (context.PositionIs(Lex::TokenKind::OpenParen)) {
-    context.PushState(State::ParamListAsRegular);
+    context.PushState(State::PatternListAsTuple);
   } else if (params == Params::Required) {
     CARBON_DIAGNOSTIC(ParamsRequiredByIntroducer, Error,
                       "`{0}` requires a `(` for parameters.", Lex::TokenKind);
@@ -114,7 +114,7 @@ auto HandleDeclNameAndParamsAfterImplicit(Context& context) -> void {
   context.PopAndDiscardState();
 
   if (context.PositionIs(Lex::TokenKind::OpenParen)) {
-    context.PushState(State::ParamListAsRegular);
+    context.PushState(State::PatternListAsTuple);
   } else {
     CARBON_DIAGNOSTIC(
         ParamsRequiredAfterImplicit, Error,

+ 0 - 98
toolchain/parse/handle_param.cpp

@@ -1,98 +0,0 @@
-// 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
-
-#include "toolchain/parse/context.h"
-
-namespace Carbon::Parse {
-
-// Handles ParamAs(Implicit|Regular).
-static auto HandleParam(Context& context, State pattern_state,
-                        State finish_state) -> void {
-  context.PopAndDiscardState();
-
-  context.PushState(finish_state);
-  context.PushState(pattern_state);
-}
-
-auto HandleParamAsImplicit(Context& context) -> void {
-  HandleParam(context, State::BindingPattern, State::ParamFinishAsImplicit);
-}
-
-auto HandleParamAsRegular(Context& context) -> void {
-  HandleParam(context, State::BindingPattern, State::ParamFinishAsRegular);
-}
-
-// Handles ParamFinishAs(Implicit|Regular).
-static auto HandleParamFinish(Context& context, Lex::TokenKind close_token,
-                              State param_state) -> void {
-  auto state = context.PopState();
-
-  if (state.has_error) {
-    context.ReturnErrorOnState();
-  }
-
-  if (context.ConsumeListToken(NodeKind::ParamListComma, close_token,
-                               state.has_error) ==
-      Context::ListTokenKind::Comma) {
-    context.PushState(param_state);
-  }
-}
-
-auto HandleParamFinishAsImplicit(Context& context) -> void {
-  HandleParamFinish(context, Lex::TokenKind::CloseSquareBracket,
-                    State::ParamAsImplicit);
-}
-
-auto HandleParamFinishAsRegular(Context& context) -> void {
-  HandleParamFinish(context, Lex::TokenKind::CloseParen, State::ParamAsRegular);
-}
-
-// Handles ParamListAs(Implicit|Regular).
-static auto HandleParamList(Context& context, NodeKind parse_node_kind,
-                            Lex::TokenKind open_token_kind,
-                            Lex::TokenKind close_token_kind, State param_state,
-                            State finish_state) -> void {
-  context.PopAndDiscardState();
-
-  context.PushState(finish_state);
-  context.AddLeafNode(parse_node_kind, context.ConsumeChecked(open_token_kind));
-
-  if (!context.PositionIs(close_token_kind)) {
-    context.PushState(param_state);
-  }
-}
-
-auto HandleParamListAsImplicit(Context& context) -> void {
-  HandleParamList(context, NodeKind::ImplicitParamListStart,
-                  Lex::TokenKind::OpenSquareBracket,
-                  Lex::TokenKind::CloseSquareBracket, State::ParamAsImplicit,
-                  State::ParamListFinishAsImplicit);
-}
-
-auto HandleParamListAsRegular(Context& context) -> void {
-  HandleParamList(context, NodeKind::ParamListStart, Lex::TokenKind::OpenParen,
-                  Lex::TokenKind::CloseParen, State::ParamAsRegular,
-                  State::ParamListFinishAsRegular);
-}
-
-// Handles ParamListFinishAs(Implicit|Regular).
-static auto HandleParamListFinish(Context& context, NodeKind parse_node_kind,
-                                  Lex::TokenKind token_kind) -> void {
-  auto state = context.PopState();
-
-  context.AddNode(parse_node_kind, context.ConsumeChecked(token_kind),
-                  state.subtree_start, state.has_error);
-}
-
-auto HandleParamListFinishAsImplicit(Context& context) -> void {
-  HandleParamListFinish(context, NodeKind::ImplicitParamList,
-                        Lex::TokenKind::CloseSquareBracket);
-}
-
-auto HandleParamListFinishAsRegular(Context& context) -> void {
-  HandleParamListFinish(context, NodeKind::ParamList,
-                        Lex::TokenKind::CloseParen);
-}
-
-}  // namespace Carbon::Parse

+ 1 - 1
toolchain/parse/handle_pattern.cpp

@@ -9,7 +9,7 @@ namespace Carbon::Parse {
 auto HandlePattern(Context& context) -> void {
   context.PopAndDiscardState();
   if (context.PositionKind() == Lex::TokenKind::OpenParen) {
-    context.PushState(State::ParamListAsRegular);
+    context.PushState(State::PatternListAsTuple);
   } else {
     context.PushState(State::BindingPattern);
   }

+ 103 - 0
toolchain/parse/handle_pattern_list.cpp

@@ -0,0 +1,103 @@
+// 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
+
+#include "toolchain/parse/context.h"
+
+namespace Carbon::Parse {
+
+// Handles PatternListElementAs(Implicit|Tuple).
+static auto HandlePatternListElement(Context& context, State pattern_state,
+                                     State finish_state) -> void {
+  context.PopAndDiscardState();
+
+  context.PushState(finish_state);
+  context.PushState(pattern_state);
+}
+
+auto HandlePatternListElementAsImplicit(Context& context) -> void {
+  HandlePatternListElement(context, State::BindingPattern,
+                           State::PatternListElementFinishAsImplicit);
+}
+
+auto HandlePatternListElementAsTuple(Context& context) -> void {
+  HandlePatternListElement(context, State::BindingPattern,
+                           State::PatternListElementFinishAsTuple);
+}
+
+// Handles PatternListElementFinishAs(Implicit|Tuple).
+static auto HandlePatternListElementFinish(Context& context,
+                                           Lex::TokenKind close_token,
+                                           State param_state) -> void {
+  auto state = context.PopState();
+
+  if (state.has_error) {
+    context.ReturnErrorOnState();
+  }
+
+  if (context.ConsumeListToken(NodeKind::PatternListComma, close_token,
+                               state.has_error) ==
+      Context::ListTokenKind::Comma) {
+    context.PushState(param_state);
+  }
+}
+
+auto HandlePatternListElementFinishAsImplicit(Context& context) -> void {
+  HandlePatternListElementFinish(context, Lex::TokenKind::CloseSquareBracket,
+                                 State::PatternListElementAsImplicit);
+}
+
+auto HandlePatternListElementFinishAsTuple(Context& context) -> void {
+  HandlePatternListElementFinish(context, Lex::TokenKind::CloseParen,
+                                 State::PatternListElementAsTuple);
+}
+
+// Handles PatternListAs(Implicit|Tuple).
+static auto HandlePatternList(Context& context, NodeKind parse_node_kind,
+                              Lex::TokenKind open_token_kind,
+                              Lex::TokenKind close_token_kind,
+                              State param_state, State finish_state) -> void {
+  context.PopAndDiscardState();
+
+  context.PushState(finish_state);
+  context.AddLeafNode(parse_node_kind, context.ConsumeChecked(open_token_kind));
+
+  if (!context.PositionIs(close_token_kind)) {
+    context.PushState(param_state);
+  }
+}
+
+auto HandlePatternListAsImplicit(Context& context) -> void {
+  HandlePatternList(
+      context, NodeKind::ImplicitParamListStart,
+      Lex::TokenKind::OpenSquareBracket, Lex::TokenKind::CloseSquareBracket,
+      State::PatternListElementAsImplicit, State::PatternListFinishAsImplicit);
+}
+
+auto HandlePatternListAsTuple(Context& context) -> void {
+  HandlePatternList(context, NodeKind::TuplePatternStart,
+                    Lex::TokenKind::OpenParen, Lex::TokenKind::CloseParen,
+                    State::PatternListElementAsTuple,
+                    State::PatternListFinishAsTuple);
+}
+
+// Handles PatternListFinishAs(Implicit|Tuple).
+static auto HandlePatternListFinish(Context& context, NodeKind parse_node_kind,
+                                    Lex::TokenKind token_kind) -> void {
+  auto state = context.PopState();
+
+  context.AddNode(parse_node_kind, context.ConsumeChecked(token_kind),
+                  state.subtree_start, state.has_error);
+}
+
+auto HandlePatternListFinishAsImplicit(Context& context) -> void {
+  HandlePatternListFinish(context, NodeKind::ImplicitParamList,
+                          Lex::TokenKind::CloseSquareBracket);
+}
+
+auto HandlePatternListFinishAsTuple(Context& context) -> void {
+  HandlePatternListFinish(context, NodeKind::TuplePattern,
+                          Lex::TokenKind::CloseParen);
+}
+
+}  // namespace Carbon::Parse

+ 25 - 15
toolchain/parse/node_kind.def

@@ -216,7 +216,7 @@ CARBON_PARSE_NODE_KIND_BRACKET(CodeBlock, CodeBlockStart,
 //     FunctionIntroducer
 //     _repeated_ _external_: modifier
 //     _external_: Name or QualifiedDecl
-//     _external_: ParamList
+//     _external_: TuplePattern
 //       _external_: type expression
 //     ReturnType
 //   FunctionDefinitionStart
@@ -236,24 +236,34 @@ CARBON_PARSE_NODE_KIND_BRACKET(FunctionDecl, FunctionIntroducer,
                                CARBON_TOKEN(Semi)
                                    CARBON_IF_ERROR(CARBON_TOKEN(Fn)))
 
-// A parameter list, possibly implicit:
-//   [Implicit]ParamListStart
+// A tuple pattern:
+//   TuplePatternStart
 //     _external_: [Generic]BindingPattern
-//     ParamListComma
+//     PatternListComma
 //   _repeated_
-// [Implicit]ParamList
+// TuplePattern
 //
-// [Generic]PatternBinding and ParamListComma may repeat with ParamListComma
-// as a separator.
+// Patterns and PatternListComma may repeat with PatternListComma as a
+// separator.
+CARBON_PARSE_NODE_KIND_CHILD_COUNT(TuplePatternStart, 0,
+                                   CARBON_TOKEN(OpenParen))
+CARBON_PARSE_NODE_KIND_CHILD_COUNT(PatternListComma, 0, CARBON_TOKEN(Comma))
+CARBON_PARSE_NODE_KIND_BRACKET(TuplePattern, TuplePatternStart,
+                               CARBON_TOKEN(CloseParen))
+
+// An implicit parameter list:
+//   ImplicitParamListStart
+//     _external_: [Generic]BindingPattern
+//     PatternListComma
+//   _repeated_
+// ImplicitParamList
 //
-// TODO: rename ParamList to TuplePattern to reflect wider usage.
-CARBON_PARSE_NODE_KIND_CHILD_COUNT(ParamListStart, 0, CARBON_TOKEN(OpenParen))
+// Patterns and PatternListComma may repeat with PatternListComma as a
+// separator.
 CARBON_PARSE_NODE_KIND_CHILD_COUNT(ImplicitParamListStart, 0,
                                    CARBON_TOKEN(OpenSquareBracket))
-CARBON_PARSE_NODE_KIND_CHILD_COUNT(ParamListComma, 0, CARBON_TOKEN(Comma))
-CARBON_PARSE_NODE_KIND_BRACKET(ParamList, ParamListStart,
-                               CARBON_TOKEN(CloseParen))
-CARBON_PARSE_NODE_KIND_BRACKET(ImplicitParamList, ImplicitParamListStart,
+CARBON_PARSE_NODE_KIND_BRACKET(ImplicitParamList,
+                               ImplicitParamListStart,
                                CARBON_TOKEN(CloseSquareBracket))
 
 // An array type, such as  `[i32; 3]` or `[i32;]`:
@@ -287,7 +297,7 @@ CARBON_PARSE_NODE_KIND_CHILD_COUNT(Template, 1, CARBON_TOKEN(Template))
 // `let`:
 //   LetIntroducer
 //   _repeated_ _external_: modifier
-//   _external_: BindingPattern or ParamList
+//   _external_: BindingPattern or TuplePattern
 //   LetInitializer
 //   _external_: expression
 // LetDecl
@@ -303,7 +313,7 @@ CARBON_PARSE_NODE_KIND_BRACKET(LetDecl, LetIntroducer,
 //   VariableIntroducer
 //   _repeated_ _external_: modifier
 //   _optional_ ReturnedModifier
-//   _external_: BindingPattern or ParamList
+//   _external_: BindingPattern or TuplePattern
 //     VariableInitializer
 //     _external_: expression
 //   _optional_

+ 27 - 22
toolchain/parse/state.def

@@ -255,12 +255,12 @@ CARBON_PARSE_STATE_VARIANTS3(DeclNameAndParams, None, Optional, Required)
 //
 // name [ ... ]    (variant is not None)
 //     ^
-//   1. ParamListAsImplicit
+//   1. PatternListAsImplicit
 //   2. DeclNameAndParamsAfterImplicit
 //
 // name ( ... )    (variant is not None)
 //     ^
-//   1. ParamListAsRegular
+//   1. PatternListAsTuple
 //
 // name ...        (variant is not Required)
 //     ^
@@ -277,7 +277,7 @@ CARBON_PARSE_STATE_VARIANTS3(DeclNameAndParamsAfterName, None, Optional,
 //
 // name [ ... ] ( ... )
 //             ^
-//   1. ParamListAsRegular
+//   1. PatternListAsTuple
 //
 // name [ ... ] ???
 //             ^
@@ -649,56 +649,61 @@ CARBON_PARSE_STATE(NamespaceFinish)
 //   (state done)
 CARBON_PARSE_STATE(Package)
 
-// Starts parameter parsing.
+// Starts parsing a pattern in a comma-separated list. The variants mark
+// whether it is part of an implicit parameter list or a tuple pattern.
 //
 //  ...
 // ^
 //   1. BindingPattern
-//   2. ParamFinishAs(Implicit|Regular)
-CARBON_PARSE_STATE_VARIANTS2(Param, Implicit, Regular)
+//   2. PatternListElementFinishAs(Implicit|Tuple)
+CARBON_PARSE_STATE_VARIANTS2(PatternListElement, Implicit, Tuple)
 
-// Finishes parsing a parameter, including the optional trailing `,`. If there
-// are more parameters, enqueues another parameter parsing state.
+// Finishes parsing a pattern in a comma-separated list, including the
+// optional trailing `,`. If there are more patterns, enqueues another
+// pattern parsing state.
+//
+// ... , )  (variant is Tuple)
+//     ^
+//   (state done)
 //
-// ... , )
+// ... , ]  (variant is Implicit)
 //     ^
 //   (state done)
 //
 // ... , ...
 //     ^
-//   1. ParamAs(Implicit|Regular)
+//   1. PatternListElementAs(Implicit|Tuple)
 //
 // ...
 //    ^
 //   (state done)
-CARBON_PARSE_STATE_VARIANTS2(ParamFinish, Implicit, Regular)
+CARBON_PARSE_STATE_VARIANTS2(PatternListElementFinish, Implicit, Tuple)
 
-// Handles processing of a parameter list `[` or `(`.
-//
-// TODO: Rename this to TuplePattern to reflect wider usage.
+// Handles processing of a tuple pattern (parentheses) or implicit parameter
+// list (square brackets).
 //
-// ( )        (variant is Regular)
+// ( )        (variant is Tuple)
 // ^
 // [ ]        (variant is Implicit)
 // ^
-//   1. ParamListFinishAs(Regular|Implicit)
+//   1. PatternListFinishAs(Tuple|Implicit)
 //
-// ( ... )    (variant is Regular)
+// ( ... )    (variant is Tuple)
 // ^
 // [ ... ]    (variant is Implicit)
 // ^
-//   1. ParamAs(Regular|Implicit)
-//   2. ParamListFinishAs(Regular|Implicit)
-CARBON_PARSE_STATE_VARIANTS2(ParamList, Implicit, Regular)
+//   1. PatternListElementAs(Tuple|Implicit)
+//   2. PatternListFinishAs(Tuple|Implicit)
+CARBON_PARSE_STATE_VARIANTS2(PatternList, Implicit, Tuple)
 
 // Handles processing of a parameter list `]` or `)`.
 //
-// ( ... )    (variant is Regular)
+// ( ... )    (variant is Tuple)
 //       ^
 // [ ... ]    (variant is Implicit)
 //       ^
 //   (state done)
-CARBON_PARSE_STATE_VARIANTS2(ParamListFinish, Implicit, Regular)
+CARBON_PARSE_STATE_VARIANTS2(PatternListFinish, Implicit, Tuple)
 
 // Handles the processing of a `(condition)` up through the expression.
 //

+ 2 - 2
toolchain/parse/testdata/array/fail_syntax.carbon

@@ -87,8 +87,8 @@ var x: [i32];
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:       {kind: 'IdentifierName', text: 'X'},
-// CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:       {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:         {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:       {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:             {kind: 'ArrayExprStart', text: '['},
 // CHECK:STDOUT:             {kind: 'InvalidParse', text: ':', has_error: yes},
 // CHECK:STDOUT:           {kind: 'ArrayExprSemi', text: ':', has_error: yes, subtree_size: 3},

+ 2 - 2
toolchain/parse/testdata/basics/fail_invalid_designators.carbon

@@ -25,8 +25,8 @@ fn F() {
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'F'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:           {kind: 'IdentifierNameExpr', text: 'a'},
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: ';', has_error: yes},

+ 2 - 2
toolchain/parse/testdata/basics/function_call.carbon

@@ -14,8 +14,8 @@ fn F() {
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'F'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:                       {kind: 'IdentifierNameExpr', text: 'a'},
 // CHECK:STDOUT:                       {kind: 'IdentifierName', text: 'b'},

+ 4 - 4
toolchain/parse/testdata/basics/multifile.carbon

@@ -15,8 +15,8 @@ fn B() {}
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'A'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', 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: ''},
@@ -26,8 +26,8 @@ fn B() {}
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'B'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', 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: ''},

+ 2 - 2
toolchain/parse/testdata/basics/numeric_literals.carbon

@@ -30,8 +30,8 @@ fn F() {
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'F'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:         {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'ints'},

+ 2 - 2
toolchain/parse/testdata/basics/parens.carbon

@@ -13,11 +13,11 @@ fn F(n: i32) -> i32 {
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'F'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 'n'},
 // CHECK:STDOUT:             {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 5},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 5},
 // CHECK:STDOUT:           {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'ReturnType', text: '->', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 10},

+ 2 - 2
toolchain/parse/testdata/class/basic.carbon

@@ -16,8 +16,8 @@ class Foo {
 // CHECK:STDOUT:       {kind: 'ClassDefinitionStart', text: '{', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'Baz'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDecl', text: ';', subtree_size: 5},
 // CHECK:STDOUT:     {kind: 'ClassDefinition', text: '}', subtree_size: 9},
 // CHECK:STDOUT:     {kind: 'FileEnd', text: ''},

+ 2 - 2
toolchain/parse/testdata/class/fail_base_misplaced.carbon

@@ -23,8 +23,8 @@ fn F() {
 // CHECK:STDOUT:     {kind: 'ClassDefinition', text: '}', subtree_size: 5},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'F'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:         {kind: 'InvalidParse', text: 'base', has_error: yes},
 // CHECK:STDOUT:       {kind: 'ExprStatement', text: ';', has_error: yes, subtree_size: 2},

+ 6 - 6
toolchain/parse/testdata/class/fn_definitions.carbon

@@ -20,8 +20,8 @@ class Foo {
 // CHECK:STDOUT:       {kind: 'ClassDefinitionStart', text: '{', subtree_size: 3},
 // CHECK:STDOUT:           {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'Make'},
-// CHECK:STDOUT:             {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:           {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:             {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:           {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:             {kind: 'SelfTypeNameExpr', text: 'Self'},
 // CHECK:STDOUT:           {kind: 'ReturnType', text: '->', subtree_size: 2},
 // CHECK:STDOUT:         {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 7},
@@ -41,8 +41,8 @@ class Foo {
 // CHECK:STDOUT:               {kind: 'SelfTypeNameExpr', text: 'Self'},
 // CHECK:STDOUT:             {kind: 'BindingPattern', text: ':', subtree_size: 3},
 // CHECK:STDOUT:           {kind: 'ImplicitParamList', text: ']', subtree_size: 5},
-// CHECK:STDOUT:             {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:           {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:             {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:           {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:             {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'ReturnType', text: '->', subtree_size: 2},
 // CHECK:STDOUT:         {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 12},
@@ -61,8 +61,8 @@ class Foo {
 // CHECK:STDOUT:               {kind: 'BindingPattern', text: ':', subtree_size: 4},
 // CHECK:STDOUT:             {kind: 'Address', text: 'addr', subtree_size: 5},
 // CHECK:STDOUT:           {kind: 'ImplicitParamList', text: ']', subtree_size: 7},
-// CHECK:STDOUT:             {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:           {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:             {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:           {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:         {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 12},
 // CHECK:STDOUT:               {kind: 'SelfValueNameExpr', text: 'self'},
 // CHECK:STDOUT:               {kind: 'IdentifierName', text: 'x'},

+ 2 - 2
toolchain/parse/testdata/class/mismatched_introducer.carbon

@@ -19,8 +19,8 @@ abstract base class C;
 // CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:       {kind: 'BaseModifier', text: 'base'},
 // CHECK:STDOUT:       {kind: 'IdentifierName', text: 'F'},
-// CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:       {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:         {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:       {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:     {kind: 'FunctionDecl', text: ';', subtree_size: 6},
 // CHECK:STDOUT:       {kind: 'ClassIntroducer', text: 'class'},
 // CHECK:STDOUT:       {kind: 'AbstractModifier', text: 'abstract'},

+ 2 - 2
toolchain/parse/testdata/for/fail_colon_instead_of_in.carbon

@@ -18,8 +18,8 @@ fn foo() {
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'foo'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:           {kind: 'ForHeaderStart', text: '('},
 // CHECK:STDOUT:             {kind: 'VariableIntroducer', text: 'var'},

+ 2 - 2
toolchain/parse/testdata/for/fail_missing_cond.carbon

@@ -26,8 +26,8 @@ fn F() {
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'F'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', 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: '{'},

+ 2 - 2
toolchain/parse/testdata/for/fail_missing_in.carbon

@@ -18,8 +18,8 @@ fn foo() {
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'foo'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:           {kind: 'ForHeaderStart', text: '('},
 // CHECK:STDOUT:             {kind: 'VariableIntroducer', text: 'var'},

+ 2 - 2
toolchain/parse/testdata/for/fail_missing_var.carbon

@@ -18,8 +18,8 @@ fn foo() {
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'foo'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:           {kind: 'ForHeaderStart', text: '('},
 // CHECK:STDOUT:           {kind: 'IdentifierNameExpr', text: 'y'},

+ 2 - 2
toolchain/parse/testdata/for/fail_returned_var.carbon

@@ -19,8 +19,8 @@ fn foo() -> i32 {
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'foo'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:           {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'ReturnType', text: '->', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 7},

+ 2 - 2
toolchain/parse/testdata/for/fail_square_brackets.carbon

@@ -26,8 +26,8 @@ fn F() {
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'F'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:           {kind: 'ForHeaderStart', text: 'for', has_error: yes},
 // CHECK:STDOUT:               {kind: 'ArrayExprStart', text: '['},

+ 2 - 2
toolchain/parse/testdata/for/nested.carbon

@@ -17,8 +17,8 @@ fn foo() {
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'foo'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:           {kind: 'ForHeaderStart', text: '('},
 // CHECK:STDOUT:             {kind: 'VariableIntroducer', text: 'var'},

+ 2 - 2
toolchain/parse/testdata/for/simple.carbon

@@ -15,8 +15,8 @@ fn foo() {
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'foo'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:           {kind: 'ForHeaderStart', text: '('},
 // CHECK:STDOUT:             {kind: 'VariableIntroducer', text: 'var'},

+ 2 - 2
toolchain/parse/testdata/function/declaration/addr.carbon

@@ -11,13 +11,13 @@ fn foo(addr a: i32*);
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:       {kind: 'IdentifierName', text: 'foo'},
-// CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePatternStart', text: '('},
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 'a'},
 // CHECK:STDOUT:               {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:             {kind: 'PostfixOperator', text: '*', subtree_size: 2},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 4},
 // CHECK:STDOUT:         {kind: 'Address', text: 'addr', subtree_size: 5},
-// CHECK:STDOUT:       {kind: 'ParamList', text: ')', subtree_size: 7},
+// CHECK:STDOUT:       {kind: 'TuplePattern', text: ')', subtree_size: 7},
 // CHECK:STDOUT:     {kind: 'FunctionDecl', text: ';', subtree_size: 10},
 // CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
 // CHECK:STDOUT:   ]

+ 2 - 2
toolchain/parse/testdata/function/declaration/basic.carbon

@@ -11,8 +11,8 @@ fn F();
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:       {kind: 'IdentifierName', text: 'F'},
-// CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:       {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:         {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:       {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:     {kind: 'FunctionDecl', text: ';', subtree_size: 5},
 // CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
 // CHECK:STDOUT:   ]

+ 2 - 2
toolchain/parse/testdata/function/declaration/fail_skip_indented_newline_until_outdent.carbon

@@ -20,8 +20,8 @@ fn F();
 // CHECK:STDOUT:     {kind: 'FunctionDecl', text: 'fn', has_error: yes, subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:       {kind: 'IdentifierName', text: 'F'},
-// CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:       {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:         {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:       {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:     {kind: 'FunctionDecl', text: ';', subtree_size: 5},
 // CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
 // CHECK:STDOUT:   ]

+ 2 - 2
toolchain/parse/testdata/function/declaration/fail_skip_indented_newline_with_semi.carbon

@@ -20,8 +20,8 @@ fn F();
 // CHECK:STDOUT:     {kind: 'FunctionDecl', text: ';', has_error: yes, subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:       {kind: 'IdentifierName', text: 'F'},
-// CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:       {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:         {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:       {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:     {kind: 'FunctionDecl', text: ';', subtree_size: 5},
 // CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
 // CHECK:STDOUT:   ]

+ 2 - 2
toolchain/parse/testdata/function/declaration/fail_skip_indented_newline_without_semi.carbon

@@ -20,8 +20,8 @@ fn F();
 // CHECK:STDOUT:     {kind: 'FunctionDecl', text: 'fn', has_error: yes, subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:       {kind: 'IdentifierName', text: 'F'},
-// CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:       {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:         {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:       {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:     {kind: 'FunctionDecl', text: ';', subtree_size: 5},
 // CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
 // CHECK:STDOUT:   ]

+ 2 - 2
toolchain/parse/testdata/function/declaration/fail_skip_to_newline_without_semi.carbon

@@ -18,8 +18,8 @@ fn F();
 // CHECK:STDOUT:     {kind: 'FunctionDecl', text: 'fn', has_error: yes, subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:       {kind: 'IdentifierName', text: 'F'},
-// CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:       {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:         {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:       {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:     {kind: 'FunctionDecl', text: ';', subtree_size: 5},
 // CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
 // CHECK:STDOUT:   ]

+ 2 - 2
toolchain/parse/testdata/function/declaration/fail_skip_without_semi_to_curly.carbon

@@ -17,8 +17,8 @@ fn F();
 // CHECK:STDOUT:     {kind: 'InvalidParseSubtree', text: '}', has_error: yes, subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:       {kind: 'IdentifierName', text: 'F'},
-// CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:       {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:         {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:       {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:     {kind: 'FunctionDecl', text: ';', subtree_size: 5},
 // CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
 // CHECK:STDOUT:   ]

+ 2 - 2
toolchain/parse/testdata/function/declaration/fail_with_identifier_as_param.carbon

@@ -14,11 +14,11 @@ fn foo(bar);
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:       {kind: 'IdentifierName', text: 'foo'},
-// CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePatternStart', text: '('},
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'bar'},
 // CHECK:STDOUT:           {kind: 'InvalidParse', text: ')', has_error: yes},
 // CHECK:STDOUT:         {kind: 'BindingPattern', text: 'bar', has_error: yes, subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'ParamList', text: ')', has_error: yes, subtree_size: 5},
+// CHECK:STDOUT:       {kind: 'TuplePattern', text: ')', has_error: yes, subtree_size: 5},
 // CHECK:STDOUT:     {kind: 'FunctionDecl', text: ';', subtree_size: 8},
 // CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
 // CHECK:STDOUT:   ]

+ 8 - 8
toolchain/parse/testdata/function/declaration/impl_fn.carbon

@@ -15,30 +15,30 @@ private impl default fn I();
 // CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:       {kind: 'ImplModifier', text: 'impl'},
 // CHECK:STDOUT:       {kind: 'IdentifierName', text: 'F'},
-// CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:       {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:         {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:       {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:     {kind: 'FunctionDecl', text: ';', subtree_size: 6},
 // CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:       {kind: 'AbstractModifier', text: 'abstract'},
 // CHECK:STDOUT:       {kind: 'ImplModifier', text: 'impl'},
 // CHECK:STDOUT:       {kind: 'IdentifierName', text: 'G'},
-// CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:       {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:         {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:       {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:     {kind: 'FunctionDecl', text: ';', subtree_size: 7},
 // CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:       {kind: 'ImplModifier', text: 'impl'},
 // CHECK:STDOUT:       {kind: 'AbstractModifier', text: 'abstract'},
 // CHECK:STDOUT:       {kind: 'IdentifierName', text: 'H'},
-// CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:       {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:         {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:       {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:     {kind: 'FunctionDecl', text: ';', subtree_size: 7},
 // CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:       {kind: 'PrivateModifier', text: 'private'},
 // CHECK:STDOUT:       {kind: 'ImplModifier', text: 'impl'},
 // CHECK:STDOUT:       {kind: 'DefaultModifier', text: 'default'},
 // CHECK:STDOUT:       {kind: 'IdentifierName', text: 'I'},
-// CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:       {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:         {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:       {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:     {kind: 'FunctionDecl', text: ';', subtree_size: 8},
 // CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
 // CHECK:STDOUT:   ]

+ 2 - 2
toolchain/parse/testdata/function/declaration/implicit_empty.carbon

@@ -13,8 +13,8 @@ fn foo[]();
 // CHECK:STDOUT:       {kind: 'IdentifierName', text: 'foo'},
 // CHECK:STDOUT:         {kind: 'ImplicitParamListStart', text: '['},
 // CHECK:STDOUT:       {kind: 'ImplicitParamList', text: ']', subtree_size: 2},
-// CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:       {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:         {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:       {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:     {kind: 'FunctionDecl', text: ';', subtree_size: 7},
 // CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
 // CHECK:STDOUT:   ]

+ 3 - 3
toolchain/parse/testdata/function/declaration/implicit_params.carbon

@@ -15,13 +15,13 @@ fn foo[a: i32, b: i32]();
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'a'},
 // CHECK:STDOUT:           {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:         {kind: 'ParamListComma', text: ','},
+// CHECK:STDOUT:         {kind: 'PatternListComma', text: ','},
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'b'},
 // CHECK:STDOUT:           {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'BindingPattern', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'ImplicitParamList', text: ']', subtree_size: 9},
-// CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:       {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:         {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:       {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:     {kind: 'FunctionDecl', text: ';', subtree_size: 14},
 // CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
 // CHECK:STDOUT:   ]

+ 3 - 3
toolchain/parse/testdata/function/declaration/params.carbon

@@ -11,15 +11,15 @@ fn foo(a: i32, b: i32);
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:       {kind: 'IdentifierName', text: 'foo'},
-// CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePatternStart', text: '('},
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'a'},
 // CHECK:STDOUT:           {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:         {kind: 'ParamListComma', text: ','},
+// CHECK:STDOUT:         {kind: 'PatternListComma', text: ','},
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'b'},
 // CHECK:STDOUT:           {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'ParamList', text: ')', subtree_size: 9},
+// CHECK:STDOUT:       {kind: 'TuplePattern', text: ')', subtree_size: 9},
 // CHECK:STDOUT:     {kind: 'FunctionDecl', text: ';', subtree_size: 12},
 // CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
 // CHECK:STDOUT:   ]

+ 2 - 2
toolchain/parse/testdata/function/declaration/with_return_type.carbon

@@ -11,8 +11,8 @@ fn foo() -> u32;
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:       {kind: 'IdentifierName', text: 'foo'},
-// CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:       {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:         {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:       {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:         {kind: 'UnsignedIntTypeLiteral', text: 'u32'},
 // CHECK:STDOUT:       {kind: 'ReturnType', text: '->', subtree_size: 2},
 // CHECK:STDOUT:     {kind: 'FunctionDecl', text: ';', subtree_size: 7},

+ 2 - 2
toolchain/parse/testdata/function/definition/basic.carbon

@@ -12,8 +12,8 @@ fn F() {
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'F'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', 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: ''},

+ 2 - 2
toolchain/parse/testdata/function/definition/fail_identifier_in_statements.carbon

@@ -18,8 +18,8 @@ fn F() {
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'F'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:       {kind: 'IdentifierNameExpr', text: 'bar'},
 // CHECK:STDOUT:     {kind: 'FunctionDefinition', text: '}', has_error: yes, subtree_size: 7},

+ 3 - 3
toolchain/parse/testdata/function/definition/with_params.carbon

@@ -13,15 +13,15 @@ fn foo(bar: i64, baz: i64) {
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'foo'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 'bar'},
 // CHECK:STDOUT:             {kind: 'IntTypeLiteral', text: 'i64'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:           {kind: 'ParamListComma', text: ','},
+// CHECK:STDOUT:           {kind: 'PatternListComma', text: ','},
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 'baz'},
 // CHECK:STDOUT:             {kind: 'IntTypeLiteral', text: 'i64'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 9},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 9},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 12},
 // CHECK:STDOUT:             {kind: 'IdentifierNameExpr', text: 'foo'},
 // CHECK:STDOUT:           {kind: 'CallExprStart', text: '(', subtree_size: 2},

+ 2 - 2
toolchain/parse/testdata/function/definition/with_return_type.carbon

@@ -13,8 +13,8 @@ fn foo() -> f64 {
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'foo'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:           {kind: 'FloatTypeLiteral', text: 'f64'},
 // CHECK:STDOUT:         {kind: 'ReturnType', text: '->', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 7},

+ 4 - 4
toolchain/parse/testdata/generics/deduced_params/empty.carbon

@@ -15,15 +15,15 @@ interface Bar[]() {}
 // CHECK:STDOUT:       {kind: 'IdentifierName', text: 'Foo'},
 // CHECK:STDOUT:         {kind: 'ImplicitParamListStart', text: '['},
 // CHECK:STDOUT:       {kind: 'ImplicitParamList', text: ']', subtree_size: 2},
-// CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:       {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:         {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:       {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:     {kind: 'ClassDecl', text: ';', subtree_size: 7},
 // CHECK:STDOUT:         {kind: 'InterfaceIntroducer', text: 'interface'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'Bar'},
 // CHECK:STDOUT:           {kind: 'ImplicitParamListStart', text: '['},
 // CHECK:STDOUT:         {kind: 'ImplicitParamList', text: ']', subtree_size: 2},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', 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: ''},

+ 4 - 4
toolchain/parse/testdata/generics/deduced_params/one.carbon

@@ -18,8 +18,8 @@ interface Bar[a: i32]() {}
 // CHECK:STDOUT:           {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'BindingPattern', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'ImplicitParamList', text: ']', subtree_size: 5},
-// CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:       {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:         {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:       {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:     {kind: 'ClassDecl', text: ';', subtree_size: 10},
 // CHECK:STDOUT:         {kind: 'InterfaceIntroducer', text: 'interface'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'Bar'},
@@ -28,8 +28,8 @@ interface Bar[a: i32]() {}
 // CHECK:STDOUT:             {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ImplicitParamList', text: ']', subtree_size: 5},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', 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: ''},

+ 6 - 6
toolchain/parse/testdata/generics/deduced_params/one_suffix_comma.carbon

@@ -17,10 +17,10 @@ interface Bar[a: i32,]() {}
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'a'},
 // CHECK:STDOUT:           {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:         {kind: 'ParamListComma', text: ','},
+// CHECK:STDOUT:         {kind: 'PatternListComma', text: ','},
 // CHECK:STDOUT:       {kind: 'ImplicitParamList', text: ']', subtree_size: 6},
-// CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:       {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:         {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:       {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:     {kind: 'ClassDecl', text: ';', subtree_size: 11},
 // CHECK:STDOUT:         {kind: 'InterfaceIntroducer', text: 'interface'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'Bar'},
@@ -28,10 +28,10 @@ interface Bar[a: i32,]() {}
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 'a'},
 // CHECK:STDOUT:             {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:           {kind: 'ParamListComma', text: ','},
+// CHECK:STDOUT:           {kind: 'PatternListComma', text: ','},
 // CHECK:STDOUT:         {kind: 'ImplicitParamList', text: ']', subtree_size: 6},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', 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: ''},

+ 14 - 14
toolchain/parse/testdata/generics/deduced_params/six.carbon

@@ -17,29 +17,29 @@ interface Bar[a: i32, b: i32, c: i32, d: i32, e: i32, f: i32]() {}
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'a'},
 // CHECK:STDOUT:           {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:         {kind: 'ParamListComma', text: ','},
+// CHECK:STDOUT:         {kind: 'PatternListComma', text: ','},
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'b'},
 // CHECK:STDOUT:           {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:         {kind: 'ParamListComma', text: ','},
+// CHECK:STDOUT:         {kind: 'PatternListComma', text: ','},
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'c'},
 // CHECK:STDOUT:           {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:         {kind: 'ParamListComma', text: ','},
+// CHECK:STDOUT:         {kind: 'PatternListComma', text: ','},
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'd'},
 // CHECK:STDOUT:           {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:         {kind: 'ParamListComma', text: ','},
+// CHECK:STDOUT:         {kind: 'PatternListComma', text: ','},
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'e'},
 // CHECK:STDOUT:           {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:         {kind: 'ParamListComma', text: ','},
+// CHECK:STDOUT:         {kind: 'PatternListComma', text: ','},
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'f'},
 // CHECK:STDOUT:           {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'BindingPattern', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'ImplicitParamList', text: ']', subtree_size: 25},
-// CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:       {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:         {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:       {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:     {kind: 'ClassDecl', text: ';', subtree_size: 30},
 // CHECK:STDOUT:         {kind: 'InterfaceIntroducer', text: 'interface'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'Bar'},
@@ -47,29 +47,29 @@ interface Bar[a: i32, b: i32, c: i32, d: i32, e: i32, f: i32]() {}
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 'a'},
 // CHECK:STDOUT:             {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:           {kind: 'ParamListComma', text: ','},
+// CHECK:STDOUT:           {kind: 'PatternListComma', text: ','},
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 'b'},
 // CHECK:STDOUT:             {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:           {kind: 'ParamListComma', text: ','},
+// CHECK:STDOUT:           {kind: 'PatternListComma', text: ','},
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 'c'},
 // CHECK:STDOUT:             {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:           {kind: 'ParamListComma', text: ','},
+// CHECK:STDOUT:           {kind: 'PatternListComma', text: ','},
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 'd'},
 // CHECK:STDOUT:             {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:           {kind: 'ParamListComma', text: ','},
+// CHECK:STDOUT:           {kind: 'PatternListComma', text: ','},
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 'e'},
 // CHECK:STDOUT:             {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:           {kind: 'ParamListComma', text: ','},
+// CHECK:STDOUT:           {kind: 'PatternListComma', text: ','},
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 'f'},
 // CHECK:STDOUT:             {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ImplicitParamList', text: ']', subtree_size: 25},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', 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: ''},

+ 6 - 6
toolchain/parse/testdata/generics/deduced_params/two.carbon

@@ -17,13 +17,13 @@ interface Bar[a: i32, b: i32]() {}
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'a'},
 // CHECK:STDOUT:           {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:         {kind: 'ParamListComma', text: ','},
+// CHECK:STDOUT:         {kind: 'PatternListComma', text: ','},
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'b'},
 // CHECK:STDOUT:           {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'BindingPattern', text: ':', subtree_size: 3},
 // CHECK:STDOUT:       {kind: 'ImplicitParamList', text: ']', subtree_size: 9},
-// CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:       {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:         {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:       {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:     {kind: 'ClassDecl', text: ';', subtree_size: 14},
 // CHECK:STDOUT:         {kind: 'InterfaceIntroducer', text: 'interface'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'Bar'},
@@ -31,13 +31,13 @@ interface Bar[a: i32, b: i32]() {}
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 'a'},
 // CHECK:STDOUT:             {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:           {kind: 'ParamListComma', text: ','},
+// CHECK:STDOUT:           {kind: 'PatternListComma', text: ','},
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 'b'},
 // CHECK:STDOUT:             {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ImplicitParamList', text: ']', subtree_size: 9},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', 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: ''},

+ 8 - 8
toolchain/parse/testdata/generics/deduced_params/two_suffix_comma.carbon

@@ -17,14 +17,14 @@ interface Bar[a: i32, b: i32,]() {}
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'a'},
 // CHECK:STDOUT:           {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:         {kind: 'ParamListComma', text: ','},
+// CHECK:STDOUT:         {kind: 'PatternListComma', text: ','},
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'b'},
 // CHECK:STDOUT:           {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:         {kind: 'ParamListComma', text: ','},
+// CHECK:STDOUT:         {kind: 'PatternListComma', text: ','},
 // CHECK:STDOUT:       {kind: 'ImplicitParamList', text: ']', subtree_size: 10},
-// CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:       {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:         {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:       {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:     {kind: 'ClassDecl', text: ';', subtree_size: 15},
 // CHECK:STDOUT:         {kind: 'InterfaceIntroducer', text: 'interface'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'Bar'},
@@ -32,14 +32,14 @@ interface Bar[a: i32, b: i32,]() {}
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 'a'},
 // CHECK:STDOUT:             {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:           {kind: 'ParamListComma', text: ','},
+// CHECK:STDOUT:           {kind: 'PatternListComma', text: ','},
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 'b'},
 // CHECK:STDOUT:             {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:           {kind: 'ParamListComma', text: ','},
+// CHECK:STDOUT:           {kind: 'PatternListComma', text: ','},
 // CHECK:STDOUT:         {kind: 'ImplicitParamList', text: ']', subtree_size: 10},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', 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: ''},

+ 2 - 2
toolchain/parse/testdata/generics/generic_params/basic.carbon

@@ -11,11 +11,11 @@ fn foo(a:! i32);
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:       {kind: 'IdentifierName', text: 'foo'},
-// CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePatternStart', text: '('},
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'a'},
 // CHECK:STDOUT:           {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'GenericBindingPattern', text: ':!', subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'ParamList', text: ')', subtree_size: 5},
+// CHECK:STDOUT:       {kind: 'TuplePattern', text: ')', subtree_size: 5},
 // CHECK:STDOUT:     {kind: 'FunctionDecl', text: ';', subtree_size: 8},
 // CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
 // CHECK:STDOUT:   ]

+ 2 - 2
toolchain/parse/testdata/generics/generic_params/template.carbon

@@ -11,12 +11,12 @@ fn foo(template a:! i32);
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:       {kind: 'IdentifierName', text: 'foo'},
-// CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePatternStart', text: '('},
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 'a'},
 // CHECK:STDOUT:             {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'GenericBindingPattern', text: ':!', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'Template', text: 'template', subtree_size: 4},
-// CHECK:STDOUT:       {kind: 'ParamList', text: ')', subtree_size: 6},
+// CHECK:STDOUT:       {kind: 'TuplePattern', text: ')', subtree_size: 6},
 // CHECK:STDOUT:     {kind: 'FunctionDecl', text: ';', subtree_size: 9},
 // CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
 // CHECK:STDOUT:   ]

+ 2 - 2
toolchain/parse/testdata/generics/generic_params/template_addr.carbon

@@ -11,13 +11,13 @@ fn foo(template addr a:! i32);
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:       {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:       {kind: 'IdentifierName', text: 'foo'},
-// CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePatternStart', text: '('},
 // CHECK:STDOUT:               {kind: 'IdentifierName', text: 'a'},
 // CHECK:STDOUT:               {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:             {kind: 'GenericBindingPattern', 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: 'ParamList', text: ')', subtree_size: 7},
+// CHECK:STDOUT:       {kind: 'TuplePattern', text: ')', subtree_size: 7},
 // CHECK:STDOUT:     {kind: 'FunctionDecl', text: ';', subtree_size: 10},
 // CHECK:STDOUT:     {kind: 'FileEnd', text: ''},
 // CHECK:STDOUT:   ]

+ 4 - 4
toolchain/parse/testdata/generics/interface/basic.carbon

@@ -22,11 +22,11 @@ interface Foo {
 // CHECK:STDOUT:             {kind: 'SelfTypeNameExpr', text: 'Self'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ImplicitParamList', text: ']', subtree_size: 5},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 'b'},
 // CHECK:STDOUT:             {kind: 'SelfTypeNameExpr', text: 'Self'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 5},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 5},
 // CHECK:STDOUT:           {kind: 'SelfTypeNameExpr', text: 'Self'},
 // CHECK:STDOUT:         {kind: 'ReturnType', text: '->', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDecl', text: ';', subtree_size: 15},
@@ -37,11 +37,11 @@ interface Foo {
 // CHECK:STDOUT:             {kind: 'IdentifierNameExpr', text: 'foo'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ImplicitParamList', text: ']', subtree_size: 5},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 'b'},
 // CHECK:STDOUT:             {kind: 'SelfTypeNameExpr', text: 'Self'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 5},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 5},
 // CHECK:STDOUT:           {kind: 'SelfTypeNameExpr', text: 'Self'},
 // CHECK:STDOUT:         {kind: 'ReturnType', text: '->', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDecl', text: ';', subtree_size: 15},

+ 4 - 4
toolchain/parse/testdata/generics/interface/default_fn.carbon

@@ -26,11 +26,11 @@ interface Foo {
 // CHECK:STDOUT:             {kind: 'SelfTypeNameExpr', text: 'Self'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ImplicitParamList', text: ']', subtree_size: 5},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 's'},
 // CHECK:STDOUT:             {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 5},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 5},
 // CHECK:STDOUT:           {kind: 'SelfTypeNameExpr', text: 'Self'},
 // CHECK:STDOUT:         {kind: 'ReturnType', text: '->', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDecl', text: ';', subtree_size: 15},
@@ -42,8 +42,8 @@ interface Foo {
 // CHECK:STDOUT:               {kind: 'SelfTypeNameExpr', text: 'Self'},
 // CHECK:STDOUT:             {kind: 'BindingPattern', text: ':', subtree_size: 3},
 // CHECK:STDOUT:           {kind: 'ImplicitParamList', text: ']', subtree_size: 5},
-// CHECK:STDOUT:             {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:           {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:             {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:           {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:             {kind: 'SelfTypeNameExpr', text: 'Self'},
 // CHECK:STDOUT:           {kind: 'ReturnType', text: '->', subtree_size: 2},
 // CHECK:STDOUT:         {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 13},

+ 4 - 4
toolchain/parse/testdata/generics/interface/fail_self_param_syntax.carbon

@@ -29,11 +29,11 @@ interface Foo {
 // CHECK:STDOUT:             {kind: 'InvalidParse', text: 'Self', has_error: yes},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: 'me', has_error: yes, subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ImplicitParamList', text: ']', has_error: yes, subtree_size: 5},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 'b'},
 // CHECK:STDOUT:             {kind: 'SelfTypeNameExpr', text: 'Self'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 5},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 5},
 // CHECK:STDOUT:           {kind: 'SelfTypeNameExpr', text: 'Self'},
 // CHECK:STDOUT:         {kind: 'ReturnType', text: '->', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDecl', text: ';', subtree_size: 15},
@@ -44,11 +44,11 @@ interface Foo {
 // CHECK:STDOUT:             {kind: 'InvalidParse', text: 'Self', has_error: yes},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: 'Self', has_error: yes, subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ImplicitParamList', text: ']', has_error: yes, subtree_size: 5},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 'b'},
 // CHECK:STDOUT:             {kind: 'SelfTypeNameExpr', text: 'Self'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 5},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 5},
 // CHECK:STDOUT:           {kind: 'SelfTypeNameExpr', text: 'Self'},
 // CHECK:STDOUT:         {kind: 'ReturnType', text: '->', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDecl', text: ';', subtree_size: 15},

+ 4 - 4
toolchain/parse/testdata/generics/interface/final_fn.carbon

@@ -24,11 +24,11 @@ interface Order {
 // CHECK:STDOUT:             {kind: 'SelfTypeNameExpr', text: 'Self'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'ImplicitParamList', text: ']', subtree_size: 5},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 'right'},
 // CHECK:STDOUT:             {kind: 'SelfTypeNameExpr', text: 'Self'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 5},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 5},
 // CHECK:STDOUT:           {kind: 'BoolTypeLiteral', text: 'bool'},
 // CHECK:STDOUT:         {kind: 'ReturnType', text: '->', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDecl', text: ';', subtree_size: 15},
@@ -40,11 +40,11 @@ interface Order {
 // CHECK:STDOUT:               {kind: 'SelfTypeNameExpr', text: 'Self'},
 // CHECK:STDOUT:             {kind: 'BindingPattern', text: ':', subtree_size: 3},
 // CHECK:STDOUT:           {kind: 'ImplicitParamList', text: ']', subtree_size: 5},
-// CHECK:STDOUT:             {kind: 'ParamListStart', text: '('},
+// CHECK:STDOUT:             {kind: 'TuplePatternStart', text: '('},
 // CHECK:STDOUT:               {kind: 'IdentifierName', text: 'right'},
 // CHECK:STDOUT:               {kind: 'SelfTypeNameExpr', text: 'Self'},
 // CHECK:STDOUT:             {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:           {kind: 'ParamList', text: ')', subtree_size: 5},
+// CHECK:STDOUT:           {kind: 'TuplePattern', text: ')', subtree_size: 5},
 // CHECK:STDOUT:             {kind: 'BoolTypeLiteral', text: 'bool'},
 // CHECK:STDOUT:           {kind: 'ReturnType', text: '->', subtree_size: 2},
 // CHECK:STDOUT:         {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 16},

+ 2 - 2
toolchain/parse/testdata/generics/interface/final_member_definition.carbon

@@ -24,11 +24,11 @@ interface Foo {
 // CHECK:STDOUT:               {kind: 'SelfTypeNameExpr', text: 'Self'},
 // CHECK:STDOUT:             {kind: 'BindingPattern', text: ':', subtree_size: 3},
 // CHECK:STDOUT:           {kind: 'ImplicitParamList', text: ']', subtree_size: 5},
-// CHECK:STDOUT:             {kind: 'ParamListStart', text: '('},
+// CHECK:STDOUT:             {kind: 'TuplePatternStart', text: '('},
 // CHECK:STDOUT:               {kind: 'IdentifierName', text: 'b'},
 // CHECK:STDOUT:               {kind: 'SelfTypeNameExpr', text: 'Self'},
 // CHECK:STDOUT:             {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:           {kind: 'ParamList', text: ')', subtree_size: 5},
+// CHECK:STDOUT:           {kind: 'TuplePattern', text: ')', subtree_size: 5},
 // CHECK:STDOUT:             {kind: 'SelfTypeNameExpr', text: 'Self'},
 // CHECK:STDOUT:           {kind: 'ReturnType', text: '->', subtree_size: 2},
 // CHECK:STDOUT:         {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 16},

+ 2 - 2
toolchain/parse/testdata/generics/interface/non_instance_fn.carbon

@@ -16,8 +16,8 @@ interface Foo {
 // CHECK:STDOUT:       {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'FooFactory'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:           {kind: 'SelfTypeNameExpr', text: 'Self'},
 // CHECK:STDOUT:         {kind: 'ReturnType', text: '->', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDecl', text: ';', subtree_size: 7},

+ 4 - 4
toolchain/parse/testdata/generics/interface/self_pointer.carbon

@@ -24,11 +24,11 @@ interface Foo {
 // CHECK:STDOUT:             {kind: 'BindingPattern', text: ':', subtree_size: 4},
 // CHECK:STDOUT:           {kind: 'Address', text: 'addr', subtree_size: 5},
 // CHECK:STDOUT:         {kind: 'ImplicitParamList', text: ']', subtree_size: 7},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 'b'},
 // CHECK:STDOUT:             {kind: 'SelfTypeNameExpr', text: 'Self'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 5},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 5},
 // CHECK:STDOUT:           {kind: 'SelfTypeNameExpr', text: 'Self'},
 // CHECK:STDOUT:         {kind: 'ReturnType', text: '->', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDecl', text: ';', subtree_size: 17},
@@ -41,11 +41,11 @@ interface Foo {
 // CHECK:STDOUT:             {kind: 'BindingPattern', text: ':', subtree_size: 4},
 // CHECK:STDOUT:           {kind: 'Address', text: 'addr', subtree_size: 5},
 // CHECK:STDOUT:         {kind: 'ImplicitParamList', text: ']', subtree_size: 7},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 'b'},
 // CHECK:STDOUT:             {kind: 'SelfTypeNameExpr', text: 'Self'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 5},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 5},
 // CHECK:STDOUT:           {kind: 'SelfTypeNameExpr', text: 'Self'},
 // CHECK:STDOUT:         {kind: 'ReturnType', text: '->', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDecl', text: ';', subtree_size: 17},

+ 2 - 2
toolchain/parse/testdata/generics/named_constraint/basic.carbon

@@ -16,8 +16,8 @@ constraint Foo {
 // CHECK:STDOUT:       {kind: 'NamedConstraintDefinitionStart', text: '{', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'Baz'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDecl', text: ';', subtree_size: 5},
 // CHECK:STDOUT:     {kind: 'NamedConstraintDefinition', text: '}', subtree_size: 9},
 // CHECK:STDOUT:     {kind: 'FileEnd', text: ''},

+ 2 - 2
toolchain/parse/testdata/generics/named_constraint/defined_method.carbon

@@ -21,11 +21,11 @@ constraint Foo {
 // CHECK:STDOUT:               {kind: 'SelfTypeNameExpr', text: 'Self'},
 // CHECK:STDOUT:             {kind: 'BindingPattern', text: ':', subtree_size: 3},
 // CHECK:STDOUT:           {kind: 'ImplicitParamList', text: ']', subtree_size: 5},
-// CHECK:STDOUT:             {kind: 'ParamListStart', text: '('},
+// CHECK:STDOUT:             {kind: 'TuplePatternStart', text: '('},
 // CHECK:STDOUT:               {kind: 'IdentifierName', text: 'b'},
 // CHECK:STDOUT:               {kind: 'SelfTypeNameExpr', text: 'Self'},
 // CHECK:STDOUT:             {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:           {kind: 'ParamList', text: ')', subtree_size: 5},
+// CHECK:STDOUT:           {kind: 'TuplePattern', text: ')', subtree_size: 5},
 // CHECK:STDOUT:             {kind: 'SelfTypeNameExpr', text: 'Self'},
 // CHECK:STDOUT:           {kind: 'ReturnType', text: '->', subtree_size: 2},
 // CHECK:STDOUT:         {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 15},

+ 4 - 4
toolchain/parse/testdata/generics/params/empty.carbon

@@ -13,13 +13,13 @@ interface Bar() {}
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:       {kind: 'ClassIntroducer', text: 'class'},
 // CHECK:STDOUT:       {kind: 'IdentifierName', text: 'Foo'},
-// CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:       {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:         {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:       {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:     {kind: 'ClassDecl', text: ';', subtree_size: 5},
 // CHECK:STDOUT:         {kind: 'InterfaceIntroducer', text: 'interface'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'Bar'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', 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: ''},

+ 4 - 4
toolchain/parse/testdata/generics/params/one.carbon

@@ -13,19 +13,19 @@ interface Bar(a: i32) {}
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:       {kind: 'ClassIntroducer', text: 'class'},
 // CHECK:STDOUT:       {kind: 'IdentifierName', text: 'Foo'},
-// CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePatternStart', text: '('},
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'a'},
 // CHECK:STDOUT:           {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'ParamList', text: ')', subtree_size: 5},
+// CHECK:STDOUT:       {kind: 'TuplePattern', text: ')', subtree_size: 5},
 // CHECK:STDOUT:     {kind: 'ClassDecl', text: ';', subtree_size: 8},
 // CHECK:STDOUT:         {kind: 'InterfaceIntroducer', text: 'interface'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'Bar'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 'a'},
 // CHECK:STDOUT:             {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 5},
+// CHECK:STDOUT:         {kind: 'TuplePattern', 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: ''},

+ 6 - 6
toolchain/parse/testdata/generics/params/one_suffix_comma.carbon

@@ -13,21 +13,21 @@ interface Bar(a: i32,) {}
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:       {kind: 'ClassIntroducer', text: 'class'},
 // CHECK:STDOUT:       {kind: 'IdentifierName', text: 'Foo'},
-// CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePatternStart', text: '('},
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'a'},
 // CHECK:STDOUT:           {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:         {kind: 'ParamListComma', text: ','},
-// CHECK:STDOUT:       {kind: 'ParamList', text: ')', subtree_size: 6},
+// CHECK:STDOUT:         {kind: 'PatternListComma', text: ','},
+// CHECK:STDOUT:       {kind: 'TuplePattern', text: ')', subtree_size: 6},
 // CHECK:STDOUT:     {kind: 'ClassDecl', text: ';', subtree_size: 9},
 // CHECK:STDOUT:         {kind: 'InterfaceIntroducer', text: 'interface'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'Bar'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 'a'},
 // CHECK:STDOUT:             {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:           {kind: 'ParamListComma', text: ','},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 6},
+// CHECK:STDOUT:           {kind: 'PatternListComma', text: ','},
+// CHECK:STDOUT:         {kind: 'TuplePattern', 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: ''},

+ 14 - 14
toolchain/parse/testdata/generics/params/six.carbon

@@ -13,59 +13,59 @@ interface Bar(a: i32, b: i32, c: i32, d: i32, e: i32, f: i32) {}
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:       {kind: 'ClassIntroducer', text: 'class'},
 // CHECK:STDOUT:       {kind: 'IdentifierName', text: 'Foo'},
-// CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePatternStart', text: '('},
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'a'},
 // CHECK:STDOUT:           {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:         {kind: 'ParamListComma', text: ','},
+// CHECK:STDOUT:         {kind: 'PatternListComma', text: ','},
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'b'},
 // CHECK:STDOUT:           {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:         {kind: 'ParamListComma', text: ','},
+// CHECK:STDOUT:         {kind: 'PatternListComma', text: ','},
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'c'},
 // CHECK:STDOUT:           {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:         {kind: 'ParamListComma', text: ','},
+// CHECK:STDOUT:         {kind: 'PatternListComma', text: ','},
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'd'},
 // CHECK:STDOUT:           {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:         {kind: 'ParamListComma', text: ','},
+// CHECK:STDOUT:         {kind: 'PatternListComma', text: ','},
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'e'},
 // CHECK:STDOUT:           {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:         {kind: 'ParamListComma', text: ','},
+// CHECK:STDOUT:         {kind: 'PatternListComma', text: ','},
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'f'},
 // CHECK:STDOUT:           {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'ParamList', text: ')', subtree_size: 25},
+// CHECK:STDOUT:       {kind: 'TuplePattern', text: ')', subtree_size: 25},
 // CHECK:STDOUT:     {kind: 'ClassDecl', text: ';', subtree_size: 28},
 // CHECK:STDOUT:         {kind: 'InterfaceIntroducer', text: 'interface'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'Bar'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 'a'},
 // CHECK:STDOUT:             {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:           {kind: 'ParamListComma', text: ','},
+// CHECK:STDOUT:           {kind: 'PatternListComma', text: ','},
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 'b'},
 // CHECK:STDOUT:             {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:           {kind: 'ParamListComma', text: ','},
+// CHECK:STDOUT:           {kind: 'PatternListComma', text: ','},
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 'c'},
 // CHECK:STDOUT:             {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:           {kind: 'ParamListComma', text: ','},
+// CHECK:STDOUT:           {kind: 'PatternListComma', text: ','},
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 'd'},
 // CHECK:STDOUT:             {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:           {kind: 'ParamListComma', text: ','},
+// CHECK:STDOUT:           {kind: 'PatternListComma', text: ','},
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 'e'},
 // CHECK:STDOUT:             {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:           {kind: 'ParamListComma', text: ','},
+// CHECK:STDOUT:           {kind: 'PatternListComma', text: ','},
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 'f'},
 // CHECK:STDOUT:             {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 25},
+// CHECK:STDOUT:         {kind: 'TuplePattern', 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: ''},

+ 6 - 6
toolchain/parse/testdata/generics/params/two.carbon

@@ -13,27 +13,27 @@ interface Bar(a: i32, b: i32) {}
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:       {kind: 'ClassIntroducer', text: 'class'},
 // CHECK:STDOUT:       {kind: 'IdentifierName', text: 'Foo'},
-// CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePatternStart', text: '('},
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'a'},
 // CHECK:STDOUT:           {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:         {kind: 'ParamListComma', text: ','},
+// CHECK:STDOUT:         {kind: 'PatternListComma', text: ','},
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'b'},
 // CHECK:STDOUT:           {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:       {kind: 'ParamList', text: ')', subtree_size: 9},
+// CHECK:STDOUT:       {kind: 'TuplePattern', text: ')', subtree_size: 9},
 // CHECK:STDOUT:     {kind: 'ClassDecl', text: ';', subtree_size: 12},
 // CHECK:STDOUT:         {kind: 'InterfaceIntroducer', text: 'interface'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'Bar'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 'a'},
 // CHECK:STDOUT:             {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:           {kind: 'ParamListComma', text: ','},
+// CHECK:STDOUT:           {kind: 'PatternListComma', text: ','},
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 'b'},
 // CHECK:STDOUT:             {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 9},
+// CHECK:STDOUT:         {kind: 'TuplePattern', 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: ''},

+ 8 - 8
toolchain/parse/testdata/generics/params/two_suffix_comma.carbon

@@ -13,29 +13,29 @@ interface Bar(a: i32, b: i32,) {}
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:       {kind: 'ClassIntroducer', text: 'class'},
 // CHECK:STDOUT:       {kind: 'IdentifierName', text: 'Foo'},
-// CHECK:STDOUT:         {kind: 'ParamListStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePatternStart', text: '('},
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'a'},
 // CHECK:STDOUT:           {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:         {kind: 'ParamListComma', text: ','},
+// CHECK:STDOUT:         {kind: 'PatternListComma', text: ','},
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'b'},
 // CHECK:STDOUT:           {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:         {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:         {kind: 'ParamListComma', text: ','},
-// CHECK:STDOUT:       {kind: 'ParamList', text: ')', subtree_size: 10},
+// CHECK:STDOUT:         {kind: 'PatternListComma', text: ','},
+// CHECK:STDOUT:       {kind: 'TuplePattern', text: ')', subtree_size: 10},
 // CHECK:STDOUT:     {kind: 'ClassDecl', text: ';', subtree_size: 13},
 // CHECK:STDOUT:         {kind: 'InterfaceIntroducer', text: 'interface'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'Bar'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 'a'},
 // CHECK:STDOUT:             {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:           {kind: 'ParamListComma', text: ','},
+// CHECK:STDOUT:           {kind: 'PatternListComma', text: ','},
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 'b'},
 // CHECK:STDOUT:             {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:           {kind: 'ParamListComma', text: ','},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 10},
+// CHECK:STDOUT:           {kind: 'PatternListComma', text: ','},
+// CHECK:STDOUT:         {kind: 'TuplePattern', 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: ''},

+ 2 - 2
toolchain/parse/testdata/if/basic.carbon

@@ -19,8 +19,8 @@ fn F() {
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'F'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:           {kind: 'IfConditionStart', text: '('},
 // CHECK:STDOUT:           {kind: 'IdentifierNameExpr', text: 'a'},

+ 2 - 2
toolchain/parse/testdata/if/else.carbon

@@ -24,8 +24,8 @@ fn F() {
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'F'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:           {kind: 'IfConditionStart', text: '('},
 // CHECK:STDOUT:           {kind: 'IdentifierNameExpr', text: 'a'},

+ 2 - 2
toolchain/parse/testdata/if/fail_else_unbraced.carbon

@@ -34,8 +34,8 @@ fn F() {
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'F'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:           {kind: 'IfConditionStart', text: '('},
 // CHECK:STDOUT:           {kind: 'IdentifierNameExpr', text: 'a'},

+ 2 - 2
toolchain/parse/testdata/if/fail_errors.carbon

@@ -31,8 +31,8 @@ fn F() {
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'F'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:           {kind: 'IfConditionStart', text: 'if', has_error: yes},
 // CHECK:STDOUT:           {kind: 'IdentifierNameExpr', text: 'a'},

+ 2 - 2
toolchain/parse/testdata/if/fail_missing_cond.carbon

@@ -17,8 +17,8 @@ fn F() {
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'F'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', 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},

+ 2 - 2
toolchain/parse/testdata/if/fail_square_brackets.carbon

@@ -22,8 +22,8 @@ fn F() {
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'F'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:           {kind: 'IfConditionStart', text: 'if', has_error: yes},
 // CHECK:STDOUT:               {kind: 'ArrayExprStart', text: '['},

+ 2 - 2
toolchain/parse/testdata/if/fail_unbraced.carbon

@@ -26,8 +26,8 @@ fn F() {
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'F'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:           {kind: 'IfConditionStart', text: '('},
 // CHECK:STDOUT:           {kind: 'IdentifierNameExpr', text: 'a'},

+ 4 - 4
toolchain/parse/testdata/if_expr/basic.carbon

@@ -13,19 +13,19 @@ fn F(b: bool, x: i32, y: i32) -> bool {
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'F'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 'b'},
 // CHECK:STDOUT:             {kind: 'BoolTypeLiteral', text: 'bool'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:           {kind: 'ParamListComma', text: ','},
+// CHECK:STDOUT:           {kind: 'PatternListComma', text: ','},
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 'x'},
 // CHECK:STDOUT:             {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:           {kind: 'ParamListComma', text: ','},
+// CHECK:STDOUT:           {kind: 'PatternListComma', text: ','},
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 'y'},
 // CHECK:STDOUT:             {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 13},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 13},
 // CHECK:STDOUT:           {kind: 'BoolTypeLiteral', text: 'bool'},
 // CHECK:STDOUT:         {kind: 'ReturnType', text: '->', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 18},

+ 2 - 2
toolchain/parse/testdata/if_expr/fail_condition_missing.carbon

@@ -16,8 +16,8 @@ fn F() {
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'F'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:         {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'n'},

+ 2 - 2
toolchain/parse/testdata/if_expr/fail_else_expr_missing.carbon

@@ -16,8 +16,8 @@ fn F() {
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'F'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:         {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'n'},

+ 2 - 2
toolchain/parse/testdata/if_expr/fail_else_missing.carbon

@@ -16,8 +16,8 @@ fn F() {
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'F'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:         {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'n'},

+ 2 - 2
toolchain/parse/testdata/if_expr/fail_then_expr_missing.carbon

@@ -16,8 +16,8 @@ fn F() {
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'F'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:         {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'n'},

+ 2 - 2
toolchain/parse/testdata/if_expr/fail_then_missing.carbon

@@ -16,8 +16,8 @@ fn F() {
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'F'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:         {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'n'},

+ 2 - 2
toolchain/parse/testdata/if_expr/fail_top_level_if.carbon

@@ -22,8 +22,8 @@ fn F() {
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'F'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:           {kind: 'IfConditionStart', text: 'if', has_error: yes},
 // CHECK:STDOUT:           {kind: 'BoolLiteralTrue', text: 'true'},

+ 2 - 2
toolchain/parse/testdata/if_expr/in_type.carbon

@@ -20,8 +20,8 @@ fn F() -> if true then i32 else i32* {
 // CHECK:STDOUT:     {kind: 'VariableDecl', text: ';', subtree_size: 5},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'F'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:               {kind: 'BoolLiteralTrue', text: 'true'},
 // CHECK:STDOUT:             {kind: 'IfExprIf', text: 'if', subtree_size: 2},
 // CHECK:STDOUT:               {kind: 'IntTypeLiteral', text: 'i32'},

+ 2 - 2
toolchain/parse/testdata/if_expr/precedence.carbon

@@ -13,11 +13,11 @@ fn F(b: bool) -> bool {
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'F'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 'b'},
 // CHECK:STDOUT:             {kind: 'BoolTypeLiteral', text: 'bool'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 5},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 5},
 // CHECK:STDOUT:           {kind: 'BoolTypeLiteral', text: 'bool'},
 // CHECK:STDOUT:         {kind: 'ReturnType', text: '->', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 10},

+ 2 - 2
toolchain/parse/testdata/let/fail_missing_value.carbon

@@ -26,8 +26,8 @@ fn F() {
 // CHECK:STDOUT:     {kind: 'LetDecl', text: ';', has_error: yes, subtree_size: 5},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'F'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:         {kind: 'LetIntroducer', text: 'let'},
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'b'},

+ 2 - 2
toolchain/parse/testdata/let/let.carbon

@@ -21,8 +21,8 @@ fn F() {
 // CHECK:STDOUT:     {kind: 'LetDecl', text: ';', subtree_size: 7},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'F'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:         {kind: 'LetIntroducer', text: 'let'},
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 's'},

+ 5 - 5
toolchain/parse/testdata/let/let_tuple.carbon

@@ -13,19 +13,19 @@ fn F() {
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'F'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:         {kind: 'LetIntroducer', text: 'let'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 's'},
 // CHECK:STDOUT:             {kind: 'StringTypeLiteral', text: 'String'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:           {kind: 'ParamListComma', text: ','},
+// CHECK:STDOUT:           {kind: 'PatternListComma', text: ','},
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 'i'},
 // CHECK:STDOUT:             {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 9},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 9},
 // CHECK:STDOUT:         {kind: 'LetInitializer', text: '='},
 // CHECK:STDOUT:           {kind: 'ExprOpenParen', text: '('},
 // CHECK:STDOUT:           {kind: 'StringLiteral', text: '"hello"'},

+ 2 - 2
toolchain/parse/testdata/namespace/basic.carbon

@@ -18,8 +18,8 @@ fn Bar() {
 // CHECK:STDOUT:     {kind: 'Namespace', text: ';', subtree_size: 3},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'Bar'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:               {kind: 'IdentifierNameExpr', text: 'Foo'},
 // CHECK:STDOUT:               {kind: 'IdentifierName', text: 'Baz'},

+ 2 - 2
toolchain/parse/testdata/namespace/nested.carbon

@@ -28,8 +28,8 @@ fn Foo.Bar.Baz() {
 // CHECK:STDOUT:           {kind: 'QualifiedDecl', text: '.', subtree_size: 3},
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'Baz'},
 // CHECK:STDOUT:         {kind: 'QualifiedDecl', text: '.', subtree_size: 5},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 9},
 // CHECK:STDOUT:                 {kind: 'IdentifierNameExpr', text: 'Foo'},
 // CHECK:STDOUT:                 {kind: 'IdentifierName', text: 'Bar'},

+ 2 - 2
toolchain/parse/testdata/operators/assign.carbon

@@ -27,8 +27,8 @@ fn F() {
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'F'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:         {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'a'},

+ 2 - 2
toolchain/parse/testdata/operators/associative.carbon

@@ -13,8 +13,8 @@ fn F() {
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'F'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:                 {kind: 'IdentifierNameExpr', text: 'a'},
 // CHECK:STDOUT:               {kind: 'ShortCircuitOperand', text: 'and', subtree_size: 2},

+ 2 - 2
toolchain/parse/testdata/operators/fail_chained_assign.carbon

@@ -20,8 +20,8 @@ fn F() {
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'F'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:         {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'a'},

+ 2 - 2
toolchain/parse/testdata/operators/fail_postincrement.carbon

@@ -22,8 +22,8 @@ fn F() {
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'F'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:         {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'n'},

+ 2 - 2
toolchain/parse/testdata/operators/fail_precedence_and_or.carbon

@@ -16,8 +16,8 @@ fn F() {
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'F'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:                 {kind: 'IdentifierNameExpr', text: 'a'},
 // CHECK:STDOUT:               {kind: 'ShortCircuitOperand', text: 'and', subtree_size: 2},

+ 2 - 2
toolchain/parse/testdata/operators/fail_precedence_as.carbon

@@ -27,11 +27,11 @@ fn F(n: i32) {
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'F'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
 // CHECK:STDOUT:             {kind: 'IdentifierName', text: 'n'},
 // CHECK:STDOUT:             {kind: 'IntTypeLiteral', text: 'i32'},
 // CHECK:STDOUT:           {kind: 'BindingPattern', text: ':', subtree_size: 3},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 5},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 5},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 8},
 // CHECK:STDOUT:             {kind: 'BoolLiteralTrue', text: 'true'},
 // CHECK:STDOUT:           {kind: 'PrefixOperator', text: 'not', subtree_size: 2},

+ 2 - 2
toolchain/parse/testdata/operators/fail_precedence_assign.carbon

@@ -34,8 +34,8 @@ fn F() {
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'F'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:         {kind: 'VariableIntroducer', text: 'var'},
 // CHECK:STDOUT:           {kind: 'IdentifierName', text: 'a'},

+ 2 - 2
toolchain/parse/testdata/operators/fail_precedence_or_and.carbon

@@ -16,8 +16,8 @@ fn F() {
 // CHECK:STDOUT:     {kind: 'FileStart', text: ''},
 // CHECK:STDOUT:         {kind: 'FunctionIntroducer', text: 'fn'},
 // CHECK:STDOUT:         {kind: 'IdentifierName', text: 'F'},
-// CHECK:STDOUT:           {kind: 'ParamListStart', text: '('},
-// CHECK:STDOUT:         {kind: 'ParamList', text: ')', subtree_size: 2},
+// CHECK:STDOUT:           {kind: 'TuplePatternStart', text: '('},
+// CHECK:STDOUT:         {kind: 'TuplePattern', text: ')', subtree_size: 2},
 // CHECK:STDOUT:       {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5},
 // CHECK:STDOUT:                 {kind: 'IdentifierNameExpr', text: 'a'},
 // CHECK:STDOUT:               {kind: 'ShortCircuitOperand', text: 'or', subtree_size: 2},

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