From 6429c1655cf057e8bb5c9cb4ca7b35876fa97a29 Mon Sep 17 00:00:00 2001 From: Geoff Romer Date: Fri, 31 Jul 2026 09:44:18 -0700 Subject: [PATCH] Make the tree structure more explicit in parse dumps (#7591) It's hard to track 2-space indent levels across large vertical gaps, and it can be hard to suppress the instinct to read the dump as if it were preorder. This change introduces a new dump mode that addresses both problems by using box-drawing characters to explicitly represent the parent-child edges of the tree. This new mode is the default, but the old behavior remains available with `--parse-dump-format=yaml-postorder`. --- toolchain/docs/driver.md | 2 +- toolchain/driver/compile_driver.cpp | 2 +- toolchain/driver/compile_options.cpp | 27 +- toolchain/driver/compile_options.h | 3 +- toolchain/driver/driver_test.cpp | 3 +- toolchain/driver/testdata/stdin.carbon | 2 +- toolchain/parse/coverage_test.cpp | 4 +- toolchain/parse/parse.cpp | 14 +- toolchain/parse/parse.h | 9 +- toolchain/parse/testdata/alias/basic.carbon | 95 +- .../parse/testdata/alias/fail_syntax.carbon | 111 +- toolchain/parse/testdata/array/basic.carbon | 31 +- .../parse/testdata/array/fail_syntax.carbon | 248 ++- toolchain/parse/testdata/auto/let.carbon | 23 +- .../parse/testdata/auto/match_case.carbon | 83 +- toolchain/parse/testdata/auto/return.carbon | 29 +- toolchain/parse/testdata/auto/var.carbon | 25 +- toolchain/parse/testdata/basics/empty.carbon | 7 +- .../parse/testdata/basics/empty_decl.carbon | 9 +- .../basics/fail_bracket_recovery.carbon | 123 +- .../basics/fail_invalid_designators.carbon | 35 +- .../basics/fail_modifiers_before_semi.carbon | 15 +- .../basics/fail_no_intro_with_semi.carbon | 11 +- .../basics/fail_no_intro_without_semi.carbon | 11 +- .../basics/fail_paren_match_regression.carbon | 29 +- .../testdata/basics/form_literals.carbon | 188 +- .../testdata/basics/function_call.carbon | 57 +- .../parse/testdata/basics/multifile.carbon | 38 +- .../basics/multiline_string_recovery.carbon | 55 +- .../testdata/basics/multiline_token.carbon | 15 +- toolchain/parse/testdata/basics/parens.carbon | 53 +- .../testdata/basics/type_literals.carbon | 79 +- .../testdata/basics/value_literals.carbon | 219 ++- toolchain/parse/testdata/choice/basic.carbon | 29 +- ...il_alternative_with_implicit_params.carbon | 17 +- ...fail_invalid_alternative_identifier.carbon | 17 +- .../choice/fail_invalid_braces.carbon | 19 +- .../choice/fail_missing_definition.carbon | 15 +- ...il_missing_definition_parameterized.carbon | 27 +- .../fail_qualified_alternative_name.carbon | 17 +- toolchain/parse/testdata/choice/local.carbon | 33 +- .../parse/testdata/choice/modifiers.carbon | 31 +- .../testdata/choice/parameterized.carbon | 47 +- toolchain/parse/testdata/class/adapt.carbon | 194 +- toolchain/parse/testdata/class/base.carbon | 61 +- .../testdata/class/base_misplaced.carbon | 45 +- toolchain/parse/testdata/class/basic.carbon | 25 +- .../parse/testdata/class/fail_base.carbon | 69 +- .../testdata/class/fail_modifiers.carbon | 53 +- .../parse/testdata/class/fail_var_name.carbon | 119 +- .../testdata/class/fn_definitions.carbon | 107 +- .../parse/testdata/class/introducer.carbon | 75 +- toolchain/parse/testdata/class/local.carbon | 65 +- .../class/mismatched_introducer.carbon | 37 +- toolchain/parse/testdata/class/var.carbon | 63 +- .../parse/testdata/dump_format/pretty.carbon | 36 + .../dump_format/yaml_postorder.carbon | 37 + .../testdata/dump_format/yaml_preorder.carbon | 37 + .../for/fail_colon_instead_of_in.carbon | 51 +- .../testdata/for/fail_missing_cond.carbon | 41 +- .../parse/testdata/for/fail_missing_in.carbon | 51 +- .../testdata/for/fail_returned_var.carbon | 43 +- .../testdata/for/fail_square_brackets.carbon | 39 +- toolchain/parse/testdata/for/nested.carbon | 77 +- toolchain/parse/testdata/for/pattern.carbon | 169 +- toolchain/parse/testdata/function/call.carbon | 245 ++- .../testdata/function/decl_statement.carbon | 288 ++- .../testdata/function/declaration.carbon | 611 ++++--- .../parse/testdata/function/definition.carbon | 296 ++-- .../testdata/function/eval_musteval.carbon | 59 +- .../parse/testdata/function/extern.carbon | 151 +- .../function/fail_template_form_param.carbon | 25 +- .../parse/testdata/function/terse.carbon | 59 +- .../generics/deduced_params/empty.carbon | 37 +- .../generics/deduced_params/no_parens.carbon | 101 +- .../generics/deduced_params/one.carbon | 53 +- .../deduced_params/one_suffix_comma.carbon | 57 +- .../generics/deduced_params/six.carbon | 153 +- .../generics/deduced_params/two.carbon | 73 +- .../deduced_params/two_suffix_comma.carbon | 77 +- .../generics/generic_params/basic.carbon | 25 +- .../fail_template_no_param.carbon | 75 +- .../generics/generic_params/template.carbon | 92 +- .../parse/testdata/generics/impl/basic.carbon | 47 +- .../parse/testdata/generics/impl/class.carbon | 79 +- .../testdata/generics/impl/declaration.carbon | 17 +- .../testdata/generics/impl/empty_body.carbon | 19 +- .../testdata/generics/impl/fail_impl.carbon | 177 +- .../impl/fail_out_of_line_member.carbon | 93 +- .../generics/impl/final_match_first.carbon | 123 +- .../testdata/generics/impl/forall.carbon | 73 +- .../testdata/generics/impl/match_first.carbon | 162 +- .../interface/associated_constants.carbon | 130 +- .../testdata/generics/interface/basic.carbon | 75 +- .../generics/interface/declaration.carbon | 13 +- .../generics/interface/default_fn.carbon | 83 +- .../generics/interface/empty_body.carbon | 15 +- .../fail_associated_constants.carbon | 229 ++- .../interface/fail_missing_name.carbon | 13 +- .../interface/fail_missing_open_curly.carbon | 25 +- .../interface/fail_self_param_syntax.carbon | 71 +- .../generics/interface/final_fn.carbon | 91 +- .../interface/final_member_definition.carbon | 59 +- .../generics/interface/non_instance_fn.carbon | 29 +- .../generics/interface/require.carbon | 319 ++-- .../generics/interface/self_ref.carbon | 79 +- .../generics/named_constraint/basic.carbon | 43 +- .../named_constraint/fail_incomplete.carbon | 19 +- .../named_constraint/invalid_method.carbon | 83 +- .../template_constraint.carbon | 15 +- .../testdata/generics/params/empty.carbon | 29 +- .../fail_redundant_phase_keyword.carbon | 147 +- .../fail_unused_after_phase_keyword.carbon | 89 +- .../generics/params/name_qualifier.carbon | 311 ++-- .../parse/testdata/generics/params/one.carbon | 45 +- .../generics/params/one_suffix_comma.carbon | 49 +- .../parse/testdata/generics/params/six.carbon | 145 +- .../parse/testdata/generics/params/two.carbon | 65 +- .../generics/params/two_suffix_comma.carbon | 69 +- toolchain/parse/testdata/if/basic.carbon | 59 +- toolchain/parse/testdata/if/else.carbon | 111 +- .../testdata/if/fail_else_unbraced.carbon | 111 +- .../parse/testdata/if/fail_errors.carbon | 71 +- .../testdata/if/fail_missing_cond.carbon | 31 +- .../testdata/if/fail_square_brackets.carbon | 35 +- .../parse/testdata/if/fail_unbraced.carbon | 59 +- toolchain/parse/testdata/if_expr/basic.carbon | 67 +- .../if_expr/fail_condition_missing.carbon | 45 +- .../if_expr/fail_else_expr_missing.carbon | 47 +- .../testdata/if_expr/fail_else_missing.carbon | 47 +- .../if_expr/fail_then_expr_missing.carbon | 47 +- .../testdata/if_expr/fail_then_missing.carbon | 45 +- .../testdata/if_expr/fail_top_level_if.carbon | 35 +- .../parse/testdata/if_expr/in_type.carbon | 67 +- .../parse/testdata/if_expr/precedence.carbon | 65 +- .../parse/testdata/index/assign_to_var.carbon | 31 +- .../testdata/index/fail_empty_expr.carbon | 31 +- .../testdata/index/fail_malformed_expr.carbon | 31 +- toolchain/parse/testdata/lambda/lambda.carbon | 242 ++- .../let/expression_pattern_precedence.carbon | 170 +- .../parse/testdata/let/fail_bad_name.carbon | 17 +- .../parse/testdata/let/fail_empty.carbon | 13 +- .../testdata/let/fail_generic_ref.carbon | 23 +- .../testdata/let/fail_missing_name.carbon | 40 +- .../parse/testdata/let/fail_no_semi.carbon | 25 +- toolchain/parse/testdata/let/let.carbon | 83 +- toolchain/parse/testdata/let/let_ref.carbon | 91 +- .../parse/testdata/let/let_struct.carbon | 319 ++-- toolchain/parse/testdata/let/let_tuple.carbon | 57 +- .../parse/testdata/let/missing_type.carbon | 17 +- .../parse/testdata/let/missing_value.carbon | 61 +- .../match/fail_cases_after_default.carbon | 73 +- .../match/fail_missing_case_arrow.carbon | 85 +- .../match/fail_missing_case_pattern.carbon | 51 +- .../fail_missing_case_statements_block.carbon | 57 +- .../testdata/match/fail_missing_cases.carbon | 41 +- .../match/fail_missing_cases_block.carbon | 35 +- .../match/fail_missing_default_arrow.carbon | 49 +- ...il_missing_default_statements_block.carbon | 49 +- .../fail_missing_guard_close_paren.carbon | 65 +- .../fail_missing_guard_open_paren.carbon | 65 +- ...sing_guard_parens_only_parse_errors.carbon | 93 +- .../match/fail_missing_matched_expr.carbon | 55 +- ...il_unexpected_tokens_in_cases_block.carbon | 141 +- toolchain/parse/testdata/match/match.carbon | 187 +- .../testdata/member_access/compound.carbon | 43 +- .../member_access/fail_keyword.carbon | 67 +- .../testdata/member_access/keyword.carbon | 35 +- .../testdata/member_access/simple.carbon | 67 +- .../parse/testdata/namespace/args.carbon | 17 +- .../parse/testdata/namespace/basic.carbon | 37 +- .../testdata/namespace/fail_arrow.carbon | 19 +- .../testdata/namespace/fail_incomplete.carbon | 43 +- .../namespace/fail_incomplete_name.carbon | 17 +- .../testdata/namespace/fail_modifiers.carbon | 15 +- .../testdata/namespace/fail_no_name.carbon | 13 +- .../parse/testdata/namespace/local.carbon | 25 +- .../parse/testdata/namespace/modifiers.carbon | 33 +- .../parse/testdata/namespace/nested.carbon | 59 +- .../observe/fail_invalid_operator.carbon | 13 +- .../testdata/observe/fail_missing_expr.carbon | 47 +- .../parse/testdata/observe/observe.carbon | 128 +- .../parse/testdata/operators/assign.carbon | 155 +- .../testdata/operators/associative.carbon | 35 +- .../operators/fail_chained_assign.carbon | 59 +- .../fail_infix_uneven_space_after.carbon | 27 +- .../fail_infix_uneven_space_before.carbon | 29 +- .../operators/fail_invalid_infix.carbon | 73 +- .../operators/fail_postfix_space.carbon | 27 +- .../fail_postfix_space_before_comma.carbon | 37 +- .../fail_postfix_space_in_call.carbon | 33 +- .../fail_postfix_space_surrounding.carbon | 27 +- .../operators/fail_postincrement.carbon | 45 +- .../operators/fail_precedence_and_or.carbon | 35 +- .../operators/fail_precedence_as.carbon | 113 +- .../operators/fail_precedence_assign.carbon | 89 +- .../operators/fail_precedence_or_and.carbon | 35 +- .../operators/fail_precedence_where.carbon | 317 ++-- .../operators/fail_prefix_repeat.carbon | 29 +- .../operators/fail_prefix_space.carbon | 27 +- ...ail_prefix_uneven_space_with_assign.carbon | 27 +- .../testdata/operators/fail_star_minus.carbon | 31 +- .../testdata/operators/fail_star_star.carbon | 31 +- .../operators/fail_star_star_no_space.carbon | 29 +- .../testdata/operators/fail_variety.carbon | 61 +- .../testdata/operators/fixity_in_call.carbon | 39 +- .../operators/fixity_in_params.carbon | 39 +- .../testdata/operators/fixity_in_var.carbon | 59 +- .../operators/fixity_with_assign.carbon | 69 +- .../parse/testdata/operators/infix.carbon | 59 +- .../testdata/operators/infix_no_space.carbon | 29 +- .../operators/infix_with_paren_after.carbon | 33 +- .../operators/infix_with_paren_before.carbon | 33 +- .../parse/testdata/operators/modifier.carbon | 92 +- .../parse/testdata/operators/postfix.carbon | 27 +- .../testdata/operators/postfix_repeat.carbon | 31 +- .../operators/postfix_space_after_op.carbon | 27 +- .../testdata/operators/precedence_as.carbon | 71 +- .../operators/precedence_assign.carbon | 123 +- .../testdata/operators/precedence_not.carbon | 41 +- .../operators/precedence_unary.carbon | 77 +- .../operators/precedence_where.carbon | 159 +- .../parse/testdata/operators/prefix.carbon | 81 +- .../testdata/operators/prefix_no_space.carbon | 27 +- .../testdata/operators/prefix_repeat.carbon | 31 +- toolchain/parse/testdata/operators/ref.carbon | 134 +- .../parse/testdata/operators/spaceship.carbon | 27 +- .../testdata/operators/three_stars.carbon | 33 +- .../parse/testdata/operators/unary.carbon | 74 +- .../parse/testdata/package_expr/basic.carbon | 33 +- .../parse/testdata/package_expr/core.carbon | 33 +- .../testdata/package_expr/fail_in_name.carbon | 43 +- .../package_expr/fail_standalone.carbon | 23 +- .../parse/testdata/packages/export.carbon | 274 ++- .../packages/import/after_import.carbon | 19 +- .../packages/import/after_package.carbon | 19 +- .../testdata/packages/import/basic.carbon | 13 +- .../testdata/packages/import/core.carbon | 23 +- .../packages/import/cpp_inline.carbon | 201 +-- .../import/current_package_library.carbon | 30 +- .../testdata/packages/import/export.carbon | 144 +- .../packages/import/fail_after_decl.carbon | 21 +- .../import/fail_after_decl_repeated.carbon | 47 +- .../packages/import/fail_extra_string.carbon | 17 +- .../import/fail_in_nested_scope.carbon | 35 +- .../import/fail_library_is_identifier.carbon | 17 +- .../import/fail_name_is_keyword.carbon | 11 +- .../packages/import/fail_no_name.carbon | 11 +- .../packages/import/fail_no_semi.carbon | 19 +- .../import/fail_omit_library_keyword.carbon | 13 +- .../testdata/packages/import/fail_type.carbon | 13 +- .../testdata/packages/import/library.carbon | 17 +- .../testdata/packages/import/ordering.carbon | 57 +- .../packages/import/semi_before.carbon | 27 +- .../testdata/packages/keyword_names.carbon | 42 +- .../testdata/packages/library/basic.carbon | 28 +- .../library/fail_in_nested_scope.carbon | 67 +- .../packages/library/fail_invalid_name.carbon | 76 +- .../packages/library/fail_semi_before.carbon | 13 +- .../packages/library/fail_too_late.carbon | 17 +- .../testdata/packages/package/api.carbon | 13 +- .../packages/package/api_library.carbon | 17 +- .../testdata/packages/package/core.carbon | 30 +- .../packages/package/fail_after_decl.carbon | 21 +- .../packages/package/fail_after_import.carbon | 17 +- .../package/fail_after_package.carbon | 17 +- .../packages/package/fail_extra_string.carbon | 17 +- .../package/fail_in_nested_scope.carbon | 75 +- .../package/fail_library_is_identifier.carbon | 17 +- .../package/fail_library_skips_name.carbon | 11 +- .../package/fail_name_is_keyword.carbon | 11 +- .../packages/package/fail_no_name.carbon | 11 +- .../packages/package/fail_no_semi.carbon | 19 +- .../package/fail_omit_library_keyword.carbon | 13 +- .../packages/package/fail_semi_before.carbon | 13 +- .../package/fail_trailing_impl.carbon | 13 +- .../testdata/packages/package/impl.carbon | 77 +- .../packages/package/impl_library.carbon | 19 +- .../packages/package/modifiers.carbon | 19 +- .../testdata/pointer/const_pointer.carbon | 105 +- .../pointer/fail_pointer_type_in_expr.carbon | 33 +- ...e_instead_of_compound_member_access.carbon | 115 +- .../testdata/pointer/pointer_type.carbon | 109 +- .../testdata/pointer/pointer_value.carbon | 97 +- toolchain/parse/testdata/return/basic.carbon | 23 +- toolchain/parse/testdata/return/expr.carbon | 25 +- .../testdata/return/fail_expr_no_semi.carbon | 25 +- .../parse/testdata/return/fail_no_semi.carbon | 25 +- .../return/fail_returned_no_var.carbon | 25 +- .../testdata/return/fail_var_no_semi.carbon | 25 +- .../parse/testdata/return/returned_var.carbon | 49 +- .../testdata/struct/fail_comma_only.carbon | 33 +- .../struct/fail_comma_repeat_in_type.carbon | 43 +- .../struct/fail_comma_repeat_in_value.carbon | 43 +- .../struct/fail_extra_token_in_type.carbon | 45 +- .../struct/fail_extra_token_in_value.carbon | 45 +- .../struct/fail_identifier_colon.carbon | 31 +- .../struct/fail_identifier_equals.carbon | 31 +- .../struct/fail_identifier_only.carbon | 31 +- .../fail_invalid_struct_designator.carbon | 35 +- .../testdata/struct/fail_missing_type.carbon | 37 +- .../testdata/struct/fail_missing_value.carbon | 37 +- .../struct/fail_mix_type_and_value.carbon | 45 +- .../struct/fail_mix_value_and_type.carbon | 41 +- .../struct/fail_mix_with_unknown.carbon | 95 +- .../struct/fail_no_colon_or_equals.carbon | 35 +- .../testdata/struct/fail_period_only.carbon | 35 +- .../testdata/struct/fail_period_paren.carbon | 31 +- .../struct/fail_period_string_colon.carbon | 47 +- .../struct/fail_period_string_equals.carbon | 47 +- .../struct/fail_type_no_designator.carbon | 31 +- .../parse/testdata/struct/no_entries.carbon | 29 +- .../testdata/struct/one_entry_no_comma.carbon | 45 +- .../struct/one_entry_with_comma.carbon | 49 +- .../testdata/struct/struct_pattern.carbon | 1558 ++++++++--------- .../parse/testdata/struct/two_entries.carbon | 65 +- .../testdata/tuple/access/repeated.carbon | 35 +- .../testdata/tuple/access/value_access.carbon | 27 +- toolchain/parse/testdata/tuple/nested.carbon | 87 +- .../parse/testdata/tuple/two_entries.carbon | 41 +- .../parse/testdata/var/fail_bad_name.carbon | 45 +- .../parse/testdata/var/fail_empty.carbon | 15 +- .../testdata/var/fail_in_interface.carbon | 31 +- .../parse/testdata/var/fail_no_semi.carbon | 27 +- toolchain/parse/testdata/var/fail_ref.carbon | 27 +- toolchain/parse/testdata/var/unused.carbon | 1018 ++++++----- toolchain/parse/testdata/var/var.carbon | 105 +- .../parse/testdata/var/var_pattern.carbon | 300 ++-- .../parse/testdata/var/var_struct.carbon | 195 +-- toolchain/parse/testdata/var/var_tuple.carbon | 59 +- .../parse/testdata/where_expr/basic.carbon | 131 +- .../testdata/where_expr/designators.carbon | 172 +- .../testdata/where_expr/fail_rewrite.carbon | 251 ++- .../testdata/where_expr/impl_where.carbon | 189 +- .../testdata/where_expr/where_and.carbon | 206 ++- toolchain/parse/testdata/while/basic.carbon | 63 +- .../testdata/while/fail_missing_cond.carbon | 31 +- .../parse/testdata/while/fail_no_semi.carbon | 63 +- .../parse/testdata/while/fail_unbraced.carbon | 35 +- toolchain/parse/tree.cpp | 2 +- toolchain/parse/tree_and_subtrees.cpp | 78 +- toolchain/parse/tree_and_subtrees.h | 25 +- toolchain/parse/tree_test.cpp | 2 +- 343 files changed, 11839 insertions(+), 12185 deletions(-) create mode 100644 toolchain/parse/testdata/dump_format/pretty.carbon create mode 100644 toolchain/parse/testdata/dump_format/yaml_postorder.carbon create mode 100644 toolchain/parse/testdata/dump_format/yaml_preorder.carbon diff --git a/toolchain/docs/driver.md b/toolchain/docs/driver.md index 01744b623b5d..e08accc70179 100644 --- a/toolchain/docs/driver.md +++ b/toolchain/docs/driver.md @@ -18,5 +18,5 @@ SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception The driver provides commands and ties together the toolchain's flow. Running a command such as `carbon compile --phase=lower ` will run through the flow -and print output. Several dump flags, such as `--dump-parse-tree`, print output +and print output. Several dump flags, such as `--dump-raw-sem-ir`, print output in YAML format for easier parsing. diff --git a/toolchain/driver/compile_driver.cpp b/toolchain/driver/compile_driver.cpp index a285bf4e54da..506ff42d8c18 100644 --- a/toolchain/driver/compile_driver.cpp +++ b/toolchain/driver/compile_driver.cpp @@ -129,7 +129,7 @@ auto CompilationUnit::RunParse() -> void { options.vlog_stream = vlog_stream_; if (options_->dump_parse_tree && IncludeInDumps()) { options.dump_stream = driver_env_->output_stream; - options.dump_preorder_parse_tree = options_->preorder_parse_tree; + options.dump_format = options_->parse_dump_format; } parse_tree_ = Parse::Parse(*tokens_, options); }); diff --git a/toolchain/driver/compile_options.cpp b/toolchain/driver/compile_options.cpp index a4f288eaa485..0507e2e13629 100644 --- a/toolchain/driver/compile_options.cpp +++ b/toolchain/driver/compile_options.cpp @@ -237,20 +237,35 @@ Dump the parse tree to stdout when parsed. )""", }, [&](auto& arg_b) { arg_b.Set(&dump_parse_tree); }); - b.AddFlag( + + b.AddOneOfOption( { - .name = "preorder-parse-tree", + .name = "parse-dump-format", .help = R"""( -When dumping the parse tree, reorder it so that it is in preorder rather than -postorder. +The format to use for parse tree dumps. 'pretty' (the default) prints the +tree in postorder, visualizing the tree structure with box-drawing +characters. 'yaml-postorder' prints the tree in postorder as unstructured yaml +(a flat list of nodes), indented to suggest the tree structure. 'yaml-preorder' +prints the tree as structured yaml (with children nested under parents). )""", }, - [&](auto& arg_b) { arg_b.Set(&preorder_parse_tree); }); + [&](auto& arg_b) { + using DumpFormat = Parse::ParseOptions::DumpFormat; + arg_b.SetOneOf( + { + arg_b.OneOfValue("pretty", DumpFormat::PrettyPostorder) + .Default(true), + arg_b.OneOfValue("yaml-postorder", DumpFormat::YamlPostorder), + arg_b.OneOfValue("yaml-preorder", DumpFormat::YamlPreorder), + }, + &parse_dump_format); + }); + b.AddFlag( { .name = "dump-raw-sem-ir", .help = R"""( -Dump the raw JSON structure of SemIR to stdout when built. +Dump the raw YAML structure of SemIR to stdout when built. )""", }, [&](auto& arg_b) { arg_b.Set(&dump_raw_sem_ir); }); diff --git a/toolchain/driver/compile_options.h b/toolchain/driver/compile_options.h index fb976e118101..b874f8fb5b03 100644 --- a/toolchain/driver/compile_options.h +++ b/toolchain/driver/compile_options.h @@ -17,6 +17,7 @@ #include "toolchain/driver/codegen_options.h" #include "toolchain/driver/driver_env.h" #include "toolchain/lower/lower.h" +#include "toolchain/parse/parse.h" namespace Carbon { @@ -111,7 +112,7 @@ struct CompileOptions { bool dump_mem_usage = false; bool dump_timings = false; bool stream_errors = false; - bool preorder_parse_tree = false; + Parse::ParseOptions::DumpFormat parse_dump_format; bool builtin_sem_ir = false; bool prelude_import = true; bool output_last_input_only = false; diff --git a/toolchain/driver/driver_test.cpp b/toolchain/driver/driver_test.cpp index 32cd8a18b68c..f54f65e9ed63 100644 --- a/toolchain/driver/driver_test.cpp +++ b/toolchain/driver/driver_test.cpp @@ -174,7 +174,8 @@ TEST_F(DriverTest, DumpParseTree) { auto file = MakeTestFile("var v: () = ();"); EXPECT_TRUE(driver_ .RunCommand({"compile", "--no-prelude-import", - "--phase=parse", "--dump-parse-tree", file}) + "--phase=parse", "--dump-parse-tree", + "--parse-dump-format=yaml-postorder", file}) .success); EXPECT_THAT(test_error_stream_.TakeStr(), StrEq("")); // Verify there is output without examining it. diff --git a/toolchain/driver/testdata/stdin.carbon b/toolchain/driver/testdata/stdin.carbon index 5e1f028ec210..27df3370f956 100644 --- a/toolchain/driver/testdata/stdin.carbon +++ b/toolchain/driver/testdata/stdin.carbon @@ -6,7 +6,7 @@ // dump flags. // TODO: Align lex/parse with check/lower. // -// ARGS: compile - --phase=lower --no-prelude-import --target=x86_64-linux-gnu --dump-tokens --dump-parse-tree --dump-sem-ir --dump-raw-sem-ir --dump-llvm-ir +// ARGS: compile - --phase=lower --no-prelude-import --target=x86_64-linux-gnu --dump-tokens --dump-parse-tree --parse-dump-format=yaml-postorder --dump-sem-ir --dump-raw-sem-ir --dump-llvm-ir // // AUTOUPDATE // TIP: To test this file alone, run: diff --git a/toolchain/parse/coverage_test.cpp b/toolchain/parse/coverage_test.cpp index 9a1c49f9dc93..07a791abc5fe 100644 --- a/toolchain/parse/coverage_test.cpp +++ b/toolchain/parse/coverage_test.cpp @@ -23,8 +23,8 @@ constexpr NodeKind UntestedNodeKinds[] = {NodeKind::Placeholder}; // Looks for node kinds that aren't covered by a file_test. TEST(Coverage, NodeKind) { - Testing::TestKindCoverage(absl::GetFlag(FLAGS_testdata_manifest), - R"(kind: '(\w+)')", llvm::ArrayRef(NodeKinds), + Testing::TestKindCoverage(absl::GetFlag(FLAGS_testdata_manifest), R"(─(\w+))", + llvm::ArrayRef(NodeKinds), llvm::ArrayRef(UntestedNodeKinds)); } diff --git a/toolchain/parse/parse.cpp b/toolchain/parse/parse.cpp index 0598c96f5594..4da7a957ec7e 100644 --- a/toolchain/parse/parse.cpp +++ b/toolchain/parse/parse.cpp @@ -56,10 +56,16 @@ auto Parse(Lex::TokenizedBuffer& tokens, ParseOptions options) -> Tree { CARBON_VLOG_TO(options.vlog_stream, "*** Parse::Tree ***\n{0}", tree); if (options.dump_stream) { Parse::TreeAndSubtrees tree_and_subtrees(tokens, tree); - if (options.dump_preorder_parse_tree) { - tree_and_subtrees.PrintPreorder(*options.dump_stream); - } else { - tree_and_subtrees.Print(*options.dump_stream); + switch (options.dump_format) { + case ParseOptions::DumpFormat::PrettyPostorder: + tree_and_subtrees.PrettyPrint(*options.dump_stream); + break; + case ParseOptions::DumpFormat::YamlPostorder: + tree_and_subtrees.PrintYamlPostorder(*options.dump_stream); + break; + case ParseOptions::DumpFormat::YamlPreorder: + tree_and_subtrees.PrintYamlPreorder(*options.dump_stream); + break; } } diff --git a/toolchain/parse/parse.h b/toolchain/parse/parse.h index 3251ede659bb..cf8e2e140930 100644 --- a/toolchain/parse/parse.h +++ b/toolchain/parse/parse.h @@ -25,8 +25,13 @@ struct ParseOptions { // If set, the parse tree will be dumped to this. llvm::raw_ostream* dump_stream = nullptr; - // When dumping, whether to dump in preorder; otherwise, postorder is used. - bool dump_preorder_parse_tree = false; + // The format to dump the parse tree in if `dump_stream` is set. + enum class DumpFormat { + PrettyPostorder, + YamlPostorder, + YamlPreorder, + }; + DumpFormat dump_format; }; // Parses the token buffer into a `Tree`. diff --git a/toolchain/parse/testdata/alias/basic.carbon b/toolchain/parse/testdata/alias/basic.carbon index 98d1b3cb7042..ddb47d9aca4b 100644 --- a/toolchain/parse/testdata/alias/basic.carbon +++ b/toolchain/parse/testdata/alias/basic.carbon @@ -23,51 +23,50 @@ fn F() { } // CHECK:STDOUT: - filename: basic.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'AliasIntroducer', text: 'alias'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'AliasInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'foo'}, -// CHECK:STDOUT: {kind: 'Alias', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'AliasIntroducer', text: 'alias'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'AliasInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'Alias', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'AliasIntroducer', text: 'alias'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'c'}, -// CHECK:STDOUT: {kind: 'AliasInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '1'}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '3'}, -// CHECK:STDOUT: {kind: 'InfixOperatorPlus', text: '+', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'Alias', text: ';', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'AliasIntroducer', text: 'alias'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'NS'}, -// CHECK:STDOUT: {kind: 'IdentifierNameQualifierWithoutParams', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'ns'}, -// CHECK:STDOUT: {kind: 'AliasInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'foo'}, -// CHECK:STDOUT: {kind: 'Alias', text: ';', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'C'}, -// CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'AliasIntroducer', text: 'alias'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'c'}, -// CHECK:STDOUT: {kind: 'AliasInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'foo'}, -// CHECK:STDOUT: {kind: 'Alias', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'AliasIntroducer', text: 'alias'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'f'}, -// CHECK:STDOUT: {kind: 'AliasInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'foo'}, -// CHECK:STDOUT: {kind: 'Alias', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─AliasIntroducer 'alias' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ ├─AliasInitializer '=' +// CHECK:STDOUT: │ ├─IdentifierNameExpr 'foo' +// CHECK:STDOUT: ├─Alias ';' +// CHECK:STDOUT: │ ╭─AliasIntroducer 'alias' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ ├─AliasInitializer '=' +// CHECK:STDOUT: │ ├─IntLiteral '0' +// CHECK:STDOUT: ├─Alias ';' +// CHECK:STDOUT: │ ╭─AliasIntroducer 'alias' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'c' +// CHECK:STDOUT: │ ├─AliasInitializer '=' +// CHECK:STDOUT: │ │ ╭─IntLiteral '1' +// CHECK:STDOUT: │ │ ├─IntLiteral '3' +// CHECK:STDOUT: │ ├─InfixOperatorPlus '+' +// CHECK:STDOUT: ├─Alias ';' +// CHECK:STDOUT: │ ╭─AliasIntroducer 'alias' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'NS' +// CHECK:STDOUT: │ ├─IdentifierNameQualifierWithoutParams '.' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'ns' +// CHECK:STDOUT: │ ├─AliasInitializer '=' +// CHECK:STDOUT: │ ├─IdentifierNameExpr 'foo' +// CHECK:STDOUT: ├─Alias ';' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'C' +// CHECK:STDOUT: │ ╭─ClassDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─AliasIntroducer 'alias' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'c' +// CHECK:STDOUT: │ │ ├─AliasInitializer '=' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'foo' +// CHECK:STDOUT: │ ├─Alias ';' +// CHECK:STDOUT: ├─ClassDefinition '}' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─AliasIntroducer 'alias' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'f' +// CHECK:STDOUT: │ │ ├─AliasInitializer '=' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'foo' +// CHECK:STDOUT: │ ├─Alias ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/alias/fail_syntax.carbon b/toolchain/parse/testdata/alias/fail_syntax.carbon index 02e5a4f29317..b2116b57a235 100644 --- a/toolchain/parse/testdata/alias/fail_syntax.carbon +++ b/toolchain/parse/testdata/alias/fail_syntax.carbon @@ -72,61 +72,60 @@ fn F() { alias a = b -// CHECK:STDERR: fail_syntax.carbon:[[@LINE+57]]:21: error: `alias` declarations must end with a `;` [ExpectedDeclSemi] -// CHECK:STDERR: // CHECK:STDOUT: ] -// CHECK:STDERR: ^ +// CHECK:STDERR: fail_syntax.carbon:[[@LINE+56]]:26: error: `alias` declarations must end with a `;` [ExpectedDeclSemi] +// CHECK:STDERR: // CHECK:STDOUT: (root) +// CHECK:STDERR: ^ // CHECK:STDERR: // CHECK:STDOUT: - filename: fail_syntax.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'AliasIntroducer', text: 'alias'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '=', has_error: yes}, -// CHECK:STDOUT: {kind: 'Alias', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'AliasIntroducer', text: 'alias'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'Alias', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'AliasIntroducer', text: 'alias'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'AliasInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ';', has_error: yes}, -// CHECK:STDOUT: {kind: 'Alias', text: ';', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'AliasIntroducer', text: 'alias'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'Alias', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'AliasIntroducer', text: 'alias'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '=', has_error: yes}, -// CHECK:STDOUT: {kind: 'Alias', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'AliasIntroducer', text: 'alias'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'Alias', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'AliasIntroducer', text: 'alias'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'AliasInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'Alias', text: ';', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'AliasIntroducer', text: 'alias'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ';', has_error: yes}, -// CHECK:STDOUT: {kind: 'Alias', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'AliasIntroducer', text: 'alias'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'AliasInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ';', has_error: yes}, -// CHECK:STDOUT: {kind: 'Alias', text: ';', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'AliasIntroducer', text: 'alias'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'AliasInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '}', has_error: yes}, -// CHECK:STDOUT: {kind: 'Alias', text: '=', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 19}, -// CHECK:STDOUT: {kind: 'AliasIntroducer', text: 'alias'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'AliasInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'Alias', text: 'b', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─AliasIntroducer 'alias' +// CHECK:STDOUT: │ ├─InvalidParse '=' has_error +// CHECK:STDOUT: ├─Alias ';' has_error +// CHECK:STDOUT: │ ╭─AliasIntroducer 'alias' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: ├─Alias ';' has_error +// CHECK:STDOUT: │ ╭─AliasIntroducer 'alias' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ ├─AliasInitializer '=' +// CHECK:STDOUT: │ ├─InvalidParse ';' has_error +// CHECK:STDOUT: ├─Alias ';' has_error +// CHECK:STDOUT: │ ╭─AliasIntroducer 'alias' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: ├─Alias ';' has_error +// CHECK:STDOUT: │ ╭─AliasIntroducer 'alias' +// CHECK:STDOUT: │ ├─InvalidParse '=' has_error +// CHECK:STDOUT: ├─Alias ';' has_error +// CHECK:STDOUT: │ ╭─AliasIntroducer 'alias' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: ├─Alias ';' has_error +// CHECK:STDOUT: │ ╭─AliasIntroducer 'alias' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ ├─AliasInitializer '=' +// CHECK:STDOUT: │ ├─IdentifierNameExpr 'b' +// CHECK:STDOUT: ├─Alias ';' has_error +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─AliasIntroducer 'alias' +// CHECK:STDOUT: │ │ ├─InvalidParse ';' has_error +// CHECK:STDOUT: │ ├─Alias ';' has_error +// CHECK:STDOUT: │ │ ╭─AliasIntroducer 'alias' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ ├─AliasInitializer '=' +// CHECK:STDOUT: │ │ ├─InvalidParse ';' has_error +// CHECK:STDOUT: │ ├─Alias ';' has_error +// CHECK:STDOUT: │ │ ╭─AliasIntroducer 'alias' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ ├─AliasInitializer '=' +// CHECK:STDOUT: │ │ ├─InvalidParse '}' has_error +// CHECK:STDOUT: │ ├─Alias '=' has_error +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: │ ╭─AliasIntroducer 'alias' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ ├─AliasInitializer '=' +// CHECK:STDOUT: │ ├─IdentifierNameExpr 'b' +// CHECK:STDOUT: ├─Alias 'b' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/array/basic.carbon b/toolchain/parse/testdata/array/basic.carbon index 04c3517a24a7..25fcdd7a39cf 100644 --- a/toolchain/parse/testdata/array/basic.carbon +++ b/toolchain/parse/testdata/array/basic.carbon @@ -11,19 +11,18 @@ var x: array(i32, 10); // CHECK:STDOUT: - filename: basic.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'ArrayExprKeyword', text: 'array'}, -// CHECK:STDOUT: {kind: 'ArrayExprOpenParen', text: '('}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'ArrayExprComma', text: ','}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '10'}, -// CHECK:STDOUT: {kind: 'ArrayExpr', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ╭─ArrayExprKeyword 'array' +// CHECK:STDOUT: │ │ │ ├─ArrayExprOpenParen '(' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─ArrayExprComma ',' +// CHECK:STDOUT: │ │ │ ├─IntLiteral '10' +// CHECK:STDOUT: │ │ ├─ArrayExpr ')' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/array/fail_syntax.carbon b/toolchain/parse/testdata/array/fail_syntax.carbon index 1ad79d245e88..7843b3408536 100644 --- a/toolchain/parse/testdata/array/fail_syntax.carbon +++ b/toolchain/parse/testdata/array/fail_syntax.carbon @@ -129,138 +129,130 @@ var x: array(); var x: array; // CHECK:STDOUT: - filename: fail_no_comma.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'ArrayExprKeyword', text: 'array'}, -// CHECK:STDOUT: {kind: 'ArrayExprOpenParen', text: '('}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'ArrayExprComma', text: ')', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ')', has_error: yes}, -// CHECK:STDOUT: {kind: 'ArrayExpr', text: ')', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ╭─ArrayExprKeyword 'array' +// CHECK:STDOUT: │ │ │ ├─ArrayExprOpenParen '(' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─ArrayExprComma ')' has_error +// CHECK:STDOUT: │ │ │ ├─InvalidParse ')' has_error +// CHECK:STDOUT: │ │ ├─ArrayExpr ')' has_error +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_invalid_char.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'X'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ArrayExprKeyword', text: 'array'}, -// CHECK:STDOUT: {kind: 'ArrayExprOpenParen', text: '('}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ':', has_error: yes}, -// CHECK:STDOUT: {kind: 'ArrayExprComma', text: ':', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ':', has_error: yes}, -// CHECK:STDOUT: {kind: 'ArrayExpr', text: ')', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'X' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ╭─ArrayExprKeyword 'array' +// CHECK:STDOUT: │ │ ├─ArrayExprOpenParen '(' +// CHECK:STDOUT: │ │ ├─InvalidParse ':' has_error +// CHECK:STDOUT: │ │ ├─ArrayExprComma ':' has_error +// CHECK:STDOUT: │ │ ├─InvalidParse ':' has_error +// CHECK:STDOUT: │ │ ╭─ArrayExpr ')' has_error +// CHECK:STDOUT: │ ├─ReturnType '->' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_unlexed_expr.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'ArrayExprKeyword', text: 'array'}, -// CHECK:STDOUT: {kind: 'ArrayExprOpenParen', text: '('}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '`', has_error: yes}, -// CHECK:STDOUT: {kind: 'ArrayExprComma', text: '`', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '`', has_error: yes}, -// CHECK:STDOUT: {kind: 'ArrayExpr', text: ')', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ╭─ArrayExprKeyword 'array' +// CHECK:STDOUT: │ │ │ ├─ArrayExprOpenParen '(' +// CHECK:STDOUT: │ │ │ ├─InvalidParse '`' has_error +// CHECK:STDOUT: │ │ │ ├─ArrayExprComma '`' has_error +// CHECK:STDOUT: │ │ │ ├─InvalidParse '`' has_error +// CHECK:STDOUT: │ │ ├─ArrayExpr ')' has_error +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_no_open_paren.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'ArrayExprKeyword', text: 'array'}, -// CHECK:STDOUT: {kind: 'ArrayExprOpenParen', text: 'array', has_error: yes}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'ArrayExprComma', text: ','}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '1'}, -// CHECK:STDOUT: {kind: 'ArrayExpr', text: 'array', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ╭─ArrayExprKeyword 'array' +// CHECK:STDOUT: │ │ │ ├─ArrayExprOpenParen 'array' has_error +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─ArrayExprComma ',' +// CHECK:STDOUT: │ │ │ ├─IntLiteral '1' +// CHECK:STDOUT: │ │ ├─ArrayExpr 'array' has_error +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_no_close_paren.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'ArrayExprKeyword', text: 'array'}, -// CHECK:STDOUT: {kind: 'ArrayExprOpenParen', text: 'array', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '(', has_error: yes}, -// CHECK:STDOUT: {kind: 'ArrayExprComma', text: '(', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '(', has_error: yes}, -// CHECK:STDOUT: {kind: 'ArrayExpr', text: 'array', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', has_error: yes, subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ╭─ArrayExprKeyword 'array' +// CHECK:STDOUT: │ │ │ ├─ArrayExprOpenParen 'array' has_error +// CHECK:STDOUT: │ │ │ ├─InvalidParse '(' has_error +// CHECK:STDOUT: │ │ │ ├─ArrayExprComma '(' has_error +// CHECK:STDOUT: │ │ │ ├─InvalidParse '(' has_error +// CHECK:STDOUT: │ │ ├─ArrayExpr 'array' has_error +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: ├─VariableDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_no_length.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'ArrayExprKeyword', text: 'array'}, -// CHECK:STDOUT: {kind: 'ArrayExprOpenParen', text: '('}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'ArrayExprComma', text: ','}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ')', has_error: yes}, -// CHECK:STDOUT: {kind: 'ArrayExpr', text: ')', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ╭─ArrayExprKeyword 'array' +// CHECK:STDOUT: │ │ │ ├─ArrayExprOpenParen '(' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─ArrayExprComma ',' +// CHECK:STDOUT: │ │ │ ├─InvalidParse ')' has_error +// CHECK:STDOUT: │ │ ├─ArrayExpr ')' has_error +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_no_params.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'ArrayExprKeyword', text: 'array'}, -// CHECK:STDOUT: {kind: 'ArrayExprOpenParen', text: '('}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ')', has_error: yes}, -// CHECK:STDOUT: {kind: 'ArrayExprComma', text: ')', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ')', has_error: yes}, -// CHECK:STDOUT: {kind: 'ArrayExpr', text: ')', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ╭─ArrayExprKeyword 'array' +// CHECK:STDOUT: │ │ │ ├─ArrayExprOpenParen '(' +// CHECK:STDOUT: │ │ │ ├─InvalidParse ')' has_error +// CHECK:STDOUT: │ │ │ ├─ArrayExprComma ')' has_error +// CHECK:STDOUT: │ │ │ ├─InvalidParse ')' has_error +// CHECK:STDOUT: │ │ ├─ArrayExpr ')' has_error +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_keyword_alone.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'ArrayExprKeyword', text: 'array'}, -// CHECK:STDOUT: {kind: 'ArrayExprOpenParen', text: 'array', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ';', has_error: yes}, -// CHECK:STDOUT: {kind: 'ArrayExprComma', text: ';', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ';', has_error: yes}, -// CHECK:STDOUT: {kind: 'ArrayExpr', text: 'array', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ╭─ArrayExprKeyword 'array' +// CHECK:STDOUT: │ │ │ ├─ArrayExprOpenParen 'array' has_error +// CHECK:STDOUT: │ │ │ ├─InvalidParse ';' has_error +// CHECK:STDOUT: │ │ │ ├─ArrayExprComma ';' has_error +// CHECK:STDOUT: │ │ │ ├─InvalidParse ';' has_error +// CHECK:STDOUT: │ │ ├─ArrayExpr 'array' has_error +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/auto/let.carbon b/toolchain/parse/testdata/auto/let.carbon index dd15ad09b845..7102629608c5 100644 --- a/toolchain/parse/testdata/auto/let.carbon +++ b/toolchain/parse/testdata/auto/let.carbon @@ -11,15 +11,14 @@ let x: auto = 1; // CHECK:STDOUT: - filename: let.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'AutoTypeLiteral', text: 'auto'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '1'}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─AutoTypeLiteral 'auto' +// CHECK:STDOUT: │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ ├─IntLiteral '1' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/auto/match_case.carbon b/toolchain/parse/testdata/auto/match_case.carbon index b1ad254908e3..d0ef9379c1ae 100644 --- a/toolchain/parse/testdata/auto/match_case.carbon +++ b/toolchain/parse/testdata/auto/match_case.carbon @@ -16,45 +16,44 @@ fn f() -> bool { } // CHECK:STDOUT: - filename: match_case.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'f'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'BoolTypeLiteral', text: 'bool'}, -// CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'MatchIntroducer', text: 'match'}, -// CHECK:STDOUT: {kind: 'MatchConditionStart', text: '('}, -// CHECK:STDOUT: {kind: 'BoolLiteralTrue', text: 'true'}, -// CHECK:STDOUT: {kind: 'MatchCondition', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MatchStatementStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'MatchCaseIntroducer', text: 'case'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'AutoTypeLiteral', text: 'auto'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'MatchCaseGuardIntroducer', text: 'if'}, -// CHECK:STDOUT: {kind: 'MatchCaseGuardStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'x'}, -// CHECK:STDOUT: {kind: 'BoolLiteralTrue', text: 'true'}, -// CHECK:STDOUT: {kind: 'InfixOperatorEqualEqual', text: '==', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MatchCaseGuard', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'MatchCase', text: '=>', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'MatchHandlerStart', text: '{', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'BoolLiteralTrue', text: 'true'}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MatchHandler', text: '}', subtree_size: 17}, -// CHECK:STDOUT: {kind: 'MatchDefaultIntroducer', text: 'default'}, -// CHECK:STDOUT: {kind: 'MatchDefault', text: '=>', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'MatchHandlerStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'BoolLiteralFalse', text: 'false'}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MatchHandler', text: '}', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'MatchStatement', text: '}', subtree_size: 30}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 38}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'f' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ╭─BoolTypeLiteral 'bool' +// CHECK:STDOUT: │ ├─ReturnType '->' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─MatchIntroducer 'match' +// CHECK:STDOUT: │ │ │ ╭─MatchConditionStart '(' +// CHECK:STDOUT: │ │ │ ├─BoolLiteralTrue 'true' +// CHECK:STDOUT: │ │ ├─MatchCondition ')' +// CHECK:STDOUT: │ │ ╭─MatchStatementStart '{' +// CHECK:STDOUT: │ │ │ ╭─MatchCaseIntroducer 'case' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─AutoTypeLiteral 'auto' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ │ │ ╭─MatchCaseGuardIntroducer 'if' +// CHECK:STDOUT: │ │ │ │ ├─MatchCaseGuardStart '(' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameExpr 'x' +// CHECK:STDOUT: │ │ │ │ │ ├─BoolLiteralTrue 'true' +// CHECK:STDOUT: │ │ │ │ ├─InfixOperatorEqualEqual '==' +// CHECK:STDOUT: │ │ │ ├─MatchCaseGuard ')' +// CHECK:STDOUT: │ │ │ ╭─MatchCase '=>' +// CHECK:STDOUT: │ │ │ ╭─MatchHandlerStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ │ │ ├─BoolLiteralTrue 'true' +// CHECK:STDOUT: │ │ │ ├─ReturnStatement ';' +// CHECK:STDOUT: │ │ ├─MatchHandler '}' +// CHECK:STDOUT: │ │ │ ╭─MatchDefaultIntroducer 'default' +// CHECK:STDOUT: │ │ │ ╭─MatchDefault '=>' +// CHECK:STDOUT: │ │ │ ╭─MatchHandlerStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ │ │ ├─BoolLiteralFalse 'false' +// CHECK:STDOUT: │ │ │ ├─ReturnStatement ';' +// CHECK:STDOUT: │ │ ├─MatchHandler '}' +// CHECK:STDOUT: │ ├─MatchStatement '}' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/auto/return.carbon b/toolchain/parse/testdata/auto/return.carbon index d848aaa47cff..a95c89d0efc7 100644 --- a/toolchain/parse/testdata/auto/return.carbon +++ b/toolchain/parse/testdata/auto/return.carbon @@ -13,18 +13,17 @@ fn f() -> auto { } // CHECK:STDOUT: - filename: return.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'f'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'AutoTypeLiteral', text: 'auto'}, -// CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'BoolLiteralTrue', text: 'true'}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'f' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ╭─AutoTypeLiteral 'auto' +// CHECK:STDOUT: │ ├─ReturnType '->' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ ├─BoolLiteralTrue 'true' +// CHECK:STDOUT: │ ├─ReturnStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/auto/var.carbon b/toolchain/parse/testdata/auto/var.carbon index 1cc365cf85a7..2df6582acac3 100644 --- a/toolchain/parse/testdata/auto/var.carbon +++ b/toolchain/parse/testdata/auto/var.carbon @@ -11,16 +11,15 @@ var y: auto = false; // CHECK:STDOUT: - filename: var.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'AutoTypeLiteral', text: 'auto'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'BoolLiteralFalse', text: 'false'}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─AutoTypeLiteral 'auto' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ ├─BoolLiteralFalse 'false' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/basics/empty.carbon b/toolchain/parse/testdata/basics/empty.carbon index 7c4cfae06efa..f0ee70ae5c71 100644 --- a/toolchain/parse/testdata/basics/empty.carbon +++ b/toolchain/parse/testdata/basics/empty.carbon @@ -9,7 +9,6 @@ // TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/parse/testdata/basics/empty.carbon // CHECK:STDOUT: - filename: empty.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/basics/empty_decl.carbon b/toolchain/parse/testdata/basics/empty_decl.carbon index e5b725bddabe..1844510fc56f 100644 --- a/toolchain/parse/testdata/basics/empty_decl.carbon +++ b/toolchain/parse/testdata/basics/empty_decl.carbon @@ -11,8 +11,7 @@ ; // CHECK:STDOUT: - filename: empty_decl.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'EmptyDecl', text: ';'}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: ├─EmptyDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/basics/fail_bracket_recovery.carbon b/toolchain/parse/testdata/basics/fail_bracket_recovery.carbon index 28cdc9eadb45..d469d3fca38c 100644 --- a/toolchain/parse/testdata/basics/fail_bracket_recovery.carbon +++ b/toolchain/parse/testdata/basics/fail_bracket_recovery.carbon @@ -32,65 +32,64 @@ fn F() { } // CHECK:STDOUT: - filename: fail_bracket_recovery.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'ArrayExprKeyword', text: 'array'}, -// CHECK:STDOUT: {kind: 'ArrayExprOpenParen', text: '('}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'ArrayExprComma', text: ','}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '3'}, -// CHECK:STDOUT: {kind: 'ArrayExpr', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'TupleLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '1'}, -// CHECK:STDOUT: {kind: 'TupleLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '2'}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 20}, -// CHECK:STDOUT: {kind: 'ParenExprStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'IndexExprStart', text: '[', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '1'}, -// CHECK:STDOUT: {kind: 'IndexExpr', text: ']', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ParenExpr', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '1'}, -// CHECK:STDOUT: {kind: 'InfixOperatorPlus', text: '+', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'StructTypeLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'StructTypeLiteralField', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'StructTypeLiteral', text: '}', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ParenExprStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ParenExpr', text: ')', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructLiteralField', text: '=', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 23}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 58}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─ArrayExprKeyword 'array' +// CHECK:STDOUT: │ │ │ │ ├─ArrayExprOpenParen '(' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ │ ├─ArrayExprComma ',' +// CHECK:STDOUT: │ │ │ │ ├─IntLiteral '3' +// CHECK:STDOUT: │ │ │ ├─ArrayExpr ')' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ ├─IntLiteral '0' +// CHECK:STDOUT: │ │ │ ├─TupleLiteralComma ',' +// CHECK:STDOUT: │ │ │ ├─IntLiteral '1' +// CHECK:STDOUT: │ │ │ ├─TupleLiteralComma ',' +// CHECK:STDOUT: │ │ │ ├─IntLiteral '2' +// CHECK:STDOUT: │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: │ │ ╭─ParenExprStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ │ ╭─IndexExprStart '[' +// CHECK:STDOUT: │ │ │ ├─IntLiteral '1' +// CHECK:STDOUT: │ │ ├─IndexExpr ']' +// CHECK:STDOUT: │ │ ╭─ParenExpr ')' +// CHECK:STDOUT: │ │ ├─IntLiteral '1' +// CHECK:STDOUT: │ │ ╭─InfixOperatorPlus '+' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─StructTypeLiteralStart '{' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ │ │ ├─StructTypeLiteralField ':' +// CHECK:STDOUT: │ │ │ ├─StructTypeLiteral '}' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ │ ╭─ParenExprStart '(' +// CHECK:STDOUT: │ │ │ │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ │ │ ├─ParenExpr ')' +// CHECK:STDOUT: │ │ │ ├─StructLiteralField '=' +// CHECK:STDOUT: │ │ ├─StructLiteral '}' +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/basics/fail_invalid_designators.carbon b/toolchain/parse/testdata/basics/fail_invalid_designators.carbon index cdd460b7b39d..d577e7c83199 100644 --- a/toolchain/parse/testdata/basics/fail_invalid_designators.carbon +++ b/toolchain/parse/testdata/basics/fail_invalid_designators.carbon @@ -23,21 +23,20 @@ fn F() { } // CHECK:STDOUT: - filename: fail_invalid_designators.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: ';', has_error: yes}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'fn'}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature ';' has_error +// CHECK:STDOUT: │ │ ╭─MemberAccessExpr '.' +// CHECK:STDOUT: │ ├─ExprStatement ';' has_error +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'fn' +// CHECK:STDOUT: │ │ ╭─MemberAccessExpr '.' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/basics/fail_modifiers_before_semi.carbon b/toolchain/parse/testdata/basics/fail_modifiers_before_semi.carbon index 47c48cb94046..85239be4ef89 100644 --- a/toolchain/parse/testdata/basics/fail_modifiers_before_semi.carbon +++ b/toolchain/parse/testdata/basics/fail_modifiers_before_semi.carbon @@ -15,11 +15,10 @@ protected virtual; // CHECK:STDOUT: - filename: fail_modifiers_before_semi.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'InvalidParseStart', text: ';', has_error: yes}, -// CHECK:STDOUT: {kind: 'ProtectedModifier', text: 'protected'}, -// CHECK:STDOUT: {kind: 'VirtualModifier', text: 'virtual'}, -// CHECK:STDOUT: {kind: 'InvalidParseSubtree', text: ';', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─InvalidParseStart ';' has_error +// CHECK:STDOUT: │ ├─ProtectedModifier 'protected' +// CHECK:STDOUT: │ ├─VirtualModifier 'virtual' +// CHECK:STDOUT: ├─InvalidParseSubtree ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/basics/fail_no_intro_with_semi.carbon b/toolchain/parse/testdata/basics/fail_no_intro_with_semi.carbon index b2c98ba33873..d3653019a292 100644 --- a/toolchain/parse/testdata/basics/fail_no_intro_with_semi.carbon +++ b/toolchain/parse/testdata/basics/fail_no_intro_with_semi.carbon @@ -15,9 +15,8 @@ foo; // CHECK:STDOUT: - filename: fail_no_intro_with_semi.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'InvalidParseStart', text: 'foo', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParseSubtree', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─InvalidParseStart 'foo' has_error +// CHECK:STDOUT: ├─InvalidParseSubtree ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/basics/fail_no_intro_without_semi.carbon b/toolchain/parse/testdata/basics/fail_no_intro_without_semi.carbon index b57604bebdb2..55127b819503 100644 --- a/toolchain/parse/testdata/basics/fail_no_intro_without_semi.carbon +++ b/toolchain/parse/testdata/basics/fail_no_intro_without_semi.carbon @@ -15,9 +15,8 @@ foo bar baz // CHECK:STDOUT: - filename: fail_no_intro_without_semi.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'InvalidParseStart', text: 'foo', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParseSubtree', text: 'baz', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─InvalidParseStart 'foo' has_error +// CHECK:STDOUT: ├─InvalidParseSubtree 'baz' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/basics/fail_paren_match_regression.carbon b/toolchain/parse/testdata/basics/fail_paren_match_regression.carbon index 4986e81b9360..6ff432eb2c57 100644 --- a/toolchain/parse/testdata/basics/fail_paren_match_regression.carbon +++ b/toolchain/parse/testdata/basics/fail_paren_match_regression.carbon @@ -18,20 +18,19 @@ // CHECK:STDERR: var = (foo {}) -// CHECK:STDERR: fail_paren_match_regression.carbon:[[@LINE+16]]:21: error: `var` declarations must end with a `;` [ExpectedDeclSemi] -// CHECK:STDERR: // CHECK:STDOUT: ] -// CHECK:STDERR: ^ +// CHECK:STDERR: fail_paren_match_regression.carbon:[[@LINE+15]]:26: error: `var` declarations must end with a `;` [ExpectedDeclSemi] +// CHECK:STDERR: // CHECK:STDOUT: (root) +// CHECK:STDERR: ^ // CHECK:STDERR: // CHECK:STDOUT: - filename: fail_paren_match_regression.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '=', has_error: yes}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'ParenExprStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'foo'}, -// CHECK:STDOUT: {kind: 'ParenExpr', text: ')', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ')', has_error: yes, subtree_size: 8}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─InvalidParse '=' has_error +// CHECK:STDOUT: │ ├─VariablePattern 'var' has_error +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─ParenExprStart '(' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'foo' +// CHECK:STDOUT: │ ├─ParenExpr ')' has_error +// CHECK:STDOUT: ├─VariableDecl ')' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/basics/form_literals.carbon b/toolchain/parse/testdata/basics/form_literals.carbon index 7f0e5a5c59cc..08e9f103f25d 100644 --- a/toolchain/parse/testdata/basics/form_literals.carbon +++ b/toolchain/parse/testdata/basics/form_literals.carbon @@ -75,99 +75,97 @@ fn F() { } // CHECK:STDOUT: - filename: basics.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FormLiteralKeyword', text: 'form'}, -// CHECK:STDOUT: {kind: 'FormLiteralOpenParen', text: '('}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'RefPrimitiveForm', text: 'ref', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FormLiteral', text: ')', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FormLiteralKeyword', text: 'form'}, -// CHECK:STDOUT: {kind: 'FormLiteralOpenParen', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'T'}, -// CHECK:STDOUT: {kind: 'CallExprStart', text: '(', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'X'}, -// CHECK:STDOUT: {kind: 'TupleLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Y'}, -// CHECK:STDOUT: {kind: 'CallExpr', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VarPrimitiveForm', text: 'var', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'FormLiteral', text: ')', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'FormLiteralKeyword', text: 'form'}, -// CHECK:STDOUT: {kind: 'FormLiteralOpenParen', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'X'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Y'}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ValPrimitiveForm', text: 'val', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'FormLiteral', text: ')', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 31}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'VarReturn'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FormLiteralKeyword', text: 'form'}, -// CHECK:STDOUT: {kind: 'FormLiteralOpenParen', text: '('}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'RefPrimitiveForm', text: 'ref', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FormLiteral', text: ')', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ReturnForm', text: '->?', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─FormLiteralKeyword 'form' +// CHECK:STDOUT: │ │ ├─FormLiteralOpenParen '(' +// CHECK:STDOUT: │ │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─RefPrimitiveForm 'ref' +// CHECK:STDOUT: │ │ ╭─FormLiteral ')' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─FormLiteralKeyword 'form' +// CHECK:STDOUT: │ │ ├─FormLiteralOpenParen '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'T' +// CHECK:STDOUT: │ │ │ ╭─CallExprStart '(' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'X' +// CHECK:STDOUT: │ │ │ ├─TupleLiteralComma ',' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'Y' +// CHECK:STDOUT: │ │ │ ╭─CallExpr ')' +// CHECK:STDOUT: │ │ ├─VarPrimitiveForm 'var' +// CHECK:STDOUT: │ │ ╭─FormLiteral ')' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─FormLiteralKeyword 'form' +// CHECK:STDOUT: │ │ ├─FormLiteralOpenParen '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'X' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameNotBeforeSignature 'Y' +// CHECK:STDOUT: │ │ │ ╭─MemberAccessExpr '.' +// CHECK:STDOUT: │ │ ├─ValPrimitiveForm 'val' +// CHECK:STDOUT: │ │ ╭─FormLiteral ')' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'VarReturn' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ╭─FormLiteralKeyword 'form' +// CHECK:STDOUT: │ │ ├─FormLiteralOpenParen '(' +// CHECK:STDOUT: │ │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─RefPrimitiveForm 'ref' +// CHECK:STDOUT: │ │ ╭─FormLiteral ')' +// CHECK:STDOUT: │ ├─ReturnForm '->?' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_invalid_form_literal.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FormLiteralKeyword', text: 'form'}, -// CHECK:STDOUT: {kind: 'FormLiteralOpenParen', text: 'form', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: 'form', has_error: yes}, -// CHECK:STDOUT: {kind: 'FormLiteral', text: 'form', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FormLiteralKeyword', text: 'form'}, -// CHECK:STDOUT: {kind: 'FormLiteralOpenParen', text: '('}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ')', has_error: yes}, -// CHECK:STDOUT: {kind: 'ValPrimitiveForm', text: 'form', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FormLiteral', text: ')', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FormLiteralKeyword', text: 'form'}, -// CHECK:STDOUT: {kind: 'FormLiteralOpenParen', text: '('}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'ValPrimitiveForm', text: 'form', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FormLiteral', text: ')', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FormLiteralKeyword', text: 'form'}, -// CHECK:STDOUT: {kind: 'FormLiteralOpenParen', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'whole'}, -// CHECK:STDOUT: {kind: 'ValPrimitiveForm', text: 'form', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FormLiteral', text: ')', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FormLiteralKeyword', text: 'form'}, -// CHECK:STDOUT: {kind: 'FormLiteralOpenParen', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'whole'}, -// CHECK:STDOUT: {kind: 'VarPrimitiveForm', text: 'var', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FormLiteral', text: ')', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FormLiteralKeyword', text: 'form'}, -// CHECK:STDOUT: {kind: 'FormLiteralOpenParen', text: 'form', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: 'form', has_error: yes}, -// CHECK:STDOUT: {kind: 'FormLiteral', text: 'form', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FormLiteralKeyword', text: 'form'}, -// CHECK:STDOUT: {kind: 'FormLiteralOpenParen', text: 'form', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: 'form', has_error: yes}, -// CHECK:STDOUT: {kind: 'FormLiteral', text: 'form', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 45}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─FormLiteralKeyword 'form' +// CHECK:STDOUT: │ │ ├─FormLiteralOpenParen 'form' has_error +// CHECK:STDOUT: │ │ ├─InvalidParse 'form' has_error +// CHECK:STDOUT: │ │ ╭─FormLiteral 'form' has_error +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─FormLiteralKeyword 'form' +// CHECK:STDOUT: │ │ ├─FormLiteralOpenParen '(' +// CHECK:STDOUT: │ │ │ ╭─InvalidParse ')' has_error +// CHECK:STDOUT: │ │ ├─ValPrimitiveForm 'form' has_error +// CHECK:STDOUT: │ │ ╭─FormLiteral ')' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─FormLiteralKeyword 'form' +// CHECK:STDOUT: │ │ ├─FormLiteralOpenParen '(' +// CHECK:STDOUT: │ │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─ValPrimitiveForm 'form' has_error +// CHECK:STDOUT: │ │ ╭─FormLiteral ')' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─FormLiteralKeyword 'form' +// CHECK:STDOUT: │ │ ├─FormLiteralOpenParen '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'whole' +// CHECK:STDOUT: │ │ ├─ValPrimitiveForm 'form' has_error +// CHECK:STDOUT: │ │ ╭─FormLiteral ')' has_error +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─FormLiteralKeyword 'form' +// CHECK:STDOUT: │ │ ├─FormLiteralOpenParen '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'whole' +// CHECK:STDOUT: │ │ ├─VarPrimitiveForm 'var' +// CHECK:STDOUT: │ │ ╭─FormLiteral ')' has_error +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─FormLiteralKeyword 'form' +// CHECK:STDOUT: │ │ ├─FormLiteralOpenParen 'form' has_error +// CHECK:STDOUT: │ │ ├─InvalidParse 'form' has_error +// CHECK:STDOUT: │ │ ╭─FormLiteral 'form' has_error +// CHECK:STDOUT: │ ├─ExprStatement ';' has_error +// CHECK:STDOUT: │ │ ╭─FormLiteralKeyword 'form' +// CHECK:STDOUT: │ │ ├─FormLiteralOpenParen 'form' has_error +// CHECK:STDOUT: │ │ ├─InvalidParse 'form' has_error +// CHECK:STDOUT: │ │ ╭─FormLiteral 'form' has_error +// CHECK:STDOUT: │ ├─ExprStatement ';' has_error +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/basics/function_call.carbon b/toolchain/parse/testdata/basics/function_call.carbon index 70ffabc70f66..d821a44860b3 100644 --- a/toolchain/parse/testdata/basics/function_call.carbon +++ b/toolchain/parse/testdata/basics/function_call.carbon @@ -14,32 +14,31 @@ fn F() { } // CHECK:STDOUT: - filename: function_call.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'f'}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'CallExprStart', text: '(', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'c'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'd'}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TupleLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'ParenExprStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'e'}, -// CHECK:STDOUT: {kind: 'ParenExpr', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'CallExpr', text: ')', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'g'}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 16}, -// CHECK:STDOUT: {kind: 'CallExprStart', text: '(', subtree_size: 17}, -// CHECK:STDOUT: {kind: 'CallExpr', text: ')', subtree_size: 18}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 19}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 25}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ ╭─MemberAccessExpr '.' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'f' +// CHECK:STDOUT: │ │ ╭─MemberAccessExpr '.' +// CHECK:STDOUT: │ │ ╭─CallExprStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'c' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameNotBeforeSignature 'd' +// CHECK:STDOUT: │ │ ├─MemberAccessExpr '.' +// CHECK:STDOUT: │ │ ├─TupleLiteralComma ',' +// CHECK:STDOUT: │ │ │ ╭─ParenExprStart '(' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'e' +// CHECK:STDOUT: │ │ ├─ParenExpr ')' +// CHECK:STDOUT: │ │ ╭─CallExpr ')' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'g' +// CHECK:STDOUT: │ │ ╭─MemberAccessExpr '.' +// CHECK:STDOUT: │ │ ╭─CallExprStart '(' +// CHECK:STDOUT: │ │ ╭─CallExpr ')' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/basics/multifile.carbon b/toolchain/parse/testdata/basics/multifile.carbon index 84cd47b2c7ee..5467e04edd5a 100644 --- a/toolchain/parse/testdata/basics/multifile.carbon +++ b/toolchain/parse/testdata/basics/multifile.carbon @@ -15,24 +15,22 @@ fn A() {} fn B() {} // CHECK:STDOUT: - filename: a.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'A'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'A' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: b.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'B'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'B' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/basics/multiline_string_recovery.carbon b/toolchain/parse/testdata/basics/multiline_string_recovery.carbon index 042f98fb6d36..8e9b5bc862ce 100644 --- a/toolchain/parse/testdata/basics/multiline_string_recovery.carbon +++ b/toolchain/parse/testdata/basics/multiline_string_recovery.carbon @@ -29,31 +29,30 @@ str } // CHECK:STDOUT: - filename: fail_string_in_skipped_group.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'bad'}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', has_error: yes, subtree_size: 9}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 24}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'bad' +// CHECK:STDOUT: │ ├─VariableDecl ';' has_error +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ├─IntLiteral '0' +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/basics/multiline_token.carbon b/toolchain/parse/testdata/basics/multiline_token.carbon index 1283e7caba06..a3e9c5e4d2c9 100644 --- a/toolchain/parse/testdata/basics/multiline_token.carbon +++ b/toolchain/parse/testdata/basics/multiline_token.carbon @@ -21,13 +21,12 @@ hello ''' // CHECK:STDOUT: - filename: fail_multiline_token.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'InvalidParseStart', text: '''' +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─InvalidParseStart '''' // CHECK:STDOUT: hello -// CHECK:STDOUT: '''', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParseSubtree', text: '''' +// CHECK:STDOUT: '''' has_error +// CHECK:STDOUT: ├─InvalidParseSubtree '''' // CHECK:STDOUT: hello -// CHECK:STDOUT: '''', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: '''' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/basics/parens.carbon b/toolchain/parse/testdata/basics/parens.carbon index 0c74f56eeab7..ca339fd80d27 100644 --- a/toolchain/parse/testdata/basics/parens.carbon +++ b/toolchain/parse/testdata/basics/parens.carbon @@ -13,30 +13,29 @@ fn F(n: i32) -> i32 { } // CHECK:STDOUT: - filename: parens.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'n'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'ParenExprStart', text: '('}, -// CHECK:STDOUT: {kind: 'ParenExprStart', text: '('}, -// CHECK:STDOUT: {kind: 'ParenExprStart', text: '('}, -// CHECK:STDOUT: {kind: 'ParenExprStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'ParenExpr', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ParenExpr', text: ')', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ParenExpr', text: ')', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ParenExpr', text: ')', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 23}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'n' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ ├─ReturnType '->' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ │ ╭─ParenExprStart '(' +// CHECK:STDOUT: │ │ │ │ ╭─ParenExprStart '(' +// CHECK:STDOUT: │ │ │ │ │ ╭─ParenExprStart '(' +// CHECK:STDOUT: │ │ │ │ │ │ ╭─ParenExprStart '(' +// CHECK:STDOUT: │ │ │ │ │ │ ├─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ │ │ │ │ ├─ParenExpr ')' +// CHECK:STDOUT: │ │ │ │ ├─ParenExpr ')' +// CHECK:STDOUT: │ │ │ ├─ParenExpr ')' +// CHECK:STDOUT: │ │ ├─ParenExpr ')' +// CHECK:STDOUT: │ ├─ReturnStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/basics/type_literals.carbon b/toolchain/parse/testdata/basics/type_literals.carbon index 15d6153ab96a..e54e0f1ab340 100644 --- a/toolchain/parse/testdata/basics/type_literals.carbon +++ b/toolchain/parse/testdata/basics/type_literals.carbon @@ -14,43 +14,42 @@ var test_char: char = 'c'; var test_str: str = "Test"; // CHECK:STDOUT: - filename: type_literals.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'test_i32'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'test_f64'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'FloatTypeLiteral', text: 'f64'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'RealLiteral', text: '0.1'}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'test_char'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'CharTypeLiteral', text: 'char'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'CharLiteral', text: ''c''}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'test_str'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'StringTypeLiteral', text: 'str'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StringLiteral', text: '"Test"'}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'test_i32' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ ├─IntLiteral '0' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'test_f64' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─FloatTypeLiteral 'f64' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ ├─RealLiteral '0.1' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'test_char' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─CharTypeLiteral 'char' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ ├─CharLiteral ''c'' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'test_str' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─StringTypeLiteral 'str' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ ├─StringLiteral '"Test"' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/basics/value_literals.carbon b/toolchain/parse/testdata/basics/value_literals.carbon index 999e4de74715..38e0c966b15f 100644 --- a/toolchain/parse/testdata/basics/value_literals.carbon +++ b/toolchain/parse/testdata/basics/value_literals.carbon @@ -46,119 +46,114 @@ var c: Core.Char = 'c'; var test_str: str = "Test"; // CHECK:STDOUT: - filename: int_literals.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'ints'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'ArrayExprKeyword', text: 'array'}, -// CHECK:STDOUT: {kind: 'ArrayExprOpenParen', text: '('}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'ArrayExprComma', text: ','}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '5'}, -// CHECK:STDOUT: {kind: 'ArrayExpr', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '8'}, -// CHECK:STDOUT: {kind: 'TupleLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '9'}, -// CHECK:STDOUT: {kind: 'TupleLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0x8'}, -// CHECK:STDOUT: {kind: 'TupleLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0b1000'}, -// CHECK:STDOUT: {kind: 'TupleLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '39999999999999999993'}, -// CHECK:STDOUT: {kind: 'TupleLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 25}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'ints' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ╭─ArrayExprKeyword 'array' +// CHECK:STDOUT: │ │ │ ├─ArrayExprOpenParen '(' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─ArrayExprComma ',' +// CHECK:STDOUT: │ │ │ ├─IntLiteral '5' +// CHECK:STDOUT: │ │ ├─ArrayExpr ')' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ ├─IntLiteral '8' +// CHECK:STDOUT: │ │ ├─TupleLiteralComma ',' +// CHECK:STDOUT: │ │ ├─IntLiteral '9' +// CHECK:STDOUT: │ │ ├─TupleLiteralComma ',' +// CHECK:STDOUT: │ │ ├─IntLiteral '0x8' +// CHECK:STDOUT: │ │ ├─TupleLiteralComma ',' +// CHECK:STDOUT: │ │ ├─IntLiteral '0b1000' +// CHECK:STDOUT: │ │ ├─TupleLiteralComma ',' +// CHECK:STDOUT: │ │ ├─IntLiteral '39999999999999999993' +// CHECK:STDOUT: │ │ ├─TupleLiteralComma ',' +// CHECK:STDOUT: │ ├─TupleLiteral ')' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: real_literals.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'reals'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'ArrayExprKeyword', text: 'array'}, -// CHECK:STDOUT: {kind: 'ArrayExprOpenParen', text: '('}, -// CHECK:STDOUT: {kind: 'FloatTypeLiteral', text: 'f64'}, -// CHECK:STDOUT: {kind: 'ArrayExprComma', text: ','}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '7'}, -// CHECK:STDOUT: {kind: 'ArrayExpr', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'RealLiteral', text: '0.9'}, -// CHECK:STDOUT: {kind: 'TupleLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'RealLiteral', text: '8.0'}, -// CHECK:STDOUT: {kind: 'TupleLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'RealLiteral', text: '80.0'}, -// CHECK:STDOUT: {kind: 'TupleLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'RealLiteral', text: '1.0e7'}, -// CHECK:STDOUT: {kind: 'TupleLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'RealLiteral', text: '1.0e8'}, -// CHECK:STDOUT: {kind: 'TupleLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'RealLiteral', text: '1.0e-8'}, -// CHECK:STDOUT: {kind: 'TupleLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'RealLiteral', text: '39999999999999999993.0e39999999999999999993'}, -// CHECK:STDOUT: {kind: 'TupleLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 16}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 29}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'reals' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ╭─ArrayExprKeyword 'array' +// CHECK:STDOUT: │ │ │ ├─ArrayExprOpenParen '(' +// CHECK:STDOUT: │ │ │ ├─FloatTypeLiteral 'f64' +// CHECK:STDOUT: │ │ │ ├─ArrayExprComma ',' +// CHECK:STDOUT: │ │ │ ├─IntLiteral '7' +// CHECK:STDOUT: │ │ ├─ArrayExpr ')' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ ├─RealLiteral '0.9' +// CHECK:STDOUT: │ │ ├─TupleLiteralComma ',' +// CHECK:STDOUT: │ │ ├─RealLiteral '8.0' +// CHECK:STDOUT: │ │ ├─TupleLiteralComma ',' +// CHECK:STDOUT: │ │ ├─RealLiteral '80.0' +// CHECK:STDOUT: │ │ ├─TupleLiteralComma ',' +// CHECK:STDOUT: │ │ ├─RealLiteral '1.0e7' +// CHECK:STDOUT: │ │ ├─TupleLiteralComma ',' +// CHECK:STDOUT: │ │ ├─RealLiteral '1.0e8' +// CHECK:STDOUT: │ │ ├─TupleLiteralComma ',' +// CHECK:STDOUT: │ │ ├─RealLiteral '1.0e-8' +// CHECK:STDOUT: │ │ ├─TupleLiteralComma ',' +// CHECK:STDOUT: │ │ ├─RealLiteral '39999999999999999993.0e39999999999999999993' +// CHECK:STDOUT: │ │ ├─TupleLiteralComma ',' +// CHECK:STDOUT: │ ├─TupleLiteral ')' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: bool_literal.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'f'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'BoolTypeLiteral', text: 'bool'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'BoolLiteralFalse', text: 'false'}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 't'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'BoolTypeLiteral', text: 'bool'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'BoolLiteralTrue', text: 'true'}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'f' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─BoolTypeLiteral 'bool' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ ├─BoolLiteralFalse 'false' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 't' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─BoolTypeLiteral 'bool' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ ├─BoolLiteralTrue 'true' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: char_literal.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'c'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'CoreNameExpr', text: 'Core'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Char'}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'CharLiteral', text: ''c''}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'c' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ╭─CoreNameExpr 'Core' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameNotBeforeSignature 'Char' +// CHECK:STDOUT: │ │ ├─MemberAccessExpr '.' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ ├─CharLiteral ''c'' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: string_literal.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'test_str'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'StringTypeLiteral', text: 'str'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StringLiteral', text: '"Test"'}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'test_str' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─StringTypeLiteral 'str' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ ├─StringLiteral '"Test"' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/choice/basic.carbon b/toolchain/parse/testdata/choice/basic.carbon index a900e659f8eb..fcdd0c3a84cb 100644 --- a/toolchain/parse/testdata/choice/basic.carbon +++ b/toolchain/parse/testdata/choice/basic.carbon @@ -16,18 +16,17 @@ choice Ordering { } // CHECK:STDOUT: - filename: basic.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ChoiceIntroducer', text: 'choice'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Ordering'}, -// CHECK:STDOUT: {kind: 'ChoiceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Less'}, -// CHECK:STDOUT: {kind: 'ChoiceAlternativeListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Equivalent'}, -// CHECK:STDOUT: {kind: 'ChoiceAlternativeListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Greater'}, -// CHECK:STDOUT: {kind: 'ChoiceAlternativeListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Incomparable'}, -// CHECK:STDOUT: {kind: 'ChoiceDefinition', text: '}', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ChoiceIntroducer 'choice' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Ordering' +// CHECK:STDOUT: │ ╭─ChoiceDefinitionStart '{' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Less' +// CHECK:STDOUT: │ ├─ChoiceAlternativeListComma ',' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Equivalent' +// CHECK:STDOUT: │ ├─ChoiceAlternativeListComma ',' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Greater' +// CHECK:STDOUT: │ ├─ChoiceAlternativeListComma ',' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Incomparable' +// CHECK:STDOUT: ├─ChoiceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/choice/fail_alternative_with_implicit_params.carbon b/toolchain/parse/testdata/choice/fail_alternative_with_implicit_params.carbon index e3ca63fd98d6..2e13e7735baa 100644 --- a/toolchain/parse/testdata/choice/fail_alternative_with_implicit_params.carbon +++ b/toolchain/parse/testdata/choice/fail_alternative_with_implicit_params.carbon @@ -17,12 +17,11 @@ choice X { } // CHECK:STDOUT: - filename: fail_alternative_with_implicit_params.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ChoiceIntroducer', text: 'choice'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'X'}, -// CHECK:STDOUT: {kind: 'ChoiceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'A'}, -// CHECK:STDOUT: {kind: 'ChoiceDefinition', text: '}', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ChoiceIntroducer 'choice' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'X' +// CHECK:STDOUT: │ ╭─ChoiceDefinitionStart '{' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'A' +// CHECK:STDOUT: ├─ChoiceDefinition '}' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/choice/fail_invalid_alternative_identifier.carbon b/toolchain/parse/testdata/choice/fail_invalid_alternative_identifier.carbon index 952c7d41cc81..deec11e9eee1 100644 --- a/toolchain/parse/testdata/choice/fail_invalid_alternative_identifier.carbon +++ b/toolchain/parse/testdata/choice/fail_invalid_alternative_identifier.carbon @@ -23,12 +23,11 @@ choice InvalidAlternativeIdentifier { } // CHECK:STDOUT: - filename: fail_invalid_alternative_identifier.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ChoiceIntroducer', text: 'choice'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'InvalidAlternativeIdentifier'}, -// CHECK:STDOUT: {kind: 'ChoiceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Other'}, -// CHECK:STDOUT: {kind: 'ChoiceDefinition', text: '}', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ChoiceIntroducer 'choice' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'InvalidAlternativeIdentifier' +// CHECK:STDOUT: │ ╭─ChoiceDefinitionStart '{' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Other' +// CHECK:STDOUT: ├─ChoiceDefinition '}' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/choice/fail_invalid_braces.carbon b/toolchain/parse/testdata/choice/fail_invalid_braces.carbon index 24d128ba7df8..62f55d0d6dad 100644 --- a/toolchain/parse/testdata/choice/fail_invalid_braces.carbon +++ b/toolchain/parse/testdata/choice/fail_invalid_braces.carbon @@ -21,13 +21,12 @@ choice InvalidBraces | | // CHECK:STDOUT: - filename: fail_invalid_braces.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ChoiceIntroducer', text: 'choice'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'InvalidBraces'}, -// CHECK:STDOUT: {kind: 'ChoiceDefinitionStart', text: '|', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ChoiceDefinition', text: '|', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'InvalidParseStart', text: '|', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParseSubtree', text: '|', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ChoiceIntroducer 'choice' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'InvalidBraces' +// CHECK:STDOUT: │ ╭─ChoiceDefinitionStart '|' has_error +// CHECK:STDOUT: ├─ChoiceDefinition '|' has_error +// CHECK:STDOUT: │ ╭─InvalidParseStart '|' has_error +// CHECK:STDOUT: ├─InvalidParseSubtree '|' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/choice/fail_missing_definition.carbon b/toolchain/parse/testdata/choice/fail_missing_definition.carbon index 11a130e33769..94bd3e849017 100644 --- a/toolchain/parse/testdata/choice/fail_missing_definition.carbon +++ b/toolchain/parse/testdata/choice/fail_missing_definition.carbon @@ -15,11 +15,10 @@ choice MissingDefinition; // CHECK:STDOUT: - filename: fail_missing_definition.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ChoiceIntroducer', text: 'choice'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'MissingDefinition'}, -// CHECK:STDOUT: {kind: 'ChoiceDefinitionStart', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ChoiceDefinition', text: ';', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ChoiceIntroducer 'choice' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'MissingDefinition' +// CHECK:STDOUT: │ ╭─ChoiceDefinitionStart ';' has_error +// CHECK:STDOUT: ├─ChoiceDefinition ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/choice/fail_missing_definition_parameterized.carbon b/toolchain/parse/testdata/choice/fail_missing_definition_parameterized.carbon index c6f0d959c493..e7f7b07434fd 100644 --- a/toolchain/parse/testdata/choice/fail_missing_definition_parameterized.carbon +++ b/toolchain/parse/testdata/choice/fail_missing_definition_parameterized.carbon @@ -15,17 +15,16 @@ choice MissingDefinition(T: type); // CHECK:STDOUT: - filename: fail_missing_definition_parameterized.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ChoiceIntroducer', text: 'choice'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'MissingDefinition'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'T'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ChoiceDefinitionStart', text: ';', has_error: yes, subtree_size: 9}, -// CHECK:STDOUT: {kind: 'ChoiceDefinition', text: ';', has_error: yes, subtree_size: 10}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ChoiceIntroducer 'choice' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'MissingDefinition' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'T' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─TypeTypeLiteral 'type' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─ChoiceDefinitionStart ';' has_error +// CHECK:STDOUT: ├─ChoiceDefinition ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/choice/fail_qualified_alternative_name.carbon b/toolchain/parse/testdata/choice/fail_qualified_alternative_name.carbon index 075549f8e3d2..f08f07ea7f11 100644 --- a/toolchain/parse/testdata/choice/fail_qualified_alternative_name.carbon +++ b/toolchain/parse/testdata/choice/fail_qualified_alternative_name.carbon @@ -17,12 +17,11 @@ choice X { } // CHECK:STDOUT: - filename: fail_qualified_alternative_name.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ChoiceIntroducer', text: 'choice'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'X'}, -// CHECK:STDOUT: {kind: 'ChoiceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'A'}, -// CHECK:STDOUT: {kind: 'ChoiceDefinition', text: '}', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ChoiceIntroducer 'choice' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'X' +// CHECK:STDOUT: │ ╭─ChoiceDefinitionStart '{' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'A' +// CHECK:STDOUT: ├─ChoiceDefinition '}' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/choice/local.carbon b/toolchain/parse/testdata/choice/local.carbon index f879de3b7af0..d056e998f590 100644 --- a/toolchain/parse/testdata/choice/local.carbon +++ b/toolchain/parse/testdata/choice/local.carbon @@ -16,20 +16,19 @@ fn F() { } // CHECK:STDOUT: - filename: local.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ChoiceIntroducer', text: 'choice'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'C'}, -// CHECK:STDOUT: {kind: 'ChoiceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'X'}, -// CHECK:STDOUT: {kind: 'ChoiceAlternativeListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Y'}, -// CHECK:STDOUT: {kind: 'ChoiceDefinition', text: '}', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─ChoiceIntroducer 'choice' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'C' +// CHECK:STDOUT: │ │ ╭─ChoiceDefinitionStart '{' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'X' +// CHECK:STDOUT: │ │ ├─ChoiceAlternativeListComma ',' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'Y' +// CHECK:STDOUT: │ ├─ChoiceDefinition '}' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/choice/modifiers.carbon b/toolchain/parse/testdata/choice/modifiers.carbon index 4a84e3c2aa86..9acc48c6dd15 100644 --- a/toolchain/parse/testdata/choice/modifiers.carbon +++ b/toolchain/parse/testdata/choice/modifiers.carbon @@ -16,19 +16,18 @@ private choice Ordering { } // CHECK:STDOUT: - filename: modifiers.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ChoiceIntroducer', text: 'choice'}, -// CHECK:STDOUT: {kind: 'PrivateModifier', text: 'private'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Ordering'}, -// CHECK:STDOUT: {kind: 'ChoiceDefinitionStart', text: '{', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Less'}, -// CHECK:STDOUT: {kind: 'ChoiceAlternativeListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Equivalent'}, -// CHECK:STDOUT: {kind: 'ChoiceAlternativeListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Greater'}, -// CHECK:STDOUT: {kind: 'ChoiceAlternativeListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Incomparable'}, -// CHECK:STDOUT: {kind: 'ChoiceDefinition', text: '}', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ChoiceIntroducer 'choice' +// CHECK:STDOUT: │ ├─PrivateModifier 'private' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Ordering' +// CHECK:STDOUT: │ ╭─ChoiceDefinitionStart '{' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Less' +// CHECK:STDOUT: │ ├─ChoiceAlternativeListComma ',' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Equivalent' +// CHECK:STDOUT: │ ├─ChoiceAlternativeListComma ',' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Greater' +// CHECK:STDOUT: │ ├─ChoiceAlternativeListComma ',' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Incomparable' +// CHECK:STDOUT: ├─ChoiceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/choice/parameterized.carbon b/toolchain/parse/testdata/choice/parameterized.carbon index e0256a53c48a..c7536984ff32 100644 --- a/toolchain/parse/testdata/choice/parameterized.carbon +++ b/toolchain/parse/testdata/choice/parameterized.carbon @@ -14,27 +14,26 @@ choice OptionalElement(T: type) { } // CHECK:STDOUT: - filename: parameterized.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ChoiceIntroducer', text: 'choice'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'OptionalElement'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'T'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ChoiceDefinitionStart', text: '{', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Element'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'value'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'T'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ChoiceAlternativeListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'None'}, -// CHECK:STDOUT: {kind: 'ChoiceAlternativeListComma', text: ','}, -// CHECK:STDOUT: {kind: 'ChoiceDefinition', text: '}', subtree_size: 20}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ChoiceIntroducer 'choice' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'OptionalElement' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'T' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─TypeTypeLiteral 'type' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─ChoiceDefinitionStart '{' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'Element' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'value' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'T' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ├─ChoiceAlternativeListComma ',' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'None' +// CHECK:STDOUT: │ ├─ChoiceAlternativeListComma ',' +// CHECK:STDOUT: ├─ChoiceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/class/adapt.carbon b/toolchain/parse/testdata/class/adapt.carbon index c092a16d4d44..9542228c7f1c 100644 --- a/toolchain/parse/testdata/class/adapt.carbon +++ b/toolchain/parse/testdata/class/adapt.carbon @@ -72,102 +72,100 @@ fn F() { } // CHECK:STDOUT: - filename: adapt.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'A'}, -// CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'AdaptIntroducer', text: 'adapt'}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'AdaptDecl', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'B'}, -// CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'AdaptIntroducer', text: 'adapt'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'A'}, -// CHECK:STDOUT: {kind: 'AdaptDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'C'}, -// CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'AdaptIntroducer', text: 'adapt'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'AdaptDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'D'}, -// CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'AdaptIntroducer', text: 'adapt'}, -// CHECK:STDOUT: {kind: 'ExtendModifier', text: 'extend'}, -// CHECK:STDOUT: {kind: 'StructTypeLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'StructTypeLiteralField', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructTypeLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'StructTypeLiteralField', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructTypeLiteral', text: '}', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'AdaptDecl', text: ';', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 18}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'E'}, -// CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'AdaptIntroducer', text: 'adapt'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'GetType'}, -// CHECK:STDOUT: {kind: 'CallExprStart', text: '(', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '42'}, -// CHECK:STDOUT: {kind: 'CallExpr', text: ')', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'AdaptDecl', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'AdaptIntroducer', text: 'adapt'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'AdaptDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'A' +// CHECK:STDOUT: │ ╭─ClassDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─AdaptIntroducer 'adapt' +// CHECK:STDOUT: │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ ├─AdaptDecl ';' +// CHECK:STDOUT: ├─ClassDefinition '}' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'B' +// CHECK:STDOUT: │ ╭─ClassDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─AdaptIntroducer 'adapt' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'A' +// CHECK:STDOUT: │ ├─AdaptDecl ';' +// CHECK:STDOUT: ├─ClassDefinition '}' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'C' +// CHECK:STDOUT: │ ╭─ClassDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─AdaptIntroducer 'adapt' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ ├─AdaptDecl ';' +// CHECK:STDOUT: ├─ClassDefinition '}' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'D' +// CHECK:STDOUT: │ ╭─ClassDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─AdaptIntroducer 'adapt' +// CHECK:STDOUT: │ │ ├─ExtendModifier 'extend' +// CHECK:STDOUT: │ │ │ ╭─StructTypeLiteralStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─StructTypeLiteralField ':' +// CHECK:STDOUT: │ │ │ ├─StructTypeLiteralComma ',' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─StructTypeLiteralField ':' +// CHECK:STDOUT: │ │ ├─StructTypeLiteral '}' +// CHECK:STDOUT: │ ├─AdaptDecl ';' +// CHECK:STDOUT: ├─ClassDefinition '}' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'E' +// CHECK:STDOUT: │ ╭─ClassDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─AdaptIntroducer 'adapt' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'GetType' +// CHECK:STDOUT: │ │ │ ╭─CallExprStart '(' +// CHECK:STDOUT: │ │ │ ├─IntLiteral '42' +// CHECK:STDOUT: │ │ ├─CallExpr ')' +// CHECK:STDOUT: │ ├─AdaptDecl ';' +// CHECK:STDOUT: ├─ClassDefinition '}' +// CHECK:STDOUT: │ ╭─AdaptIntroducer 'adapt' +// CHECK:STDOUT: │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: ├─AdaptDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_bad_syntax.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'A'}, -// CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'AdaptIntroducer', text: 'adapt'}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '1'}, -// CHECK:STDOUT: {kind: 'AdaptDecl', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'B'}, -// CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'AdaptIntroducer', text: 'adapt'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ';', has_error: yes}, -// CHECK:STDOUT: {kind: 'AdaptDecl', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'C'}, -// CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'AdaptIntroducer', text: 'adapt'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '}', has_error: yes}, -// CHECK:STDOUT: {kind: 'AdaptDecl', text: 'adapt', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'D'}, -// CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'AdaptIntroducer', text: 'adapt'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: 'class', has_error: yes}, -// CHECK:STDOUT: {kind: 'AdaptDecl', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'AdaptIntroducer', text: 'adapt'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'AdaptDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'A' +// CHECK:STDOUT: │ ╭─ClassDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─AdaptIntroducer 'adapt' +// CHECK:STDOUT: │ │ ├─IntLiteral '1' +// CHECK:STDOUT: │ ├─AdaptDecl ';' has_error +// CHECK:STDOUT: ├─ClassDefinition '}' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'B' +// CHECK:STDOUT: │ ╭─ClassDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─AdaptIntroducer 'adapt' +// CHECK:STDOUT: │ │ ├─InvalidParse ';' has_error +// CHECK:STDOUT: │ ├─AdaptDecl ';' has_error +// CHECK:STDOUT: ├─ClassDefinition '}' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'C' +// CHECK:STDOUT: │ ╭─ClassDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─AdaptIntroducer 'adapt' +// CHECK:STDOUT: │ │ ├─InvalidParse '}' has_error +// CHECK:STDOUT: │ ├─AdaptDecl 'adapt' has_error +// CHECK:STDOUT: ├─ClassDefinition '}' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'D' +// CHECK:STDOUT: │ ╭─ClassDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─AdaptIntroducer 'adapt' +// CHECK:STDOUT: │ │ ├─InvalidParse 'class' has_error +// CHECK:STDOUT: │ ├─AdaptDecl ';' has_error +// CHECK:STDOUT: ├─ClassDefinition '}' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─AdaptIntroducer 'adapt' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ ├─AdaptDecl ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/class/base.carbon b/toolchain/parse/testdata/class/base.carbon index 71b98631b54c..f1445d86edd7 100644 --- a/toolchain/parse/testdata/class/base.carbon +++ b/toolchain/parse/testdata/class/base.carbon @@ -18,34 +18,33 @@ class D { } // CHECK:STDOUT: - filename: base.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'BaseModifier', text: 'base'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'B'}, -// CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'D'}, -// CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'BaseIntroducer', text: 'base'}, -// CHECK:STDOUT: {kind: 'BaseColon', text: ':'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'B1'}, -// CHECK:STDOUT: {kind: 'BaseDecl', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'BaseIntroducer', text: 'base'}, -// CHECK:STDOUT: {kind: 'ExtendModifier', text: 'extend'}, -// CHECK:STDOUT: {kind: 'BaseColon', text: ':'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'B2'}, -// CHECK:STDOUT: {kind: 'BaseDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'BaseModifier', text: 'base'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Nested'}, -// CHECK:STDOUT: {kind: 'ClassDecl', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'PrivateModifier', text: 'private'}, -// CHECK:STDOUT: {kind: 'BaseModifier', text: 'base'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'PrivateNested'}, -// CHECK:STDOUT: {kind: 'ClassDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 22}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─BaseModifier 'base' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'B' +// CHECK:STDOUT: │ ╭─ClassDefinitionStart '{' +// CHECK:STDOUT: ├─ClassDefinition '}' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'D' +// CHECK:STDOUT: │ ╭─ClassDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─BaseIntroducer 'base' +// CHECK:STDOUT: │ │ ├─BaseColon ':' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'B1' +// CHECK:STDOUT: │ ├─BaseDecl ';' +// CHECK:STDOUT: │ │ ╭─BaseIntroducer 'base' +// CHECK:STDOUT: │ │ ├─ExtendModifier 'extend' +// CHECK:STDOUT: │ │ ├─BaseColon ':' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'B2' +// CHECK:STDOUT: │ ├─BaseDecl ';' +// CHECK:STDOUT: │ │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ │ ├─BaseModifier 'base' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'Nested' +// CHECK:STDOUT: │ ├─ClassDecl ';' +// CHECK:STDOUT: │ │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ │ ├─PrivateModifier 'private' +// CHECK:STDOUT: │ │ ├─BaseModifier 'base' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'PrivateNested' +// CHECK:STDOUT: │ ├─ClassDecl ';' +// CHECK:STDOUT: ├─ClassDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/class/base_misplaced.carbon b/toolchain/parse/testdata/class/base_misplaced.carbon index 96bb2af6c807..4ec2957ff8e4 100644 --- a/toolchain/parse/testdata/class/base_misplaced.carbon +++ b/toolchain/parse/testdata/class/base_misplaced.carbon @@ -19,26 +19,25 @@ fn F() { // CHECK:STDOUT: - filename: base_misplaced.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'BaseModifier', text: 'base'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'B'}, -// CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'BaseIntroducer', text: 'base'}, -// CHECK:STDOUT: {kind: 'BaseColon', text: ':'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'B'}, -// CHECK:STDOUT: {kind: 'BaseDecl', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'BaseIntroducer', text: 'base'}, -// CHECK:STDOUT: {kind: 'BaseColon', text: ':'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'B'}, -// CHECK:STDOUT: {kind: 'BaseDecl', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─BaseModifier 'base' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'B' +// CHECK:STDOUT: │ ╭─ClassDefinitionStart '{' +// CHECK:STDOUT: ├─ClassDefinition '}' +// CHECK:STDOUT: │ ╭─BaseIntroducer 'base' +// CHECK:STDOUT: │ ├─BaseColon ':' +// CHECK:STDOUT: │ ├─IdentifierNameExpr 'B' +// CHECK:STDOUT: ├─BaseDecl ';' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─BaseIntroducer 'base' +// CHECK:STDOUT: │ │ ├─BaseColon ':' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'B' +// CHECK:STDOUT: │ ├─BaseDecl ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/class/basic.carbon b/toolchain/parse/testdata/class/basic.carbon index b02b5dbd9ce0..efcfa849325f 100644 --- a/toolchain/parse/testdata/class/basic.carbon +++ b/toolchain/parse/testdata/class/basic.carbon @@ -13,16 +13,15 @@ class Foo { } // CHECK:STDOUT: - filename: basic.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Baz'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', 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: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Foo' +// CHECK:STDOUT: │ ╭─ClassDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ ├─IdentifierNameMaybeBeforeSignature 'Baz' +// CHECK:STDOUT: │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ├─FunctionDecl ';' +// CHECK:STDOUT: ├─ClassDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/class/fail_base.carbon b/toolchain/parse/testdata/class/fail_base.carbon index 486eb0e80e46..afbe340e2ab7 100644 --- a/toolchain/parse/testdata/class/fail_base.carbon +++ b/toolchain/parse/testdata/class/fail_base.carbon @@ -47,38 +47,37 @@ class B { } // CHECK:STDOUT: - filename: fail_base.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'A'}, -// CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'BaseIntroducer', text: 'base'}, -// CHECK:STDOUT: {kind: 'BaseDecl', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'BaseIntroducer', text: 'base'}, -// CHECK:STDOUT: {kind: 'BaseDecl', text: '}', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'BaseIntroducer', text: 'base'}, -// CHECK:STDOUT: {kind: 'BaseColon', text: ':'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ';', has_error: yes}, -// CHECK:STDOUT: {kind: 'BaseDecl', text: ';', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'BaseIntroducer', text: 'base'}, -// CHECK:STDOUT: {kind: 'BaseColon', text: ':'}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'BaseDecl', text: ';', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 17}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'BaseModifier', text: 'base'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'B'}, -// CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'BaseIntroducer', text: 'base'}, -// CHECK:STDOUT: {kind: 'ExtendModifier', text: 'extend'}, -// CHECK:STDOUT: {kind: 'BaseColon', text: 'Foo', has_error: yes}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'BaseDecl', text: ';', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'A' +// CHECK:STDOUT: │ ╭─ClassDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─BaseIntroducer 'base' +// CHECK:STDOUT: │ ├─BaseDecl ';' has_error +// CHECK:STDOUT: │ │ ╭─BaseIntroducer 'base' +// CHECK:STDOUT: │ ├─BaseDecl '}' has_error +// CHECK:STDOUT: │ │ ╭─BaseIntroducer 'base' +// CHECK:STDOUT: │ │ ├─BaseColon ':' +// CHECK:STDOUT: │ │ ├─InvalidParse ';' has_error +// CHECK:STDOUT: │ ├─BaseDecl ';' has_error +// CHECK:STDOUT: │ │ ╭─BaseIntroducer 'base' +// CHECK:STDOUT: │ │ ├─BaseColon ':' +// CHECK:STDOUT: │ │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ │ ├─StructLiteral '}' +// CHECK:STDOUT: │ ├─BaseDecl ';' has_error +// CHECK:STDOUT: ├─ClassDefinition '}' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─BaseModifier 'base' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Foo' +// CHECK:STDOUT: │ ╭─ClassDefinitionStart '{' +// CHECK:STDOUT: ├─ClassDefinition '}' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'B' +// CHECK:STDOUT: │ ╭─ClassDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─BaseIntroducer 'base' +// CHECK:STDOUT: │ │ ├─ExtendModifier 'extend' +// CHECK:STDOUT: │ │ ├─BaseColon 'Foo' has_error +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'Foo' +// CHECK:STDOUT: │ ├─BaseDecl ';' has_error +// CHECK:STDOUT: ├─ClassDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/class/fail_modifiers.carbon b/toolchain/parse/testdata/class/fail_modifiers.carbon index 9b6c30b292a5..8af47e0319bf 100644 --- a/toolchain/parse/testdata/class/fail_modifiers.carbon +++ b/toolchain/parse/testdata/class/fail_modifiers.carbon @@ -35,33 +35,30 @@ class C { } // CHECK:STDOUT: - filename: fail_virtual_class.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'VirtualModifier', text: 'virtual'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'B'}, -// CHECK:STDOUT: {kind: 'ClassDecl', text: 'B', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─VirtualModifier 'virtual' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'B' +// CHECK:STDOUT: ├─ClassDecl 'B' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_impl_class.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'ImplModifier', text: 'impl'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '', has_error: yes}, -// CHECK:STDOUT: {kind: 'ClassDecl', text: 'class', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─ImplModifier 'impl' +// CHECK:STDOUT: │ ├─InvalidParse '' has_error +// CHECK:STDOUT: ├─ClassDecl 'class' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_extend_adapt_base.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'C'}, -// CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'AdaptIntroducer', text: 'adapt'}, -// CHECK:STDOUT: {kind: 'ExtendModifier', text: 'extend'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: 'base', has_error: yes}, -// CHECK:STDOUT: {kind: 'AdaptDecl', text: ';', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'C' +// CHECK:STDOUT: │ ╭─ClassDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─AdaptIntroducer 'adapt' +// CHECK:STDOUT: │ │ ├─ExtendModifier 'extend' +// CHECK:STDOUT: │ │ ├─InvalidParse 'base' has_error +// CHECK:STDOUT: │ ├─AdaptDecl ';' has_error +// CHECK:STDOUT: ├─ClassDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/class/fail_var_name.carbon b/toolchain/parse/testdata/class/fail_var_name.carbon index 8356acd0d83f..b10f8e5a3f24 100644 --- a/toolchain/parse/testdata/class/fail_var_name.carbon +++ b/toolchain/parse/testdata/class/fail_var_name.carbon @@ -63,63 +63,62 @@ class C { } // CHECK:STDOUT: - filename: fail_var_name.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'C'}, -// CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ';', has_error: yes}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'name'}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ':', has_error: yes}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ':', has_error: yes}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'name'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ';', has_error: yes}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'name'}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'name'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'C'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', has_error: yes, subtree_size: 7}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'SelfValueName', text: 'self'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'C'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'name'}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'name'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'C'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 56}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'C' +// CHECK:STDOUT: │ ╭─ClassDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─InvalidParse ';' has_error +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' has_error +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'name' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─InvalidParse ':' has_error +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' has_error +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─InvalidParse ':' has_error +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' has_error +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'name' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─InvalidParse ';' has_error +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' has_error +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' has_error +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'name' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableDecl ';' has_error +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'name' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'C' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableDecl ';' has_error +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─SelfValueName 'self' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'C' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'name' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableDecl ';' has_error +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'name' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'C' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' has_error +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' has_error +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: ├─ClassDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/class/fn_definitions.carbon b/toolchain/parse/testdata/class/fn_definitions.carbon index 47331e95fe19..2f00f36faa10 100644 --- a/toolchain/parse/testdata/class/fn_definitions.carbon +++ b/toolchain/parse/testdata/class/fn_definitions.carbon @@ -17,57 +17,56 @@ class Foo { } // CHECK:STDOUT: - filename: fn_definitions.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Make'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', 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}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'StructLiteralField', text: '=', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 16}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Baz'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'SelfValueName', text: 'self'}, -// CHECK:STDOUT: {kind: 'SelfBindingPattern', text: 'self', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'SelfValueNameExpr', text: 'self'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Modify'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'SelfValueName', text: 'self'}, -// CHECK:STDOUT: {kind: 'RefBindingName', text: 'ref', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'SelfBindingPattern', text: 'self', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'SelfValueNameExpr', text: 'self'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'PointerMemberAccessExpr', text: '->', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '1'}, -// CHECK:STDOUT: {kind: 'InfixOperatorEqual', text: '=', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 50}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Foo' +// CHECK:STDOUT: │ ╭─ClassDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ ├─IdentifierNameMaybeBeforeSignature 'Make' +// CHECK:STDOUT: │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ │ ╭─SelfTypeNameExpr 'Self' +// CHECK:STDOUT: │ │ ├─ReturnType '->' +// CHECK:STDOUT: │ │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ │ ├─IntLiteral '0' +// CHECK:STDOUT: │ │ │ │ ├─StructLiteralField '=' +// CHECK:STDOUT: │ │ │ ├─StructLiteral '}' +// CHECK:STDOUT: │ │ ├─ReturnStatement ';' +// CHECK:STDOUT: │ ├─FunctionDefinition '}' +// CHECK:STDOUT: │ │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ ├─IdentifierNameMaybeBeforeSignature 'Baz' +// CHECK:STDOUT: │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ │ ╭─SelfValueName 'self' +// CHECK:STDOUT: │ │ │ ├─SelfBindingPattern 'self' +// CHECK:STDOUT: │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─ReturnType '->' +// CHECK:STDOUT: │ │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ │ │ ╭─SelfValueNameExpr 'self' +// CHECK:STDOUT: │ │ │ │ ├─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─MemberAccessExpr '.' +// CHECK:STDOUT: │ │ ├─ReturnStatement ';' +// CHECK:STDOUT: │ ├─FunctionDefinition '}' +// CHECK:STDOUT: │ │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ ├─IdentifierNameMaybeBeforeSignature 'Modify' +// CHECK:STDOUT: │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ │ ╭─SelfValueName 'self' +// CHECK:STDOUT: │ │ │ │ ╭─RefBindingName 'ref' +// CHECK:STDOUT: │ │ │ ├─SelfBindingPattern 'self' +// CHECK:STDOUT: │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ │ ╭─SelfValueNameExpr 'self' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ╭─PointerMemberAccessExpr '->' +// CHECK:STDOUT: │ │ │ ├─IntLiteral '1' +// CHECK:STDOUT: │ │ │ ╭─InfixOperatorEqual '=' +// CHECK:STDOUT: │ │ ├─ExprStatement ';' +// CHECK:STDOUT: │ ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─ClassDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/class/introducer.carbon b/toolchain/parse/testdata/class/introducer.carbon index 7198255d9991..e04875e7cd57 100644 --- a/toolchain/parse/testdata/class/introducer.carbon +++ b/toolchain/parse/testdata/class/introducer.carbon @@ -19,41 +19,40 @@ abstract class C {} extern class D {} // CHECK:STDOUT: - filename: introducer.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'A'}, -// CHECK:STDOUT: {kind: 'ClassDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'BaseModifier', text: 'base'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'B'}, -// CHECK:STDOUT: {kind: 'ClassDecl', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'AbstractModifier', text: 'abstract'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'C'}, -// CHECK:STDOUT: {kind: 'ClassDecl', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'ExternModifier', text: 'extern'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'D'}, -// CHECK:STDOUT: {kind: 'ClassDecl', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'A'}, -// CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'BaseModifier', text: 'base'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'B'}, -// CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'AbstractModifier', text: 'abstract'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'C'}, -// CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'ExternModifier', text: 'extern'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'D'}, -// CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'A' +// CHECK:STDOUT: ├─ClassDecl ';' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─BaseModifier 'base' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'B' +// CHECK:STDOUT: ├─ClassDecl ';' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─AbstractModifier 'abstract' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'C' +// CHECK:STDOUT: ├─ClassDecl ';' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─ExternModifier 'extern' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'D' +// CHECK:STDOUT: ├─ClassDecl ';' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'A' +// CHECK:STDOUT: │ ╭─ClassDefinitionStart '{' +// CHECK:STDOUT: ├─ClassDefinition '}' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─BaseModifier 'base' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'B' +// CHECK:STDOUT: │ ╭─ClassDefinitionStart '{' +// CHECK:STDOUT: ├─ClassDefinition '}' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─AbstractModifier 'abstract' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'C' +// CHECK:STDOUT: │ ╭─ClassDefinitionStart '{' +// CHECK:STDOUT: ├─ClassDefinition '}' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─ExternModifier 'extern' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'D' +// CHECK:STDOUT: │ ╭─ClassDefinitionStart '{' +// CHECK:STDOUT: ├─ClassDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/class/local.carbon b/toolchain/parse/testdata/class/local.carbon index 92b4374d141f..ab18df7c80a7 100644 --- a/toolchain/parse/testdata/class/local.carbon +++ b/toolchain/parse/testdata/class/local.carbon @@ -17,36 +17,35 @@ fn F() { } // CHECK:STDOUT: - filename: local.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'C'}, -// CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'G'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'H'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'C'}, -// CHECK:STDOUT: {kind: 'IdentifierNameQualifierWithoutParams', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'H'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 29}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'C' +// CHECK:STDOUT: │ │ ╭─ClassDefinitionStart '{' +// CHECK:STDOUT: │ │ │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameMaybeBeforeSignature 'G' +// CHECK:STDOUT: │ │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ├─FunctionDefinition '}' +// CHECK:STDOUT: │ │ │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameMaybeBeforeSignature 'H' +// CHECK:STDOUT: │ │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ├─FunctionDecl ';' +// CHECK:STDOUT: │ ├─ClassDefinition '}' +// CHECK:STDOUT: │ │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'C' +// CHECK:STDOUT: │ │ ├─IdentifierNameQualifierWithoutParams '.' +// CHECK:STDOUT: │ │ ├─IdentifierNameMaybeBeforeSignature 'H' +// CHECK:STDOUT: │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/class/mismatched_introducer.carbon b/toolchain/parse/testdata/class/mismatched_introducer.carbon index 832b18e485d9..6c159207cfe2 100644 --- a/toolchain/parse/testdata/class/mismatched_introducer.carbon +++ b/toolchain/parse/testdata/class/mismatched_introducer.carbon @@ -14,22 +14,21 @@ base fn F(); abstract base class C; // CHECK:STDOUT: - filename: mismatched_introducer.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'AbstractModifier', text: 'abstract'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'I'}, -// CHECK:STDOUT: {kind: 'InterfaceDecl', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'BaseModifier', text: 'base'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'AbstractModifier', text: 'abstract'}, -// CHECK:STDOUT: {kind: 'BaseModifier', text: 'base'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'C'}, -// CHECK:STDOUT: {kind: 'ClassDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─AbstractModifier 'abstract' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'I' +// CHECK:STDOUT: ├─InterfaceDecl ';' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─BaseModifier 'base' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─AbstractModifier 'abstract' +// CHECK:STDOUT: │ ├─BaseModifier 'base' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'C' +// CHECK:STDOUT: ├─ClassDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/class/var.carbon b/toolchain/parse/testdata/class/var.carbon index 829eb7be6ff4..5c9db97e4b2c 100644 --- a/toolchain/parse/testdata/class/var.carbon +++ b/toolchain/parse/testdata/class/var.carbon @@ -16,35 +16,34 @@ class Foo { // CHECK:STDOUT: - filename: var.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'StaticModifier', text: 'static'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'z'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 28}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Foo' +// CHECK:STDOUT: │ ╭─ClassDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ├─IntLiteral '0' +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ├─StaticModifier 'static' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'z' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: ├─ClassDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/dump_format/pretty.carbon b/toolchain/parse/testdata/dump_format/pretty.carbon new file mode 100644 index 000000000000..8f094cf29d6e --- /dev/null +++ b/toolchain/parse/testdata/dump_format/pretty.carbon @@ -0,0 +1,36 @@ +// 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 +// +// EXTRA-ARGS: --parse-dump-format=pretty +// AUTOUPDATE +// TIP: To test this file alone, run: +// TIP: bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/parse/testdata/dump_format/pretty.carbon +// TIP: To dump output, run: +// TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/parse/testdata/dump_format/pretty.carbon + +// --- fail_pretty.carbon + +// CHECK:STDERR: fail_pretty.carbon:[[@LINE+4]]:9: error: expected `.field: field_type` or `.field = value` [ExpectedStructLiteralField] +// CHECK:STDERR: var x: {,} = {}; +// CHECK:STDERR: ^ +// CHECK:STDERR: +var x: {,} = {}; + +// CHECK:STDOUT: - filename: fail_pretty.carbon +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ │ │ ├─InvalidParse ',' has_error +// CHECK:STDOUT: │ │ │ ├─InvalidParse ',' has_error +// CHECK:STDOUT: │ │ ├─StructLiteral '}' has_error +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/dump_format/yaml_postorder.carbon b/toolchain/parse/testdata/dump_format/yaml_postorder.carbon new file mode 100644 index 000000000000..3c502ca64a35 --- /dev/null +++ b/toolchain/parse/testdata/dump_format/yaml_postorder.carbon @@ -0,0 +1,37 @@ +// 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 +// +// EXTRA-ARGS: --parse-dump-format=yaml-postorder +// AUTOUPDATE +// TIP: To test this file alone, run: +// TIP: bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/parse/testdata/dump_format/yaml_postorder.carbon +// TIP: To dump output, run: +// TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/parse/testdata/dump_format/yaml_postorder.carbon + +// --- fail_yaml_postorder.carbon + +// CHECK:STDERR: fail_yaml_postorder.carbon:[[@LINE+4]]:9: error: expected `.field: field_type` or `.field = value` [ExpectedStructLiteralField] +// CHECK:STDERR: var x: {,} = {}; +// CHECK:STDERR: ^ +// CHECK:STDERR: +var x: {,} = {}; + +// CHECK:STDOUT: - filename: fail_yaml_postorder.carbon +// CHECK:STDOUT: parse_tree: [ +// CHECK:STDOUT: {kind: 'FileStart', text: ''}, +// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, +// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, +// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, +// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, +// CHECK:STDOUT: {kind: 'InvalidParse', text: ',', has_error: yes}, +// CHECK:STDOUT: {kind: 'InvalidParse', text: ',', has_error: yes}, +// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', has_error: yes, subtree_size: 4}, +// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 7}, +// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 8}, +// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, +// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, +// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, +// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 13}, +// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, +// CHECK:STDOUT: ] diff --git a/toolchain/parse/testdata/dump_format/yaml_preorder.carbon b/toolchain/parse/testdata/dump_format/yaml_preorder.carbon new file mode 100644 index 000000000000..4776429a1d65 --- /dev/null +++ b/toolchain/parse/testdata/dump_format/yaml_preorder.carbon @@ -0,0 +1,37 @@ +// 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 +// +// EXTRA-ARGS: --parse-dump-format=yaml-preorder +// AUTOUPDATE +// TIP: To test this file alone, run: +// TIP: bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/parse/testdata/dump_format/yaml_preorder.carbon +// TIP: To dump output, run: +// TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/parse/testdata/dump_format/yaml_preorder.carbon + +// --- fail_yaml_preorder.carbon + +// CHECK:STDERR: fail_yaml_preorder.carbon:[[@LINE+4]]:9: error: expected `.field: field_type` or `.field = value` [ExpectedStructLiteralField] +// CHECK:STDERR: var x: {,} = {}; +// CHECK:STDERR: ^ +// CHECK:STDERR: +var x: {,} = {}; + +// CHECK:STDOUT: - filename: fail_yaml_preorder.carbon +// CHECK:STDOUT: parse_tree: [ +// CHECK:STDOUT: {node_index: 0, kind: 'FileStart', text: ''}, +// CHECK:STDOUT: {node_index: 13, kind: 'VariableDecl', text: ';', subtree_size: 13, children: [ +// CHECK:STDOUT: {node_index: 1, kind: 'VariableIntroducer', text: 'var'}, +// CHECK:STDOUT: {node_index: 9, kind: 'VariablePattern', text: 'var', subtree_size: 8, children: [ +// CHECK:STDOUT: {node_index: 8, kind: 'VarBindingPattern', text: ':', subtree_size: 7, children: [ +// CHECK:STDOUT: {node_index: 2, kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, +// CHECK:STDOUT: {node_index: 3, kind: 'BindingPatternTypeStart', text: ':'}, +// CHECK:STDOUT: {node_index: 7, kind: 'StructLiteral', text: '}', has_error: yes, subtree_size: 4, children: [ +// CHECK:STDOUT: {node_index: 4, kind: 'StructLiteralStart', text: '{'}, +// CHECK:STDOUT: {node_index: 5, kind: 'InvalidParse', text: ',', has_error: yes}, +// CHECK:STDOUT: {node_index: 6, kind: 'InvalidParse', text: ',', has_error: yes}]}]}]}, +// CHECK:STDOUT: {node_index: 10, kind: 'VariableInitializer', text: '='}, +// CHECK:STDOUT: {node_index: 12, kind: 'StructLiteral', text: '}', subtree_size: 2, children: [ +// CHECK:STDOUT: {node_index: 11, kind: 'StructLiteralStart', text: '{'}]}]}, +// CHECK:STDOUT: {node_index: 14, kind: 'FileEnd', text: ''}, +// CHECK:STDOUT: ] diff --git a/toolchain/parse/testdata/for/fail_colon_instead_of_in.carbon b/toolchain/parse/testdata/for/fail_colon_instead_of_in.carbon index b4e3de2f4454..736c4687dfab 100644 --- a/toolchain/parse/testdata/for/fail_colon_instead_of_in.carbon +++ b/toolchain/parse/testdata/for/fail_colon_instead_of_in.carbon @@ -19,29 +19,28 @@ fn foo() { } // CHECK:STDOUT: - filename: fail_colon_instead_of_in.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'foo'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ForHeaderStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ForIn', text: ':', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ForHeader', text: ')', has_error: yes, subtree_size: 8}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Print'}, -// CHECK:STDOUT: {kind: 'CallExprStart', text: '(', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'x'}, -// CHECK:STDOUT: {kind: 'CallExpr', text: ')', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: '}', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ForStatement', text: 'for', subtree_size: 16}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 22}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'foo' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─ForHeaderStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ │ ╭─VariablePattern 'var' +// CHECK:STDOUT: │ │ ├─ForIn ':' has_error +// CHECK:STDOUT: │ │ ╭─ForHeader ')' has_error +// CHECK:STDOUT: │ │ │ ╭─CodeBlockStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameExpr 'Print' +// CHECK:STDOUT: │ │ │ │ ╭─CallExprStart '(' +// CHECK:STDOUT: │ │ │ │ ├─IdentifierNameExpr 'x' +// CHECK:STDOUT: │ │ │ │ ╭─CallExpr ')' +// CHECK:STDOUT: │ │ │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ├─CodeBlock '}' +// CHECK:STDOUT: │ ├─ForStatement 'for' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/for/fail_missing_cond.carbon b/toolchain/parse/testdata/for/fail_missing_cond.carbon index 30be0408ff4a..cefa5d2ce573 100644 --- a/toolchain/parse/testdata/for/fail_missing_cond.carbon +++ b/toolchain/parse/testdata/for/fail_missing_cond.carbon @@ -34,24 +34,23 @@ fn F() { } // CHECK:STDOUT: - filename: fail_missing_cond.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ForHeaderStart', text: 'for', has_error: yes}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ForIn', text: 'for', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '}', has_error: yes}, -// CHECK:STDOUT: {kind: 'ForHeader', text: 'for', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: '}', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '}', has_error: yes}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: '}', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: '}', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ForStatement', text: 'for', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 17}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─ForHeaderStart 'for' has_error +// CHECK:STDOUT: │ │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─StructPattern '}' +// CHECK:STDOUT: │ │ ├─ForIn 'for' has_error +// CHECK:STDOUT: │ │ ├─InvalidParse '}' has_error +// CHECK:STDOUT: │ │ ╭─ForHeader 'for' has_error +// CHECK:STDOUT: │ │ │ ╭─CodeBlockStart '}' has_error +// CHECK:STDOUT: │ │ │ │ ╭─InvalidParse '}' has_error +// CHECK:STDOUT: │ │ │ ├─ExprStatement '}' has_error +// CHECK:STDOUT: │ │ ├─CodeBlock '}' has_error +// CHECK:STDOUT: │ ├─ForStatement 'for' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/for/fail_missing_in.carbon b/toolchain/parse/testdata/for/fail_missing_in.carbon index bf6b744c6613..249a2b60b220 100644 --- a/toolchain/parse/testdata/for/fail_missing_in.carbon +++ b/toolchain/parse/testdata/for/fail_missing_in.carbon @@ -19,29 +19,28 @@ fn foo() { } // CHECK:STDOUT: - filename: fail_missing_in.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'foo'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ForHeaderStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ForIn', text: '(', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ForHeader', text: ')', has_error: yes, subtree_size: 8}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Print'}, -// CHECK:STDOUT: {kind: 'CallExprStart', text: '(', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'x'}, -// CHECK:STDOUT: {kind: 'CallExpr', text: ')', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: '}', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ForStatement', text: 'for', subtree_size: 16}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 22}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'foo' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─ForHeaderStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ │ ╭─VariablePattern 'var' +// CHECK:STDOUT: │ │ ├─ForIn '(' has_error +// CHECK:STDOUT: │ │ ╭─ForHeader ')' has_error +// CHECK:STDOUT: │ │ │ ╭─CodeBlockStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameExpr 'Print' +// CHECK:STDOUT: │ │ │ │ ╭─CallExprStart '(' +// CHECK:STDOUT: │ │ │ │ ├─IdentifierNameExpr 'x' +// CHECK:STDOUT: │ │ │ │ ╭─CallExpr ')' +// CHECK:STDOUT: │ │ │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ├─CodeBlock '}' +// CHECK:STDOUT: │ ├─ForStatement 'for' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/for/fail_returned_var.carbon b/toolchain/parse/testdata/for/fail_returned_var.carbon index 129e357681f3..b662d1089061 100644 --- a/toolchain/parse/testdata/for/fail_returned_var.carbon +++ b/toolchain/parse/testdata/for/fail_returned_var.carbon @@ -19,25 +19,24 @@ fn foo() -> i32 { } // CHECK:STDOUT: - filename: fail_returned_var.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'foo'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', 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}, -// CHECK:STDOUT: {kind: 'ForHeaderStart', text: '('}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: 'returned', has_error: yes}, -// CHECK:STDOUT: {kind: 'ForIn', text: '(', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ForHeader', text: ')', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: '{'}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'ReturnVarModifier', text: 'var'}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: '}', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ForStatement', text: 'for', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 18}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'foo' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ ├─ReturnType '->' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─ForHeaderStart '(' +// CHECK:STDOUT: │ │ │ ╭─InvalidParse 'returned' has_error +// CHECK:STDOUT: │ │ ├─ForIn '(' has_error +// CHECK:STDOUT: │ │ ╭─ForHeader ')' has_error +// CHECK:STDOUT: │ │ │ ╭─CodeBlockStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ │ │ ├─ReturnVarModifier 'var' +// CHECK:STDOUT: │ │ │ ├─ReturnStatement ';' +// CHECK:STDOUT: │ │ ├─CodeBlock '}' +// CHECK:STDOUT: │ ├─ForStatement 'for' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/for/fail_square_brackets.carbon b/toolchain/parse/testdata/for/fail_square_brackets.carbon index 5b994a13a25b..88c6f680bb43 100644 --- a/toolchain/parse/testdata/for/fail_square_brackets.carbon +++ b/toolchain/parse/testdata/for/fail_square_brackets.carbon @@ -34,23 +34,22 @@ fn F() { } // CHECK:STDOUT: - filename: fail_square_brackets.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ForHeaderStart', text: 'for', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '[', has_error: yes}, -// CHECK:STDOUT: {kind: 'ForIn', text: 'for', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '[', has_error: yes}, -// CHECK:STDOUT: {kind: 'ForHeader', text: 'for', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: '[', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '[', has_error: yes}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: '}', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: '[', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ForStatement', text: 'for', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 16}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─ForHeaderStart 'for' has_error +// CHECK:STDOUT: │ │ │ ╭─InvalidParse '[' has_error +// CHECK:STDOUT: │ │ ├─ForIn 'for' has_error +// CHECK:STDOUT: │ │ ├─InvalidParse '[' has_error +// CHECK:STDOUT: │ │ ╭─ForHeader 'for' has_error +// CHECK:STDOUT: │ │ │ ╭─CodeBlockStart '[' has_error +// CHECK:STDOUT: │ │ │ │ ╭─InvalidParse '[' has_error +// CHECK:STDOUT: │ │ │ ├─ExprStatement '}' has_error +// CHECK:STDOUT: │ │ ├─CodeBlock '[' has_error +// CHECK:STDOUT: │ ├─ForStatement 'for' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/for/nested.carbon b/toolchain/parse/testdata/for/nested.carbon index cab578b18f7b..f9c70380457d 100644 --- a/toolchain/parse/testdata/for/nested.carbon +++ b/toolchain/parse/testdata/for/nested.carbon @@ -17,42 +17,41 @@ fn foo() { } // CHECK:STDOUT: - filename: nested.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'foo'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ForHeaderStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ForIn', text: 'in', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'x'}, -// CHECK:STDOUT: {kind: 'ForHeader', text: ')', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: '{'}, -// CHECK:STDOUT: {kind: 'ForHeaderStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'z'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ForIn', text: 'in', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'y'}, -// CHECK:STDOUT: {kind: 'ForHeader', text: ')', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Print'}, -// CHECK:STDOUT: {kind: 'CallExprStart', text: '(', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'z'}, -// CHECK:STDOUT: {kind: 'CallExpr', text: ')', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: '}', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ForStatement', text: 'for', subtree_size: 17}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: '}', subtree_size: 19}, -// CHECK:STDOUT: {kind: 'ForStatement', text: 'for', subtree_size: 29}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 35}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'foo' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─ForHeaderStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ │ ╭─VariablePattern 'var' +// CHECK:STDOUT: │ │ ├─ForIn 'in' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'x' +// CHECK:STDOUT: │ │ ╭─ForHeader ')' +// CHECK:STDOUT: │ │ │ ╭─CodeBlockStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─ForHeaderStart '(' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'z' +// CHECK:STDOUT: │ │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ │ │ │ ╭─VariablePattern 'var' +// CHECK:STDOUT: │ │ │ │ ├─ForIn 'in' +// CHECK:STDOUT: │ │ │ │ ├─IdentifierNameExpr 'y' +// CHECK:STDOUT: │ │ │ │ ╭─ForHeader ')' +// CHECK:STDOUT: │ │ │ │ │ ╭─CodeBlockStart '{' +// CHECK:STDOUT: │ │ │ │ │ │ ╭─IdentifierNameExpr 'Print' +// CHECK:STDOUT: │ │ │ │ │ │ ╭─CallExprStart '(' +// CHECK:STDOUT: │ │ │ │ │ │ ├─IdentifierNameExpr 'z' +// CHECK:STDOUT: │ │ │ │ │ │ ╭─CallExpr ')' +// CHECK:STDOUT: │ │ │ │ │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ │ │ ├─CodeBlock '}' +// CHECK:STDOUT: │ │ │ ├─ForStatement 'for' +// CHECK:STDOUT: │ │ ├─CodeBlock '}' +// CHECK:STDOUT: │ ├─ForStatement 'for' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/for/pattern.carbon b/toolchain/parse/testdata/for/pattern.carbon index 17b8c374ba9a..0479c24724aa 100644 --- a/toolchain/parse/testdata/for/pattern.carbon +++ b/toolchain/parse/testdata/for/pattern.carbon @@ -33,91 +33,88 @@ fn foo() { } // CHECK:STDOUT: - filename: value.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'foo'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ForHeaderStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ForIn', text: 'in', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'y'}, -// CHECK:STDOUT: {kind: 'ForHeader', text: ')', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Print'}, -// CHECK:STDOUT: {kind: 'CallExprStart', text: '(', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'x'}, -// CHECK:STDOUT: {kind: 'CallExpr', text: ')', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: '}', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ForStatement', text: 'for', subtree_size: 16}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 22}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'foo' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─ForHeaderStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─ForIn 'in' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'y' +// CHECK:STDOUT: │ │ ╭─ForHeader ')' +// CHECK:STDOUT: │ │ │ ╭─CodeBlockStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameExpr 'Print' +// CHECK:STDOUT: │ │ │ │ ╭─CallExprStart '(' +// CHECK:STDOUT: │ │ │ │ ├─IdentifierNameExpr 'x' +// CHECK:STDOUT: │ │ │ │ ╭─CallExpr ')' +// CHECK:STDOUT: │ │ │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ├─CodeBlock '}' +// CHECK:STDOUT: │ ├─ForStatement 'for' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: var.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'foo'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ForHeaderStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ForIn', text: 'in', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'y'}, -// CHECK:STDOUT: {kind: 'ForHeader', text: ')', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Print'}, -// CHECK:STDOUT: {kind: 'CallExprStart', text: '(', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'x'}, -// CHECK:STDOUT: {kind: 'CallExpr', text: ')', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: '}', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ForStatement', text: 'for', subtree_size: 17}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 23}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'foo' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─ForHeaderStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ │ ╭─VariablePattern 'var' +// CHECK:STDOUT: │ │ ├─ForIn 'in' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'y' +// CHECK:STDOUT: │ │ ╭─ForHeader ')' +// CHECK:STDOUT: │ │ │ ╭─CodeBlockStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameExpr 'Print' +// CHECK:STDOUT: │ │ │ │ ╭─CallExprStart '(' +// CHECK:STDOUT: │ │ │ │ ├─IdentifierNameExpr 'x' +// CHECK:STDOUT: │ │ │ │ ╭─CallExpr ')' +// CHECK:STDOUT: │ │ │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ├─CodeBlock '}' +// CHECK:STDOUT: │ ├─ForStatement 'for' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: tuple.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'foo'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ForHeaderStart', text: '('}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'ForIn', text: 'in', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'z'}, -// CHECK:STDOUT: {kind: 'ForHeader', text: ')', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Print'}, -// CHECK:STDOUT: {kind: 'CallExprStart', text: '(', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'x'}, -// CHECK:STDOUT: {kind: 'CallExpr', text: ')', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: '}', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ForStatement', text: 'for', subtree_size: 23}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 29}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'foo' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─ForHeaderStart '(' +// CHECK:STDOUT: │ │ │ ╭─TuplePatternStart '(' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ │ ╭─TuplePattern ')' +// CHECK:STDOUT: │ │ ├─ForIn 'in' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'z' +// CHECK:STDOUT: │ │ ╭─ForHeader ')' +// CHECK:STDOUT: │ │ │ ╭─CodeBlockStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameExpr 'Print' +// CHECK:STDOUT: │ │ │ │ ╭─CallExprStart '(' +// CHECK:STDOUT: │ │ │ │ ├─IdentifierNameExpr 'x' +// CHECK:STDOUT: │ │ │ │ ╭─CallExpr ')' +// CHECK:STDOUT: │ │ │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ├─CodeBlock '}' +// CHECK:STDOUT: │ ├─ForStatement 'for' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/function/call.carbon b/toolchain/parse/testdata/function/call.carbon index d516f6406c48..1f9c64b9b5b0 100644 --- a/toolchain/parse/testdata/function/call.carbon +++ b/toolchain/parse/testdata/function/call.carbon @@ -33,129 +33,126 @@ fn F() { } // CHECK:STDOUT: - filename: basic.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'f'}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'CallExprStart', text: '(', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'c'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'd'}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'TupleLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'ParenExprStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'e'}, -// CHECK:STDOUT: {kind: 'ParenExpr', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'CallExpr', text: ')', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'g'}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 16}, -// CHECK:STDOUT: {kind: 'CallExprStart', text: '(', subtree_size: 17}, -// CHECK:STDOUT: {kind: 'CallExpr', text: ')', subtree_size: 18}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 19}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 25}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ ╭─MemberAccessExpr '.' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'f' +// CHECK:STDOUT: │ │ ╭─MemberAccessExpr '.' +// CHECK:STDOUT: │ │ ╭─CallExprStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'c' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameNotBeforeSignature 'd' +// CHECK:STDOUT: │ │ ├─MemberAccessExpr '.' +// CHECK:STDOUT: │ │ ├─TupleLiteralComma ',' +// CHECK:STDOUT: │ │ │ ╭─ParenExprStart '(' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'e' +// CHECK:STDOUT: │ │ ├─ParenExpr ')' +// CHECK:STDOUT: │ │ ╭─CallExpr ')' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'g' +// CHECK:STDOUT: │ │ ╭─MemberAccessExpr '.' +// CHECK:STDOUT: │ │ ╭─CallExprStart '(' +// CHECK:STDOUT: │ │ ╭─CallExpr ')' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: ref_args.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'G'}, -// CHECK:STDOUT: {kind: 'CallExprStart', text: '(', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'x'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorRef', text: 'ref', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'CallExpr', text: ')', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'G'}, -// CHECK:STDOUT: {kind: 'CallExprStart', text: '(', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'x'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorRef', text: 'ref', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'TupleLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'y'}, -// CHECK:STDOUT: {kind: 'CallExpr', text: ')', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'G'}, -// CHECK:STDOUT: {kind: 'CallExprStart', text: '(', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'x'}, -// CHECK:STDOUT: {kind: 'TupleLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'y'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorRef', text: 'ref', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'CallExpr', text: ')', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 28}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'G' +// CHECK:STDOUT: │ │ ╭─CallExprStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'x' +// CHECK:STDOUT: │ │ ├─PrefixOperatorRef 'ref' +// CHECK:STDOUT: │ │ ╭─CallExpr ')' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'G' +// CHECK:STDOUT: │ │ ╭─CallExprStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'x' +// CHECK:STDOUT: │ │ ├─PrefixOperatorRef 'ref' +// CHECK:STDOUT: │ │ ├─TupleLiteralComma ',' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'y' +// CHECK:STDOUT: │ │ ╭─CallExpr ')' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'G' +// CHECK:STDOUT: │ │ ╭─CallExprStart '(' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'x' +// CHECK:STDOUT: │ │ ├─TupleLiteralComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'y' +// CHECK:STDOUT: │ │ ├─PrefixOperatorRef 'ref' +// CHECK:STDOUT: │ │ ╭─CallExpr ')' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: nested_ref.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'G'}, -// CHECK:STDOUT: {kind: 'CallExprStart', text: '(', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'x'}, -// CHECK:STDOUT: {kind: 'TupleLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'x'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorRef', text: 'ref', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'TupleLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'CallExpr', text: ')', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'G'}, -// CHECK:STDOUT: {kind: 'CallExprStart', text: '(', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'x'}, -// CHECK:STDOUT: {kind: 'TupleLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'y'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorRef', text: 'ref', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'TupleLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'z'}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'CallExpr', text: ')', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'G'}, -// CHECK:STDOUT: {kind: 'CallExprStart', text: '(', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'x'}, -// CHECK:STDOUT: {kind: 'TupleLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'y'}, -// CHECK:STDOUT: {kind: 'TupleLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'z'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorRef', text: 'ref', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'CallExpr', text: ')', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'G'}, -// CHECK:STDOUT: {kind: 'CallExprStart', text: '(', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'x'}, -// CHECK:STDOUT: {kind: 'TupleLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'y'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorRef', text: 'ref', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'StructLiteralField', text: '=', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'StructLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'z'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'z'}, -// CHECK:STDOUT: {kind: 'StructLiteralField', text: '=', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'CallExpr', text: ')', subtree_size: 17}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 18}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 59}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'G' +// CHECK:STDOUT: │ │ ╭─CallExprStart '(' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'x' +// CHECK:STDOUT: │ │ ├─TupleLiteralComma ',' +// CHECK:STDOUT: │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameExpr 'x' +// CHECK:STDOUT: │ │ │ ├─PrefixOperatorRef 'ref' +// CHECK:STDOUT: │ │ │ ├─TupleLiteralComma ',' +// CHECK:STDOUT: │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ ╭─CallExpr ')' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'G' +// CHECK:STDOUT: │ │ ╭─CallExprStart '(' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'x' +// CHECK:STDOUT: │ │ ├─TupleLiteralComma ',' +// CHECK:STDOUT: │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameExpr 'y' +// CHECK:STDOUT: │ │ │ ├─PrefixOperatorRef 'ref' +// CHECK:STDOUT: │ │ │ ├─TupleLiteralComma ',' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'z' +// CHECK:STDOUT: │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ ╭─CallExpr ')' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'G' +// CHECK:STDOUT: │ │ ╭─CallExprStart '(' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'x' +// CHECK:STDOUT: │ │ ├─TupleLiteralComma ',' +// CHECK:STDOUT: │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'y' +// CHECK:STDOUT: │ │ │ ├─TupleLiteralComma ',' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameExpr 'z' +// CHECK:STDOUT: │ │ │ ├─PrefixOperatorRef 'ref' +// CHECK:STDOUT: │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ ╭─CallExpr ')' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'G' +// CHECK:STDOUT: │ │ ╭─CallExprStart '(' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'x' +// CHECK:STDOUT: │ │ ├─TupleLiteralComma ',' +// CHECK:STDOUT: │ │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameExpr 'y' +// CHECK:STDOUT: │ │ │ │ ├─PrefixOperatorRef 'ref' +// CHECK:STDOUT: │ │ │ ├─StructLiteralField '=' +// CHECK:STDOUT: │ │ │ ├─StructLiteralComma ',' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'z' +// CHECK:STDOUT: │ │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ├─IdentifierNameExpr 'z' +// CHECK:STDOUT: │ │ │ ├─StructLiteralField '=' +// CHECK:STDOUT: │ │ ├─StructLiteral '}' +// CHECK:STDOUT: │ │ ╭─CallExpr ')' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/function/decl_statement.carbon b/toolchain/parse/testdata/function/decl_statement.carbon index f329c2c418b5..0836544a220e 100644 --- a/toolchain/parse/testdata/function/decl_statement.carbon +++ b/toolchain/parse/testdata/function/decl_statement.carbon @@ -44,149 +44,147 @@ fn F() { } // CHECK:STDOUT: - filename: valid.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'AliasIntroducer', text: 'alias'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'A'}, -// CHECK:STDOUT: {kind: 'AliasInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'Alias', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'A'}, -// CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'BaseModifier', text: 'base'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'B'}, -// CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'AbstractModifier', text: 'abstract'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Abstract'}, -// CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'NamedConstraintIntroducer', text: 'constraint'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'C'}, -// CHECK:STDOUT: {kind: 'NamedConstraintDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'NamedConstraintDefinition', text: '}', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'I'}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ImplIntroducer', text: 'impl'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'A'}, -// CHECK:STDOUT: {kind: 'ImplTypeAs', text: 'as', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'I'}, -// CHECK:STDOUT: {kind: 'ImplDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ImplDefinition', text: '}', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ImplIntroducer', text: 'impl'}, -// CHECK:STDOUT: {kind: 'FinalModifier', text: 'final'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'A'}, -// CHECK:STDOUT: {kind: 'ImplTypeAs', text: 'as', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'I'}, -// CHECK:STDOUT: {kind: 'ImplDefinitionStart', text: '{', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ImplDefinition', text: '}', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ChoiceIntroducer', text: 'choice'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'C'}, -// CHECK:STDOUT: {kind: 'ChoiceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ChoiceDefinition', text: '}', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'n'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'v'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 71}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─AliasIntroducer 'alias' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'A' +// CHECK:STDOUT: │ │ ├─AliasInitializer '=' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ ├─Alias ';' +// CHECK:STDOUT: │ │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'A' +// CHECK:STDOUT: │ │ ╭─ClassDefinitionStart '{' +// CHECK:STDOUT: │ ├─ClassDefinition '}' +// CHECK:STDOUT: │ │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ │ ├─BaseModifier 'base' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'B' +// CHECK:STDOUT: │ │ ╭─ClassDefinitionStart '{' +// CHECK:STDOUT: │ ├─ClassDefinition '}' +// CHECK:STDOUT: │ │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ │ ├─AbstractModifier 'abstract' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'Abstract' +// CHECK:STDOUT: │ │ ╭─ClassDefinitionStart '{' +// CHECK:STDOUT: │ ├─ClassDefinition '}' +// CHECK:STDOUT: │ │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ ├─FunctionDefinition '}' +// CHECK:STDOUT: │ │ ╭─NamedConstraintIntroducer 'constraint' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'C' +// CHECK:STDOUT: │ │ ╭─NamedConstraintDefinitionStart '{' +// CHECK:STDOUT: │ ├─NamedConstraintDefinition '}' +// CHECK:STDOUT: │ │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'I' +// CHECK:STDOUT: │ │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: │ ├─InterfaceDefinition '}' +// CHECK:STDOUT: │ │ ╭─ImplIntroducer 'impl' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'A' +// CHECK:STDOUT: │ │ ├─ImplTypeAs 'as' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'I' +// CHECK:STDOUT: │ │ ╭─ImplDefinitionStart '{' +// CHECK:STDOUT: │ ├─ImplDefinition '}' +// CHECK:STDOUT: │ │ ╭─ImplIntroducer 'impl' +// CHECK:STDOUT: │ │ ├─FinalModifier 'final' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'A' +// CHECK:STDOUT: │ │ ├─ImplTypeAs 'as' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'I' +// CHECK:STDOUT: │ │ ╭─ImplDefinitionStart '{' +// CHECK:STDOUT: │ ├─ImplDefinition '}' +// CHECK:STDOUT: │ │ ╭─ChoiceIntroducer 'choice' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'C' +// CHECK:STDOUT: │ │ ╭─ChoiceDefinitionStart '{' +// CHECK:STDOUT: │ ├─ChoiceDefinition '}' +// CHECK:STDOUT: │ │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'n' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ├─IntLiteral '0' +// CHECK:STDOUT: │ ├─LetDecl ';' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'v' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: syntactically_valid.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'AdaptIntroducer', text: 'adapt'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'A'}, -// CHECK:STDOUT: {kind: 'AdaptDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'AdaptIntroducer', text: 'adapt'}, -// CHECK:STDOUT: {kind: 'ExtendModifier', text: 'extend'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'A'}, -// CHECK:STDOUT: {kind: 'AdaptDecl', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'BaseIntroducer', text: 'base'}, -// CHECK:STDOUT: {kind: 'ExtendModifier', text: 'extend'}, -// CHECK:STDOUT: {kind: 'BaseColon', text: ':'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'B'}, -// CHECK:STDOUT: {kind: 'BaseDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ImplIntroducer', text: 'impl'}, -// CHECK:STDOUT: {kind: 'ExtendModifier', text: 'extend'}, -// CHECK:STDOUT: {kind: 'ImplDefaultSelfAs', text: 'as'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'I'}, -// CHECK:STDOUT: {kind: 'ImplDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'NamespaceStart', text: 'namespace'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'N'}, -// CHECK:STDOUT: {kind: 'Namespace', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'DefaultModifier', text: 'default'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'ImplModifier', text: 'impl'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'G'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'OverrideModifier', text: 'override'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'H'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'VirtualModifier', text: 'virtual'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'H'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'PrivateModifier', text: 'private'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'v'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'ProtectedModifier', text: 'protected'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'v'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 66}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─AdaptIntroducer 'adapt' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'A' +// CHECK:STDOUT: │ ├─AdaptDecl ';' +// CHECK:STDOUT: │ │ ╭─AdaptIntroducer 'adapt' +// CHECK:STDOUT: │ │ ├─ExtendModifier 'extend' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'A' +// CHECK:STDOUT: │ ├─AdaptDecl ';' +// CHECK:STDOUT: │ │ ╭─BaseIntroducer 'base' +// CHECK:STDOUT: │ │ ├─ExtendModifier 'extend' +// CHECK:STDOUT: │ │ ├─BaseColon ':' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'B' +// CHECK:STDOUT: │ ├─BaseDecl ';' +// CHECK:STDOUT: │ │ ╭─ImplIntroducer 'impl' +// CHECK:STDOUT: │ │ ├─ExtendModifier 'extend' +// CHECK:STDOUT: │ │ ├─ImplDefaultSelfAs 'as' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'I' +// CHECK:STDOUT: │ ├─ImplDecl ';' +// CHECK:STDOUT: │ │ ╭─NamespaceStart 'namespace' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'N' +// CHECK:STDOUT: │ ├─Namespace ';' +// CHECK:STDOUT: │ │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ ├─DefaultModifier 'default' +// CHECK:STDOUT: │ │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ├─FunctionDecl ';' +// CHECK:STDOUT: │ │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ ├─ImplModifier 'impl' +// CHECK:STDOUT: │ │ ├─IdentifierNameMaybeBeforeSignature 'G' +// CHECK:STDOUT: │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ├─FunctionDecl ';' +// CHECK:STDOUT: │ │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ ├─OverrideModifier 'override' +// CHECK:STDOUT: │ │ ├─IdentifierNameMaybeBeforeSignature 'H' +// CHECK:STDOUT: │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ├─FunctionDecl ';' +// CHECK:STDOUT: │ │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ ├─VirtualModifier 'virtual' +// CHECK:STDOUT: │ │ ├─IdentifierNameMaybeBeforeSignature 'H' +// CHECK:STDOUT: │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ├─FunctionDecl ';' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ├─PrivateModifier 'private' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'v' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ├─ProtectedModifier 'protected' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'v' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/function/declaration.carbon b/toolchain/parse/testdata/function/declaration.carbon index ad80e589aceb..40026576d214 100644 --- a/toolchain/parse/testdata/function/declaration.carbon +++ b/toolchain/parse/testdata/function/declaration.carbon @@ -185,345 +185,320 @@ fn SimpleReturnForm() ->? Form; fn ComplexReturnForm() ->? X.Y(Z); // CHECK:STDOUT: - filename: basic.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: ref.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'foo'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'RefBindingName', text: 'ref', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'foo' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ ╭─RefBindingName 'ref' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: implicit_empty.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'foo'}, -// CHECK:STDOUT: {kind: 'ImplicitParamListStart', text: '['}, -// CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'foo' +// CHECK:STDOUT: │ │ ╭─ImplicitParamListStart '[' +// CHECK:STDOUT: │ ├─ImplicitParamList ']' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: implicit_params.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'foo'}, -// CHECK:STDOUT: {kind: 'ImplicitParamListStart', text: '['}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 16}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'foo' +// CHECK:STDOUT: │ │ ╭─ImplicitParamListStart '[' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ ├─ImplicitParamList ']' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: no_params.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'foo'}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'foo' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: params.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'foo'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'foo' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: with_return_type.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'foo'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', 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}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'foo' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ╭─UnsignedIntTypeLiteral 'u32' +// CHECK:STDOUT: │ ├─ReturnType '->' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: impl_fn.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'OverrideModifier', text: 'override'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', 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: 'OverrideModifier', text: 'override'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'G'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'OverrideModifier', text: 'override'}, -// CHECK:STDOUT: {kind: 'AbstractModifier', text: 'abstract'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'H'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', 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: 'OverrideModifier', text: 'override'}, -// CHECK:STDOUT: {kind: 'DefaultModifier', text: 'default'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'I'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─OverrideModifier 'override' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─AbstractModifier 'abstract' +// CHECK:STDOUT: │ ├─OverrideModifier 'override' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'G' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─OverrideModifier 'override' +// CHECK:STDOUT: │ ├─AbstractModifier 'abstract' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'H' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─PrivateModifier 'private' +// CHECK:STDOUT: │ ├─OverrideModifier 'override' +// CHECK:STDOUT: │ ├─DefaultModifier 'default' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'I' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_identifier_instead_of_sig.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'foo'}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'foo' +// CHECK:STDOUT: ├─FunctionDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_missing_implicit_close.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Div'}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Div' +// CHECK:STDOUT: ├─FunctionDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_missing_name.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '(', has_error: yes}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─InvalidParse '(' has_error +// CHECK:STDOUT: ├─FunctionDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_no_sig_or_semi.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'foo'}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: 'fn', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'foo' +// CHECK:STDOUT: ├─FunctionDecl 'fn' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_only_fn_and_semi.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ';', has_error: yes}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─InvalidParse ';' has_error +// CHECK:STDOUT: ├─FunctionDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_repeated_fn_and_semi.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: 'fn', has_error: yes}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─InvalidParse 'fn' has_error +// CHECK:STDOUT: ├─FunctionDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_skip_indented_newline_until_outdent.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '(', has_error: yes}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ')', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─InvalidParse '(' has_error +// CHECK:STDOUT: ├─FunctionDecl ')' has_error +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_skip_indented_newline_with_semi.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '(', has_error: yes}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─InvalidParse '(' has_error +// CHECK:STDOUT: ├─FunctionDecl ';' has_error +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_skip_indented_newline_without_semi.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '(', has_error: yes}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ')', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─InvalidParse '(' has_error +// CHECK:STDOUT: ├─FunctionDecl ')' has_error +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_skip_to_newline_without_semi.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '(', has_error: yes}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ')', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─InvalidParse '(' has_error +// CHECK:STDOUT: ├─FunctionDecl ')' has_error +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_skip_without_semi_to_curly.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'InvalidParseStart', text: 'struct', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParseSubtree', text: '}', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─InvalidParseStart 'struct' has_error +// CHECK:STDOUT: ├─InvalidParseSubtree '}' has_error +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: with_identifier_as_param.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'foo'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'bar'}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'foo' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'bar' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_without_name_and_many_tokens_in_params.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '(', has_error: yes}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─InvalidParse '(' has_error +// CHECK:STDOUT: ├─FunctionDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: form_parameter.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'FormParam'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':?'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Form'}, -// CHECK:STDOUT: {kind: 'FormBindingPattern', text: ':?', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'ComplexFormParam'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':?'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'X'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Y'}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'CallExprStart', text: '(', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Z'}, -// CHECK:STDOUT: {kind: 'CallExpr', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FormBindingPattern', text: ':?', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'FormParam' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':?' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'Form' +// CHECK:STDOUT: │ │ ├─FormBindingPattern ':?' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'ComplexFormParam' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':?' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameExpr 'X' +// CHECK:STDOUT: │ │ │ │ ├─IdentifierNameNotBeforeSignature 'Y' +// CHECK:STDOUT: │ │ │ │ ╭─MemberAccessExpr '.' +// CHECK:STDOUT: │ │ │ │ ╭─CallExprStart '(' +// CHECK:STDOUT: │ │ │ │ ├─IdentifierNameExpr 'Z' +// CHECK:STDOUT: │ │ │ ├─CallExpr ')' +// CHECK:STDOUT: │ │ ├─FormBindingPattern ':?' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_ref_on_form_parameter.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':?', has_error: yes}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Form'}, -// CHECK:STDOUT: {kind: 'FormBindingPattern', text: ':?', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':?' has_error +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'Form' +// CHECK:STDOUT: │ │ ├─FormBindingPattern ':?' has_error +// CHECK:STDOUT: │ ├─ExplicitParamList ')' has_error +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_form_within_var.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'FormInVar'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':?'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Form'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':?', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', has_error: yes, subtree_size: 7}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'FormInVar' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':?' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'Form' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':?' has_error +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' has_error +// CHECK:STDOUT: │ ├─ExplicitParamList ')' has_error +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: return_form.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'SimpleReturnForm'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Form'}, -// CHECK:STDOUT: {kind: 'ReturnForm', text: '->?', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'ComplexReturnForm'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'X'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Y'}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'CallExprStart', text: '(', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Z'}, -// CHECK:STDOUT: {kind: 'CallExpr', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ReturnForm', text: '->?', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'SimpleReturnForm' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'Form' +// CHECK:STDOUT: │ ├─ReturnForm '->?' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'ComplexReturnForm' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'X' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'Y' +// CHECK:STDOUT: │ │ ╭─MemberAccessExpr '.' +// CHECK:STDOUT: │ │ ╭─CallExprStart '(' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'Z' +// CHECK:STDOUT: │ │ ╭─CallExpr ')' +// CHECK:STDOUT: │ ├─ReturnForm '->?' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/function/definition.carbon b/toolchain/parse/testdata/function/definition.carbon index 75434259f52c..8acc51f81d76 100644 --- a/toolchain/parse/testdata/function/definition.carbon +++ b/toolchain/parse/testdata/function/definition.carbon @@ -79,165 +79,155 @@ fn SpuriousEquals() = { } fn TestRecoveryFromSpuriousEquals(); // CHECK:STDOUT: - filename: basic.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: with_params.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'foo'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'bar'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i64'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'baz'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i64'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'foo'}, -// CHECK:STDOUT: {kind: 'CallExprStart', text: '(', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'baz'}, -// CHECK:STDOUT: {kind: 'TupleLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'bar'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'baz'}, -// CHECK:STDOUT: {kind: 'InfixOperatorPlus', text: '+', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'CallExpr', text: ')', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 24}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'foo' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'bar' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i64' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'baz' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i64' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'foo' +// CHECK:STDOUT: │ │ ╭─CallExprStart '(' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'baz' +// CHECK:STDOUT: │ │ ├─TupleLiteralComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'bar' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'baz' +// CHECK:STDOUT: │ │ ├─InfixOperatorPlus '+' +// CHECK:STDOUT: │ │ ╭─CallExpr ')' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: with_return_type.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'foo'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', 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}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '42'}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'foo' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ╭─FloatTypeLiteral 'f64' +// CHECK:STDOUT: │ ├─ReturnType '->' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ ├─IntLiteral '42' +// CHECK:STDOUT: │ ├─ReturnStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_identifier_in_statements.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'bar'}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: 'bar', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'bar' +// CHECK:STDOUT: │ ├─ExprStatement 'bar' has_error +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: nested.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'NamedParams'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'PositionalParams'}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 20}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ ├─IdentifierNameMaybeBeforeSignature 'NamedParams' +// CHECK:STDOUT: │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ ├─FunctionDefinition '}' +// CHECK:STDOUT: │ │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'PositionalParams' +// CHECK:STDOUT: │ │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: builtin.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'BuiltinFunctionDefinitionStart', text: '=', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'BuiltinName', text: '"builtin"'}, -// CHECK:STDOUT: {kind: 'BuiltinFunctionDefinition', text: ';', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─BuiltinFunctionDefinitionStart '=' +// CHECK:STDOUT: │ ├─BuiltinName '"builtin"' +// CHECK:STDOUT: ├─BuiltinFunctionDefinition ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: builtin_nested.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ImplIntroducer', text: 'impl'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'T'}, -// CHECK:STDOUT: {kind: 'ImplTypeAs', text: 'as', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'I'}, -// CHECK:STDOUT: {kind: 'ImplDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Op'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'BuiltinFunctionDefinitionStart', text: '=', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'BuiltinName', text: '"builtin"'}, -// CHECK:STDOUT: {kind: 'BuiltinFunctionDefinition', text: ';', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ImplDefinition', text: '}', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ImplIntroducer 'impl' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'T' +// CHECK:STDOUT: │ ├─ImplTypeAs 'as' +// CHECK:STDOUT: │ ├─IdentifierNameExpr 'I' +// CHECK:STDOUT: │ ╭─ImplDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ ├─IdentifierNameMaybeBeforeSignature 'Op' +// CHECK:STDOUT: │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ╭─BuiltinFunctionDefinitionStart '=' +// CHECK:STDOUT: │ │ ├─BuiltinName '"builtin"' +// CHECK:STDOUT: │ ├─BuiltinFunctionDefinition ';' +// CHECK:STDOUT: ├─ImplDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_builtin_identifier.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'NotString'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'BuiltinFunctionDefinitionStart', text: '=', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'BuiltinFunctionDefinition', text: ';', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'NotString' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─BuiltinFunctionDefinitionStart '=' +// CHECK:STDOUT: ├─BuiltinFunctionDefinition ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_builtin_two_strings.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'JunkAfterString'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'BuiltinFunctionDefinitionStart', text: '=', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'BuiltinName', text: '"hello"'}, -// CHECK:STDOUT: {kind: 'BuiltinFunctionDefinition', text: ';', has_error: yes, subtree_size: 7}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'JunkAfterString' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─BuiltinFunctionDefinitionStart '=' +// CHECK:STDOUT: │ ├─BuiltinName '"hello"' +// CHECK:STDOUT: ├─BuiltinFunctionDefinition ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_builtin_spurious_equals.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'SpuriousEquals'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'BuiltinFunctionDefinitionStart', text: '=', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'BuiltinFunctionDefinition', text: '}', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'TestRecoveryFromSpuriousEquals'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'SpuriousEquals' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─BuiltinFunctionDefinitionStart '=' +// CHECK:STDOUT: ├─BuiltinFunctionDefinition '}' has_error +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'TestRecoveryFromSpuriousEquals' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/function/eval_musteval.carbon b/toolchain/parse/testdata/function/eval_musteval.carbon index ad0db73347b2..fdadc411ecff 100644 --- a/toolchain/parse/testdata/function/eval_musteval.carbon +++ b/toolchain/parse/testdata/function/eval_musteval.carbon @@ -21,36 +21,33 @@ musteval fn F(); eval musteval fn F(); // CHECK:STDOUT: - filename: eval.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'EvalModifier', text: 'eval'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─EvalModifier 'eval' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: musteval.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'MustEvalModifier', text: 'musteval'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─MustEvalModifier 'musteval' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: mixed.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'EvalModifier', text: 'eval'}, -// CHECK:STDOUT: {kind: 'MustEvalModifier', text: 'musteval'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─EvalModifier 'eval' +// CHECK:STDOUT: │ ├─MustEvalModifier 'musteval' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/function/extern.carbon b/toolchain/parse/testdata/function/extern.carbon index a214596e7125..541153d3d46b 100644 --- a/toolchain/parse/testdata/function/extern.carbon +++ b/toolchain/parse/testdata/function/extern.carbon @@ -49,88 +49,81 @@ extern fn G() {} extern library "foo" fn G() {} // CHECK:STDOUT: - filename: extern.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'ExternModifier', text: 'extern'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'G'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─ExternModifier 'extern' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'G' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: library.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'LibraryName', text: '"foo"'}, -// CHECK:STDOUT: {kind: 'LibrarySpecifier', text: 'library', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ExternModifierWithLibrary', text: 'extern', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'G'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ ╭─LibraryName '"foo"' +// CHECK:STDOUT: │ │ ╭─LibrarySpecifier 'library' +// CHECK:STDOUT: │ ├─ExternModifierWithLibrary 'extern' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'G' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: default_library.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'DefaultLibrary', text: 'default'}, -// CHECK:STDOUT: {kind: 'LibrarySpecifier', text: 'library', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ExternModifierWithLibrary', text: 'extern', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'G'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ ╭─DefaultLibrary 'default' +// CHECK:STDOUT: │ │ ╭─LibrarySpecifier 'library' +// CHECK:STDOUT: │ ├─ExternModifierWithLibrary 'extern' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'G' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_name_missing.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'LibraryName', text: 'fn', has_error: yes}, -// CHECK:STDOUT: {kind: 'LibrarySpecifier', text: 'library', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ExternModifierWithLibrary', text: 'extern', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'G'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ ╭─LibraryName 'fn' has_error +// CHECK:STDOUT: │ │ ╭─LibrarySpecifier 'library' +// CHECK:STDOUT: │ ├─ExternModifierWithLibrary 'extern' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'G' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_identifier.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'InvalidParseStart', text: 'foo', has_error: yes}, -// CHECK:STDOUT: {kind: 'LibraryName', text: 'foo', has_error: yes}, -// CHECK:STDOUT: {kind: 'LibrarySpecifier', text: 'library', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ExternModifierWithLibrary', text: 'extern', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'InvalidParseSubtree', text: ';', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─InvalidParseStart 'foo' has_error +// CHECK:STDOUT: │ │ ╭─LibraryName 'foo' has_error +// CHECK:STDOUT: │ │ ╭─LibrarySpecifier 'library' +// CHECK:STDOUT: │ ├─ExternModifierWithLibrary 'extern' +// CHECK:STDOUT: ├─InvalidParseSubtree ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: extern_def.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'ExternModifier', text: 'extern'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'G'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─ExternModifier 'extern' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'G' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: library_def.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'LibraryName', text: '"foo"'}, -// CHECK:STDOUT: {kind: 'LibrarySpecifier', text: 'library', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ExternModifierWithLibrary', text: 'extern', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'G'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ ╭─LibraryName '"foo"' +// CHECK:STDOUT: │ │ ╭─LibrarySpecifier 'library' +// CHECK:STDOUT: │ ├─ExternModifierWithLibrary 'extern' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'G' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/function/fail_template_form_param.carbon b/toolchain/parse/testdata/function/fail_template_form_param.carbon index 85dfa4e72110..4be47b874551 100644 --- a/toolchain/parse/testdata/function/fail_template_form_param.carbon +++ b/toolchain/parse/testdata/function/fail_template_form_param.carbon @@ -16,16 +16,15 @@ fn F(template x:? Form); // CHECK:STDOUT: - filename: fail_template_form_param.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':?', has_error: yes}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Form'}, -// CHECK:STDOUT: {kind: 'FormBindingPattern', text: ':?', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':?' has_error +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'Form' +// CHECK:STDOUT: │ │ ├─FormBindingPattern ':?' has_error +// CHECK:STDOUT: │ ├─ExplicitParamList ')' has_error +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/function/terse.carbon b/toolchain/parse/testdata/function/terse.carbon index b3d9773d74c1..1904fc6f97d6 100644 --- a/toolchain/parse/testdata/function/terse.carbon +++ b/toolchain/parse/testdata/function/terse.carbon @@ -13,33 +13,32 @@ fn F(x: i32) => x; fn G(x: i32) -> i32 => x; // CHECK:STDOUT: - filename: terse.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '=>', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'TerseBodyArrow', text: '=>'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'x'}, -// CHECK:STDOUT: {kind: 'FunctionTerseDefinition', text: ';', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'G'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '=>', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'TerseBodyArrow', text: '=>'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'x'}, -// CHECK:STDOUT: {kind: 'FunctionTerseDefinition', text: ';', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '=>' +// CHECK:STDOUT: │ ├─TerseBodyArrow '=>' +// CHECK:STDOUT: │ ├─IdentifierNameExpr 'x' +// CHECK:STDOUT: ├─FunctionTerseDefinition ';' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'G' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ ├─ReturnType '->' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '=>' +// CHECK:STDOUT: │ ├─TerseBodyArrow '=>' +// CHECK:STDOUT: │ ├─IdentifierNameExpr 'x' +// CHECK:STDOUT: ├─FunctionTerseDefinition ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/deduced_params/empty.carbon b/toolchain/parse/testdata/generics/deduced_params/empty.carbon index da7bf854681f..e2fe0c4918f4 100644 --- a/toolchain/parse/testdata/generics/deduced_params/empty.carbon +++ b/toolchain/parse/testdata/generics/deduced_params/empty.carbon @@ -13,22 +13,21 @@ class Foo[](); interface Bar[]() {} // CHECK:STDOUT: - filename: empty.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'ImplicitParamListStart', text: '['}, -// CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ClassDecl', text: ';', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Bar'}, -// CHECK:STDOUT: {kind: 'ImplicitParamListStart', text: '['}, -// CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'Foo' +// CHECK:STDOUT: │ │ ╭─ImplicitParamListStart '[' +// CHECK:STDOUT: │ ├─ImplicitParamList ']' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─ClassDecl ';' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'Bar' +// CHECK:STDOUT: │ │ ╭─ImplicitParamListStart '[' +// CHECK:STDOUT: │ ├─ImplicitParamList ']' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/deduced_params/no_parens.carbon b/toolchain/parse/testdata/generics/deduced_params/no_parens.carbon index ac03cb9142c4..80378b61bc1b 100644 --- a/toolchain/parse/testdata/generics/deduced_params/no_parens.carbon +++ b/toolchain/parse/testdata/generics/deduced_params/no_parens.carbon @@ -25,57 +25,54 @@ interface Bar[a: i32] {} interface Bar[].Baz[] {} // CHECK:STDOUT: - filename: class.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'ImplicitParamListStart', text: '['}, -// CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ClassDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'ImplicitParamListStart', text: '['}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ClassDecl', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'Foo' +// CHECK:STDOUT: │ │ ╭─ImplicitParamListStart '[' +// CHECK:STDOUT: │ ├─ImplicitParamList ']' +// CHECK:STDOUT: ├─ClassDecl ';' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'Foo' +// CHECK:STDOUT: │ │ ╭─ImplicitParamListStart '[' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ ├─ImplicitParamList ']' +// CHECK:STDOUT: ├─ClassDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: interface.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Bar'}, -// CHECK:STDOUT: {kind: 'ImplicitParamListStart', text: '['}, -// CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Bar'}, -// CHECK:STDOUT: {kind: 'ImplicitParamListStart', text: '['}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'Bar' +// CHECK:STDOUT: │ │ ╭─ImplicitParamListStart '[' +// CHECK:STDOUT: │ ├─ImplicitParamList ']' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'Bar' +// CHECK:STDOUT: │ │ ╭─ImplicitParamListStart '[' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ ├─ImplicitParamList ']' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: qualified.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Bar'}, -// CHECK:STDOUT: {kind: 'ImplicitParamListStart', text: '['}, -// CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameQualifierWithParams', text: '.', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Baz'}, -// CHECK:STDOUT: {kind: 'ImplicitParamListStart', text: '['}, -// CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ │ ╭─IdentifierNameMaybeBeforeSignature 'Bar' +// CHECK:STDOUT: │ │ │ ╭─ImplicitParamListStart '[' +// CHECK:STDOUT: │ │ ├─ImplicitParamList ']' +// CHECK:STDOUT: │ ├─IdentifierNameQualifierWithParams '.' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'Baz' +// CHECK:STDOUT: │ │ ╭─ImplicitParamListStart '[' +// CHECK:STDOUT: │ ├─ImplicitParamList ']' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/deduced_params/one.carbon b/toolchain/parse/testdata/generics/deduced_params/one.carbon index 393cacf2ea73..3d9cb8c2eff4 100644 --- a/toolchain/parse/testdata/generics/deduced_params/one.carbon +++ b/toolchain/parse/testdata/generics/deduced_params/one.carbon @@ -13,30 +13,29 @@ class Foo[a: i32](); interface Bar[a: i32]() {} // CHECK:STDOUT: - filename: one.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'ImplicitParamListStart', text: '['}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ClassDecl', text: ';', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Bar'}, -// CHECK:STDOUT: {kind: 'ImplicitParamListStart', text: '['}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'Foo' +// CHECK:STDOUT: │ │ ╭─ImplicitParamListStart '[' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ ├─ImplicitParamList ']' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─ClassDecl ';' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'Bar' +// CHECK:STDOUT: │ │ ╭─ImplicitParamListStart '[' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ ├─ImplicitParamList ']' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/deduced_params/one_suffix_comma.carbon b/toolchain/parse/testdata/generics/deduced_params/one_suffix_comma.carbon index a919ddaa7f36..656e35c0c292 100644 --- a/toolchain/parse/testdata/generics/deduced_params/one_suffix_comma.carbon +++ b/toolchain/parse/testdata/generics/deduced_params/one_suffix_comma.carbon @@ -13,32 +13,31 @@ class Foo[a: i32,](); interface Bar[a: i32,]() {} // CHECK:STDOUT: - filename: one_suffix_comma.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'ImplicitParamListStart', text: '['}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ClassDecl', text: ';', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Bar'}, -// CHECK:STDOUT: {kind: 'ImplicitParamListStart', text: '['}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'Foo' +// CHECK:STDOUT: │ │ ╭─ImplicitParamListStart '[' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ ├─ImplicitParamList ']' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─ClassDecl ';' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'Bar' +// CHECK:STDOUT: │ │ ╭─ImplicitParamListStart '[' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ ├─ImplicitParamList ']' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/deduced_params/six.carbon b/toolchain/parse/testdata/generics/deduced_params/six.carbon index 5e0ea2fc720e..8f8d2e55b481 100644 --- a/toolchain/parse/testdata/generics/deduced_params/six.carbon +++ b/toolchain/parse/testdata/generics/deduced_params/six.carbon @@ -13,80 +13,79 @@ class Foo[a: i32, b: i32, c: i32, d: i32, e: i32, f: i32](); interface Bar[a: i32, b: i32, c: i32, d: i32, e: i32, f: i32]() {} // CHECK:STDOUT: - filename: six.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'ImplicitParamListStart', text: '['}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'c'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'd'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'e'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'f'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 31}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ClassDecl', text: ';', subtree_size: 36}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Bar'}, -// CHECK:STDOUT: {kind: 'ImplicitParamListStart', text: '['}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'c'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'd'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'e'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'f'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 31}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 36}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 37}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'Foo' +// CHECK:STDOUT: │ │ ╭─ImplicitParamListStart '[' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'c' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'd' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'e' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'f' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ ├─ImplicitParamList ']' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─ClassDecl ';' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'Bar' +// CHECK:STDOUT: │ │ ╭─ImplicitParamListStart '[' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'c' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'd' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'e' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'f' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ ├─ImplicitParamList ']' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/deduced_params/two.carbon b/toolchain/parse/testdata/generics/deduced_params/two.carbon index 179ccb4e2c27..aa43257e6024 100644 --- a/toolchain/parse/testdata/generics/deduced_params/two.carbon +++ b/toolchain/parse/testdata/generics/deduced_params/two.carbon @@ -13,40 +13,39 @@ class Foo[a: i32, b: i32](); interface Bar[a: i32, b: i32]() {} // CHECK:STDOUT: - filename: two.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'ImplicitParamListStart', text: '['}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ClassDecl', text: ';', subtree_size: 16}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Bar'}, -// CHECK:STDOUT: {kind: 'ImplicitParamListStart', text: '['}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 16}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 17}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'Foo' +// CHECK:STDOUT: │ │ ╭─ImplicitParamListStart '[' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ ├─ImplicitParamList ']' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─ClassDecl ';' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'Bar' +// CHECK:STDOUT: │ │ ╭─ImplicitParamListStart '[' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ ├─ImplicitParamList ']' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/deduced_params/two_suffix_comma.carbon b/toolchain/parse/testdata/generics/deduced_params/two_suffix_comma.carbon index c3c3986c29d8..a40e3fdd3c8e 100644 --- a/toolchain/parse/testdata/generics/deduced_params/two_suffix_comma.carbon +++ b/toolchain/parse/testdata/generics/deduced_params/two_suffix_comma.carbon @@ -13,42 +13,41 @@ class Foo[a: i32, b: i32,](); interface Bar[a: i32, b: i32,]() {} // CHECK:STDOUT: - filename: two_suffix_comma.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'ImplicitParamListStart', text: '['}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ClassDecl', text: ';', subtree_size: 17}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Bar'}, -// CHECK:STDOUT: {kind: 'ImplicitParamListStart', text: '['}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 17}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 18}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'Foo' +// CHECK:STDOUT: │ │ ╭─ImplicitParamListStart '[' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ ├─ImplicitParamList ']' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─ClassDecl ';' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'Bar' +// CHECK:STDOUT: │ │ ╭─ImplicitParamListStart '[' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ ├─ImplicitParamList ']' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/generic_params/basic.carbon b/toolchain/parse/testdata/generics/generic_params/basic.carbon index b19f9e95dd27..dc6568a4f5b9 100644 --- a/toolchain/parse/testdata/generics/generic_params/basic.carbon +++ b/toolchain/parse/testdata/generics/generic_params/basic.carbon @@ -11,16 +11,15 @@ fn foo(generic a: i32); // CHECK:STDOUT: - filename: basic.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'foo'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'foo' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/generic_params/fail_template_no_param.carbon b/toolchain/parse/testdata/generics/generic_params/fail_template_no_param.carbon index a5fde039aaae..8661c2ea1d27 100644 --- a/toolchain/parse/testdata/generics/generic_params/fail_template_no_param.carbon +++ b/toolchain/parse/testdata/generics/generic_params/fail_template_no_param.carbon @@ -33,44 +33,41 @@ fn C(template); fn E(generic template: i32); // CHECK:STDOUT: - filename: fail_template_before_type.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'A'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'i32', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: 'i32', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: 'i32', has_error: yes}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: 'template', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'A' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'i32' has_error +// CHECK:STDOUT: │ │ │ ├─InvalidParse 'i32' has_error +// CHECK:STDOUT: │ │ │ ├─InvalidParse 'i32' has_error +// CHECK:STDOUT: │ │ ├─LetBindingPattern 'template' has_error +// CHECK:STDOUT: │ ├─ExplicitParamList ')' has_error +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_template_no_name.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'C'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: ')', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ')', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ')', has_error: yes}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: 'template', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'C' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature ')' has_error +// CHECK:STDOUT: │ │ │ ├─InvalidParse ')' has_error +// CHECK:STDOUT: │ │ │ ├─InvalidParse ')' has_error +// CHECK:STDOUT: │ │ ├─LetBindingPattern 'template' has_error +// CHECK:STDOUT: │ ├─ExplicitParamList ')' has_error +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_reserved_word_after_generic.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'E'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'template'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'E' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'template' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/generic_params/template.carbon b/toolchain/parse/testdata/generics/generic_params/template.carbon index 8b47dd946f0b..aff3c8811b87 100644 --- a/toolchain/parse/testdata/generics/generic_params/template.carbon +++ b/toolchain/parse/testdata/generics/generic_params/template.carbon @@ -33,51 +33,49 @@ fn foo(template ref a: i32); fn foo(ref template a: i32); // CHECK:STDOUT: - filename: basic.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'foo'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'TemplateBindingName', text: 'template', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'foo' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ ╭─TemplateBindingName 'template' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_template_ref.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'foo'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'TemplateBindingName', text: 'template', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':', has_error: yes}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', has_error: yes, subtree_size: 7}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'foo'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'TemplateBindingName', text: 'template', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':', has_error: yes}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', has_error: yes, subtree_size: 7}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'foo'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'template', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: 'template', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: 'template', has_error: yes}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: 'ref', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'foo' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ ╭─TemplateBindingName 'template' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' has_error +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' has_error +// CHECK:STDOUT: │ ├─ExplicitParamList ')' has_error +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'foo' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ ╭─TemplateBindingName 'template' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' has_error +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' has_error +// CHECK:STDOUT: │ ├─ExplicitParamList ')' has_error +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'foo' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'template' has_error +// CHECK:STDOUT: │ │ │ ├─InvalidParse 'template' has_error +// CHECK:STDOUT: │ │ │ ├─InvalidParse 'template' has_error +// CHECK:STDOUT: │ │ ├─LetBindingPattern 'ref' has_error +// CHECK:STDOUT: │ ├─ExplicitParamList ')' has_error +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/impl/basic.carbon b/toolchain/parse/testdata/generics/impl/basic.carbon index 41bd13eb5ef5..9cc969066baf 100644 --- a/toolchain/parse/testdata/generics/impl/basic.carbon +++ b/toolchain/parse/testdata/generics/impl/basic.carbon @@ -13,27 +13,26 @@ impl i32 as Interface { } // CHECK:STDOUT: - filename: basic.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ImplIntroducer', text: 'impl'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'ImplTypeAs', text: 'as', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Interface'}, -// CHECK:STDOUT: {kind: 'ImplDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Add'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'SelfValueName', text: 'self'}, -// CHECK:STDOUT: {kind: 'SelfBindingPattern', text: 'self', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, -// CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'ImplDefinition', text: '}', subtree_size: 20}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ImplIntroducer 'impl' +// CHECK:STDOUT: │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ ├─ImplTypeAs 'as' +// CHECK:STDOUT: │ ├─IdentifierNameExpr 'Interface' +// CHECK:STDOUT: │ ╭─ImplDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ ├─IdentifierNameMaybeBeforeSignature 'Add' +// CHECK:STDOUT: │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ │ ╭─SelfValueName 'self' +// CHECK:STDOUT: │ │ │ ├─SelfBindingPattern 'self' +// CHECK:STDOUT: │ │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─SelfTypeNameExpr 'Self' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ │ ╭─SelfTypeNameExpr 'Self' +// CHECK:STDOUT: │ │ ├─ReturnType '->' +// CHECK:STDOUT: │ ├─FunctionDecl ';' +// CHECK:STDOUT: ├─ImplDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/impl/class.carbon b/toolchain/parse/testdata/generics/impl/class.carbon index c97024f3ab6b..1ea9f6c19c19 100644 --- a/toolchain/parse/testdata/generics/impl/class.carbon +++ b/toolchain/parse/testdata/generics/impl/class.carbon @@ -20,43 +20,42 @@ class C { } // CHECK:STDOUT: - filename: class.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'C'}, -// CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ImplIntroducer', text: 'impl'}, -// CHECK:STDOUT: {kind: 'ImplDefaultSelfAs', text: 'as'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'ForwardDeclared'}, -// CHECK:STDOUT: {kind: 'ImplDecl', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ImplIntroducer', text: 'impl'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'C'}, -// CHECK:STDOUT: {kind: 'ImplTypeAs', text: 'as', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'ExplicitType'}, -// CHECK:STDOUT: {kind: 'ImplDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ImplDefinition', text: '}', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ImplIntroducer', text: 'impl'}, -// CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, -// CHECK:STDOUT: {kind: 'ImplTypeAs', text: 'as', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'ExplicitSelf'}, -// CHECK:STDOUT: {kind: 'ImplDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ImplIntroducer', text: 'impl'}, -// CHECK:STDOUT: {kind: 'ExtendModifier', text: 'extend'}, -// CHECK:STDOUT: {kind: 'ImplDefaultSelfAs', text: 'as'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'ExtendImpl'}, -// CHECK:STDOUT: {kind: 'ImplDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ImplDefinition', text: '}', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'ImplIntroducer', text: 'impl'}, -// CHECK:STDOUT: {kind: 'ExtendModifier', text: 'extend'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'C'}, -// CHECK:STDOUT: {kind: 'ImplTypeAs', text: 'as', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'InvalidButDiagnosedInCheck'}, -// CHECK:STDOUT: {kind: 'ImplDecl', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 36}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'C' +// CHECK:STDOUT: │ ╭─ClassDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─ImplIntroducer 'impl' +// CHECK:STDOUT: │ │ ├─ImplDefaultSelfAs 'as' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'ForwardDeclared' +// CHECK:STDOUT: │ ├─ImplDecl ';' +// CHECK:STDOUT: │ │ ╭─ImplIntroducer 'impl' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'C' +// CHECK:STDOUT: │ │ ├─ImplTypeAs 'as' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'ExplicitType' +// CHECK:STDOUT: │ │ ╭─ImplDefinitionStart '{' +// CHECK:STDOUT: │ ├─ImplDefinition '}' +// CHECK:STDOUT: │ │ ╭─ImplIntroducer 'impl' +// CHECK:STDOUT: │ │ │ ╭─SelfTypeNameExpr 'Self' +// CHECK:STDOUT: │ │ ├─ImplTypeAs 'as' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'ExplicitSelf' +// CHECK:STDOUT: │ ├─ImplDecl ';' +// CHECK:STDOUT: │ │ ╭─ImplIntroducer 'impl' +// CHECK:STDOUT: │ │ ├─ExtendModifier 'extend' +// CHECK:STDOUT: │ │ ├─ImplDefaultSelfAs 'as' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'ExtendImpl' +// CHECK:STDOUT: │ │ ╭─ImplDefinitionStart '{' +// CHECK:STDOUT: │ │ │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ├─FunctionDecl ';' +// CHECK:STDOUT: │ ├─ImplDefinition '}' +// CHECK:STDOUT: │ │ ╭─ImplIntroducer 'impl' +// CHECK:STDOUT: │ │ ├─ExtendModifier 'extend' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'C' +// CHECK:STDOUT: │ │ ├─ImplTypeAs 'as' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'InvalidButDiagnosedInCheck' +// CHECK:STDOUT: │ ├─ImplDecl ';' +// CHECK:STDOUT: ├─ClassDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/impl/declaration.carbon b/toolchain/parse/testdata/generics/impl/declaration.carbon index 75fade94ddd7..291ab423162e 100644 --- a/toolchain/parse/testdata/generics/impl/declaration.carbon +++ b/toolchain/parse/testdata/generics/impl/declaration.carbon @@ -11,12 +11,11 @@ impl bool as Interface; // CHECK:STDOUT: - filename: declaration.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ImplIntroducer', text: 'impl'}, -// CHECK:STDOUT: {kind: 'BoolTypeLiteral', text: 'bool'}, -// CHECK:STDOUT: {kind: 'ImplTypeAs', text: 'as', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Interface'}, -// CHECK:STDOUT: {kind: 'ImplDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ImplIntroducer 'impl' +// CHECK:STDOUT: │ │ ╭─BoolTypeLiteral 'bool' +// CHECK:STDOUT: │ ├─ImplTypeAs 'as' +// CHECK:STDOUT: │ ├─IdentifierNameExpr 'Interface' +// CHECK:STDOUT: ├─ImplDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/impl/empty_body.carbon b/toolchain/parse/testdata/generics/impl/empty_body.carbon index 6e77f114087a..91fe7fcf1572 100644 --- a/toolchain/parse/testdata/generics/impl/empty_body.carbon +++ b/toolchain/parse/testdata/generics/impl/empty_body.carbon @@ -12,13 +12,12 @@ impl str as Interface { } // CHECK:STDOUT: - filename: empty_body.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ImplIntroducer', text: 'impl'}, -// CHECK:STDOUT: {kind: 'StringTypeLiteral', text: 'str'}, -// CHECK:STDOUT: {kind: 'ImplTypeAs', text: 'as', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Interface'}, -// CHECK:STDOUT: {kind: 'ImplDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ImplDefinition', text: '}', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ImplIntroducer 'impl' +// CHECK:STDOUT: │ │ ╭─StringTypeLiteral 'str' +// CHECK:STDOUT: │ ├─ImplTypeAs 'as' +// CHECK:STDOUT: │ ├─IdentifierNameExpr 'Interface' +// CHECK:STDOUT: │ ╭─ImplDefinitionStart '{' +// CHECK:STDOUT: ├─ImplDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/impl/fail_impl.carbon b/toolchain/parse/testdata/generics/impl/fail_impl.carbon index e4d23739c68f..72d15fad165e 100644 --- a/toolchain/parse/testdata/generics/impl/fail_impl.carbon +++ b/toolchain/parse/testdata/generics/impl/fail_impl.carbon @@ -92,94 +92,93 @@ impl; impl -// CHECK:STDERR: fail_impl.carbon:[[@LINE+90]]:21: error: expected expression [ExpectedExpr] -// CHECK:STDERR: // CHECK:STDOUT: ] -// CHECK:STDERR: ^ +// CHECK:STDERR: fail_impl.carbon:[[@LINE+89]]:26: error: expected expression [ExpectedExpr] +// CHECK:STDERR: // CHECK:STDOUT: (root) +// CHECK:STDERR: ^ // CHECK:STDERR: // CHECK:STDOUT: - filename: fail_impl.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ImplIntroducer', text: 'impl'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'foo'}, -// CHECK:STDOUT: {kind: 'ImplDecl', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ImplIntroducer', text: 'impl'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'ImplTypeAs', text: 'as', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ';', has_error: yes}, -// CHECK:STDOUT: {kind: 'ImplDecl', text: ';', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ImplIntroducer', text: 'impl'}, -// CHECK:STDOUT: {kind: 'BoolTypeLiteral', text: 'bool'}, -// CHECK:STDOUT: {kind: 'ImplTypeAs', text: 'as', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'bar'}, -// CHECK:STDOUT: {kind: 'ImplDecl', text: ';', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ImplIntroducer', text: 'impl'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: 'return', has_error: yes}, -// CHECK:STDOUT: {kind: 'ImplDecl', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ImplIntroducer', text: 'impl'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: 'return', has_error: yes}, -// CHECK:STDOUT: {kind: 'ImplDecl', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ImplIntroducer', text: 'impl'}, -// CHECK:STDOUT: {kind: 'Forall', text: 'forall'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: 'f32', has_error: yes}, -// CHECK:STDOUT: {kind: 'FloatTypeLiteral', text: 'f32'}, -// CHECK:STDOUT: {kind: 'ImplDecl', text: ';', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ImplIntroducer', text: 'impl'}, -// CHECK:STDOUT: {kind: 'Forall', text: 'forall'}, -// CHECK:STDOUT: {kind: 'ImplicitParamListStart', text: '['}, -// CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'UnsignedIntTypeLiteral', text: 'u32'}, -// CHECK:STDOUT: {kind: 'ImplDecl', text: ';', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ImplIntroducer', text: 'impl'}, -// CHECK:STDOUT: {kind: 'Forall', text: 'forall'}, -// CHECK:STDOUT: {kind: 'ImplicitParamListStart', text: '['}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'invalid'}, -// CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i8'}, -// CHECK:STDOUT: {kind: 'ImplDecl', text: ';', has_error: yes, subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ImplIntroducer', text: 'impl'}, -// CHECK:STDOUT: {kind: 'Forall', text: 'forall'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: 'f16', has_error: yes}, -// CHECK:STDOUT: {kind: 'FloatTypeLiteral', text: 'f16'}, -// CHECK:STDOUT: {kind: 'ImplTypeAs', text: 'as', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Quux'}, -// CHECK:STDOUT: {kind: 'ImplDecl', text: ';', has_error: yes, subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ImplIntroducer', text: 'impl'}, -// CHECK:STDOUT: {kind: 'Forall', text: 'forall'}, -// CHECK:STDOUT: {kind: 'ImplicitParamListStart', text: '['}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'T'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'StringTypeLiteral', text: 'str'}, -// CHECK:STDOUT: {kind: 'ImplDecl', text: ';', has_error: yes, subtree_size: 10}, -// CHECK:STDOUT: {kind: 'ImplIntroducer', text: 'impl'}, -// CHECK:STDOUT: {kind: 'Forall', text: 'forall'}, -// CHECK:STDOUT: {kind: 'ImplicitParamListStart', text: '['}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'T'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'T'}, -// CHECK:STDOUT: {kind: 'ImplDecl', text: ';', has_error: yes, subtree_size: 10}, -// CHECK:STDOUT: {kind: 'ImplIntroducer', text: 'impl'}, -// CHECK:STDOUT: {kind: 'Forall', text: 'forall'}, -// CHECK:STDOUT: {kind: 'ImplicitParamListStart', text: '['}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'T'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'T'}, -// CHECK:STDOUT: {kind: 'ImplTypeAs', text: 'as', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Interface'}, -// CHECK:STDOUT: {kind: 'ImplDecl', text: ';', has_error: yes, subtree_size: 12}, -// CHECK:STDOUT: {kind: 'ImplIntroducer', text: 'impl'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ';', has_error: yes}, -// CHECK:STDOUT: {kind: 'ImplDecl', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ImplIntroducer', text: 'impl'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '', has_error: yes}, -// CHECK:STDOUT: {kind: 'ImplDecl', text: 'impl', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ImplIntroducer 'impl' +// CHECK:STDOUT: │ ├─IdentifierNameExpr 'foo' +// CHECK:STDOUT: ├─ImplDecl ';' has_error +// CHECK:STDOUT: │ ╭─ImplIntroducer 'impl' +// CHECK:STDOUT: │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ ├─ImplTypeAs 'as' +// CHECK:STDOUT: │ ├─InvalidParse ';' has_error +// CHECK:STDOUT: ├─ImplDecl ';' has_error +// CHECK:STDOUT: │ ╭─ImplIntroducer 'impl' +// CHECK:STDOUT: │ │ ╭─BoolTypeLiteral 'bool' +// CHECK:STDOUT: │ ├─ImplTypeAs 'as' +// CHECK:STDOUT: │ ├─IdentifierNameExpr 'bar' +// CHECK:STDOUT: ├─ImplDecl ';' has_error +// CHECK:STDOUT: │ ╭─ImplIntroducer 'impl' +// CHECK:STDOUT: │ ├─InvalidParse 'return' has_error +// CHECK:STDOUT: ├─ImplDecl ';' has_error +// CHECK:STDOUT: │ ╭─ImplIntroducer 'impl' +// CHECK:STDOUT: │ ├─InvalidParse 'return' has_error +// CHECK:STDOUT: ├─ImplDecl ';' has_error +// CHECK:STDOUT: │ ╭─ImplIntroducer 'impl' +// CHECK:STDOUT: │ ├─Forall 'forall' +// CHECK:STDOUT: │ ├─InvalidParse 'f32' has_error +// CHECK:STDOUT: │ ├─FloatTypeLiteral 'f32' +// CHECK:STDOUT: ├─ImplDecl ';' has_error +// CHECK:STDOUT: │ ╭─ImplIntroducer 'impl' +// CHECK:STDOUT: │ ├─Forall 'forall' +// CHECK:STDOUT: │ │ ╭─ImplicitParamListStart '[' +// CHECK:STDOUT: │ ├─ImplicitParamList ']' +// CHECK:STDOUT: │ ├─UnsignedIntTypeLiteral 'u32' +// CHECK:STDOUT: ├─ImplDecl ';' has_error +// CHECK:STDOUT: │ ╭─ImplIntroducer 'impl' +// CHECK:STDOUT: │ ├─Forall 'forall' +// CHECK:STDOUT: │ │ ╭─ImplicitParamListStart '[' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'invalid' +// CHECK:STDOUT: │ ├─ImplicitParamList ']' +// CHECK:STDOUT: │ ├─IntTypeLiteral 'i8' +// CHECK:STDOUT: ├─ImplDecl ';' has_error +// CHECK:STDOUT: │ ╭─ImplIntroducer 'impl' +// CHECK:STDOUT: │ ├─Forall 'forall' +// CHECK:STDOUT: │ ├─InvalidParse 'f16' has_error +// CHECK:STDOUT: │ │ ╭─FloatTypeLiteral 'f16' +// CHECK:STDOUT: │ ├─ImplTypeAs 'as' +// CHECK:STDOUT: │ ├─IdentifierNameExpr 'Quux' +// CHECK:STDOUT: ├─ImplDecl ';' has_error +// CHECK:STDOUT: │ ╭─ImplIntroducer 'impl' +// CHECK:STDOUT: │ ├─Forall 'forall' +// CHECK:STDOUT: │ │ ╭─ImplicitParamListStart '[' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'T' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─TypeTypeLiteral 'type' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ ├─ImplicitParamList ']' +// CHECK:STDOUT: │ ├─StringTypeLiteral 'str' +// CHECK:STDOUT: ├─ImplDecl ';' has_error +// CHECK:STDOUT: │ ╭─ImplIntroducer 'impl' +// CHECK:STDOUT: │ ├─Forall 'forall' +// CHECK:STDOUT: │ │ ╭─ImplicitParamListStart '[' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'T' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─TypeTypeLiteral 'type' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ ├─ImplicitParamList ']' +// CHECK:STDOUT: │ ├─IdentifierNameExpr 'T' +// CHECK:STDOUT: ├─ImplDecl ';' has_error +// CHECK:STDOUT: │ ╭─ImplIntroducer 'impl' +// CHECK:STDOUT: │ ├─Forall 'forall' +// CHECK:STDOUT: │ │ ╭─ImplicitParamListStart '[' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'T' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─TypeTypeLiteral 'type' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ ├─ImplicitParamList ']' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'T' +// CHECK:STDOUT: │ ├─ImplTypeAs 'as' +// CHECK:STDOUT: │ ├─IdentifierNameExpr 'Interface' +// CHECK:STDOUT: ├─ImplDecl ';' has_error +// CHECK:STDOUT: │ ╭─ImplIntroducer 'impl' +// CHECK:STDOUT: │ ├─InvalidParse ';' has_error +// CHECK:STDOUT: ├─ImplDecl ';' has_error +// CHECK:STDOUT: │ ╭─ImplIntroducer 'impl' +// CHECK:STDOUT: │ ├─InvalidParse '' has_error +// CHECK:STDOUT: ├─ImplDecl 'impl' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/impl/fail_out_of_line_member.carbon b/toolchain/parse/testdata/generics/impl/fail_out_of_line_member.carbon index 54c788da6987..ffaaba41b0ee 100644 --- a/toolchain/parse/testdata/generics/impl/fail_out_of_line_member.carbon +++ b/toolchain/parse/testdata/generics/impl/fail_out_of_line_member.carbon @@ -37,50 +37,49 @@ class C { fn C.(Self as Interface).F() {} // CHECK:STDOUT: - filename: fail_out_of_line_member.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Interface'}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'ImplIntroducer', text: 'impl'}, -// CHECK:STDOUT: {kind: 'BoolTypeLiteral', text: 'bool'}, -// CHECK:STDOUT: {kind: 'ImplTypeAs', text: 'as', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Interface'}, -// CHECK:STDOUT: {kind: 'ImplDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ImplDefinition', text: '}', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '(', has_error: yes}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: '}', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'C'}, -// CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ImplIntroducer', text: 'impl'}, -// CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, -// CHECK:STDOUT: {kind: 'ImplTypeAs', text: 'as', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Interface'}, -// CHECK:STDOUT: {kind: 'ImplDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ImplDefinition', text: '}', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'C'}, -// CHECK:STDOUT: {kind: 'IdentifierNameQualifierWithoutParams', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '(', has_error: yes}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: '}', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Interface' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ├─FunctionDecl ';' +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: │ ╭─ImplIntroducer 'impl' +// CHECK:STDOUT: │ │ ╭─BoolTypeLiteral 'bool' +// CHECK:STDOUT: │ ├─ImplTypeAs 'as' +// CHECK:STDOUT: │ ├─IdentifierNameExpr 'Interface' +// CHECK:STDOUT: │ ╭─ImplDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ├─FunctionDecl ';' +// CHECK:STDOUT: ├─ImplDefinition '}' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─InvalidParse '(' has_error +// CHECK:STDOUT: ├─FunctionDecl '}' has_error +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'C' +// CHECK:STDOUT: │ ╭─ClassDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─ImplIntroducer 'impl' +// CHECK:STDOUT: │ │ │ ╭─SelfTypeNameExpr 'Self' +// CHECK:STDOUT: │ │ ├─ImplTypeAs 'as' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'Interface' +// CHECK:STDOUT: │ │ ╭─ImplDefinitionStart '{' +// CHECK:STDOUT: │ │ │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ├─FunctionDecl ';' +// CHECK:STDOUT: │ ├─ImplDefinition '}' +// CHECK:STDOUT: ├─ClassDefinition '}' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'C' +// CHECK:STDOUT: │ ├─IdentifierNameQualifierWithoutParams '.' +// CHECK:STDOUT: │ ├─InvalidParse '(' has_error +// CHECK:STDOUT: ├─FunctionDecl '}' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/impl/final_match_first.carbon b/toolchain/parse/testdata/generics/impl/final_match_first.carbon index 262e86c8a845..af2a037b0c1c 100644 --- a/toolchain/parse/testdata/generics/impl/final_match_first.carbon +++ b/toolchain/parse/testdata/generics/impl/final_match_first.carbon @@ -21,65 +21,64 @@ impl forall [T: J] T as Interface { } // CHECK:STDOUT: - filename: final_match_first.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'MatchFirstIntroducer', text: 'match_first'}, -// CHECK:STDOUT: {kind: 'FinalModifier', text: 'final'}, -// CHECK:STDOUT: {kind: 'MatchFirstDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ImplIntroducer', text: 'impl'}, -// CHECK:STDOUT: {kind: 'Forall', text: 'forall'}, -// CHECK:STDOUT: {kind: 'ImplicitParamListStart', text: '['}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'T'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'I'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'T'}, -// CHECK:STDOUT: {kind: 'ImplTypeAs', text: 'as', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Interface'}, -// CHECK:STDOUT: {kind: 'ImplDefinitionStart', text: '{', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Add'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'SelfValueName', text: 'self'}, -// CHECK:STDOUT: {kind: 'SelfBindingPattern', text: 'self', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, -// CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'ImplDefinition', text: '}', subtree_size: 27}, -// CHECK:STDOUT: {kind: 'ImplIntroducer', text: 'impl'}, -// CHECK:STDOUT: {kind: 'Forall', text: 'forall'}, -// CHECK:STDOUT: {kind: 'ImplicitParamListStart', text: '['}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'T'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'J'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'T'}, -// CHECK:STDOUT: {kind: 'ImplTypeAs', text: 'as', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Interface'}, -// CHECK:STDOUT: {kind: 'ImplDefinitionStart', text: '{', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Add'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'SelfValueName', text: 'self'}, -// CHECK:STDOUT: {kind: 'SelfBindingPattern', text: 'self', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, -// CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'ImplDefinition', text: '}', subtree_size: 27}, -// CHECK:STDOUT: {kind: 'MatchFirst', text: '}', subtree_size: 58}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─MatchFirstIntroducer 'match_first' +// CHECK:STDOUT: │ ├─FinalModifier 'final' +// CHECK:STDOUT: │ ╭─MatchFirstDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─ImplIntroducer 'impl' +// CHECK:STDOUT: │ │ ├─Forall 'forall' +// CHECK:STDOUT: │ │ │ ╭─ImplicitParamListStart '[' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'T' +// CHECK:STDOUT: │ │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IdentifierNameExpr 'I' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─ImplicitParamList ']' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'T' +// CHECK:STDOUT: │ │ ├─ImplTypeAs 'as' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'Interface' +// CHECK:STDOUT: │ │ ╭─ImplDefinitionStart '{' +// CHECK:STDOUT: │ │ │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameMaybeBeforeSignature 'Add' +// CHECK:STDOUT: │ │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ │ │ ╭─SelfValueName 'self' +// CHECK:STDOUT: │ │ │ │ ├─SelfBindingPattern 'self' +// CHECK:STDOUT: │ │ │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ │ ├─SelfTypeNameExpr 'Self' +// CHECK:STDOUT: │ │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ │ │ ╭─SelfTypeNameExpr 'Self' +// CHECK:STDOUT: │ │ │ ├─ReturnType '->' +// CHECK:STDOUT: │ │ ├─FunctionDecl ';' +// CHECK:STDOUT: │ ├─ImplDefinition '}' +// CHECK:STDOUT: │ │ ╭─ImplIntroducer 'impl' +// CHECK:STDOUT: │ │ ├─Forall 'forall' +// CHECK:STDOUT: │ │ │ ╭─ImplicitParamListStart '[' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'T' +// CHECK:STDOUT: │ │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IdentifierNameExpr 'J' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─ImplicitParamList ']' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'T' +// CHECK:STDOUT: │ │ ├─ImplTypeAs 'as' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'Interface' +// CHECK:STDOUT: │ │ ╭─ImplDefinitionStart '{' +// CHECK:STDOUT: │ │ │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameMaybeBeforeSignature 'Add' +// CHECK:STDOUT: │ │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ │ │ ╭─SelfValueName 'self' +// CHECK:STDOUT: │ │ │ │ ├─SelfBindingPattern 'self' +// CHECK:STDOUT: │ │ │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ │ ├─SelfTypeNameExpr 'Self' +// CHECK:STDOUT: │ │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ │ │ ╭─SelfTypeNameExpr 'Self' +// CHECK:STDOUT: │ │ │ ├─ReturnType '->' +// CHECK:STDOUT: │ │ ├─FunctionDecl ';' +// CHECK:STDOUT: │ ├─ImplDefinition '}' +// CHECK:STDOUT: ├─MatchFirst '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/impl/forall.carbon b/toolchain/parse/testdata/generics/impl/forall.carbon index 30a6b9d7572b..4b1c7724c404 100644 --- a/toolchain/parse/testdata/generics/impl/forall.carbon +++ b/toolchain/parse/testdata/generics/impl/forall.carbon @@ -14,40 +14,39 @@ impl forall [T: type, U: Interface] U as Interface(T) { } // CHECK:STDOUT: - filename: forall.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ImplIntroducer', text: 'impl'}, -// CHECK:STDOUT: {kind: 'Forall', text: 'forall'}, -// CHECK:STDOUT: {kind: 'ImplicitParamListStart', text: '['}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'T'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'T'}, -// CHECK:STDOUT: {kind: 'ImplTypeAs', text: 'as', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Interface'}, -// CHECK:STDOUT: {kind: 'ImplDecl', text: ';', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'ImplIntroducer', text: 'impl'}, -// CHECK:STDOUT: {kind: 'Forall', text: 'forall'}, -// CHECK:STDOUT: {kind: 'ImplicitParamListStart', text: '['}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'T'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'U'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Interface'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'U'}, -// CHECK:STDOUT: {kind: 'ImplTypeAs', text: 'as', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Interface'}, -// CHECK:STDOUT: {kind: 'CallExprStart', text: '(', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'T'}, -// CHECK:STDOUT: {kind: 'CallExpr', text: ')', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ImplDefinitionStart', text: '{', subtree_size: 20}, -// CHECK:STDOUT: {kind: 'ImplDefinition', text: '}', subtree_size: 21}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ImplIntroducer 'impl' +// CHECK:STDOUT: │ ├─Forall 'forall' +// CHECK:STDOUT: │ │ ╭─ImplicitParamListStart '[' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'T' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─TypeTypeLiteral 'type' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ ├─ImplicitParamList ']' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'T' +// CHECK:STDOUT: │ ├─ImplTypeAs 'as' +// CHECK:STDOUT: │ ├─IdentifierNameExpr 'Interface' +// CHECK:STDOUT: ├─ImplDecl ';' +// CHECK:STDOUT: │ ╭─ImplIntroducer 'impl' +// CHECK:STDOUT: │ ├─Forall 'forall' +// CHECK:STDOUT: │ │ ╭─ImplicitParamListStart '[' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'T' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─TypeTypeLiteral 'type' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'U' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'Interface' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ ├─ImplicitParamList ']' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'U' +// CHECK:STDOUT: │ ├─ImplTypeAs 'as' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'Interface' +// CHECK:STDOUT: │ │ ╭─CallExprStart '(' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'T' +// CHECK:STDOUT: │ ├─CallExpr ')' +// CHECK:STDOUT: │ ╭─ImplDefinitionStart '{' +// CHECK:STDOUT: ├─ImplDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/impl/match_first.carbon b/toolchain/parse/testdata/generics/impl/match_first.carbon index f51acbed2df7..f069eb2b997f 100644 --- a/toolchain/parse/testdata/generics/impl/match_first.carbon +++ b/toolchain/parse/testdata/generics/impl/match_first.carbon @@ -43,89 +43,85 @@ impl forall [T: J] T as Interface { } // CHECK:STDOUT: - filename: empty.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'MatchFirstIntroducer', text: 'match_first'}, -// CHECK:STDOUT: {kind: 'MatchFirstDefinitionStart', text: '{', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'MatchFirst', text: '}', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─MatchFirstIntroducer 'match_first' +// CHECK:STDOUT: │ ╭─MatchFirstDefinitionStart '{' +// CHECK:STDOUT: ├─MatchFirst '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_missing_braces.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'MatchFirstIntroducer', text: 'match_first'}, -// CHECK:STDOUT: {kind: 'MatchFirstDefinitionStart', text: 'match_first', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'MatchFirst', text: 'match_first', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'EmptyDecl', text: ';'}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─MatchFirstIntroducer 'match_first' +// CHECK:STDOUT: │ ╭─MatchFirstDefinitionStart 'match_first' has_error +// CHECK:STDOUT: ├─MatchFirst 'match_first' has_error +// CHECK:STDOUT: ├─EmptyDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_eof.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'MatchFirstIntroducer', text: 'match_first'}, -// CHECK:STDOUT: {kind: 'MatchFirstDefinitionStart', text: 'match_first', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'MatchFirst', text: 'match_first', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─MatchFirstIntroducer 'match_first' +// CHECK:STDOUT: │ ╭─MatchFirstDefinitionStart 'match_first' has_error +// CHECK:STDOUT: ├─MatchFirst 'match_first' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: with_impls.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'MatchFirstIntroducer', text: 'match_first'}, -// CHECK:STDOUT: {kind: 'MatchFirstDefinitionStart', text: '{', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ImplIntroducer', text: 'impl'}, -// CHECK:STDOUT: {kind: 'Forall', text: 'forall'}, -// CHECK:STDOUT: {kind: 'ImplicitParamListStart', text: '['}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'T'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'I'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'T'}, -// CHECK:STDOUT: {kind: 'ImplTypeAs', text: 'as', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Interface'}, -// CHECK:STDOUT: {kind: 'ImplDefinitionStart', text: '{', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Add'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'SelfValueName', text: 'self'}, -// CHECK:STDOUT: {kind: 'SelfBindingPattern', text: 'self', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, -// CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'ImplDefinition', text: '}', subtree_size: 27}, -// CHECK:STDOUT: {kind: 'ImplIntroducer', text: 'impl'}, -// CHECK:STDOUT: {kind: 'Forall', text: 'forall'}, -// CHECK:STDOUT: {kind: 'ImplicitParamListStart', text: '['}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'T'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'J'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'T'}, -// CHECK:STDOUT: {kind: 'ImplTypeAs', text: 'as', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Interface'}, -// CHECK:STDOUT: {kind: 'ImplDefinitionStart', text: '{', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Add'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'SelfValueName', text: 'self'}, -// CHECK:STDOUT: {kind: 'SelfBindingPattern', text: 'self', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, -// CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'ImplDefinition', text: '}', subtree_size: 27}, -// CHECK:STDOUT: {kind: 'MatchFirst', text: '}', subtree_size: 57}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─MatchFirstIntroducer 'match_first' +// CHECK:STDOUT: │ ╭─MatchFirstDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─ImplIntroducer 'impl' +// CHECK:STDOUT: │ │ ├─Forall 'forall' +// CHECK:STDOUT: │ │ │ ╭─ImplicitParamListStart '[' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'T' +// CHECK:STDOUT: │ │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IdentifierNameExpr 'I' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─ImplicitParamList ']' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'T' +// CHECK:STDOUT: │ │ ├─ImplTypeAs 'as' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'Interface' +// CHECK:STDOUT: │ │ ╭─ImplDefinitionStart '{' +// CHECK:STDOUT: │ │ │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameMaybeBeforeSignature 'Add' +// CHECK:STDOUT: │ │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ │ │ ╭─SelfValueName 'self' +// CHECK:STDOUT: │ │ │ │ ├─SelfBindingPattern 'self' +// CHECK:STDOUT: │ │ │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ │ ├─SelfTypeNameExpr 'Self' +// CHECK:STDOUT: │ │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ │ │ ╭─SelfTypeNameExpr 'Self' +// CHECK:STDOUT: │ │ │ ├─ReturnType '->' +// CHECK:STDOUT: │ │ ├─FunctionDecl ';' +// CHECK:STDOUT: │ ├─ImplDefinition '}' +// CHECK:STDOUT: │ │ ╭─ImplIntroducer 'impl' +// CHECK:STDOUT: │ │ ├─Forall 'forall' +// CHECK:STDOUT: │ │ │ ╭─ImplicitParamListStart '[' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'T' +// CHECK:STDOUT: │ │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IdentifierNameExpr 'J' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─ImplicitParamList ']' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'T' +// CHECK:STDOUT: │ │ ├─ImplTypeAs 'as' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'Interface' +// CHECK:STDOUT: │ │ ╭─ImplDefinitionStart '{' +// CHECK:STDOUT: │ │ │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameMaybeBeforeSignature 'Add' +// CHECK:STDOUT: │ │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ │ │ ╭─SelfValueName 'self' +// CHECK:STDOUT: │ │ │ │ ├─SelfBindingPattern 'self' +// CHECK:STDOUT: │ │ │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ │ ├─SelfTypeNameExpr 'Self' +// CHECK:STDOUT: │ │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ │ │ ╭─SelfTypeNameExpr 'Self' +// CHECK:STDOUT: │ │ │ ├─ReturnType '->' +// CHECK:STDOUT: │ │ ├─FunctionDecl ';' +// CHECK:STDOUT: │ ├─ImplDefinition '}' +// CHECK:STDOUT: ├─MatchFirst '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/interface/associated_constants.carbon b/toolchain/parse/testdata/generics/interface/associated_constants.carbon index a622d546e5a6..9a3929db3257 100644 --- a/toolchain/parse/testdata/generics/interface/associated_constants.carbon +++ b/toolchain/parse/testdata/generics/interface/associated_constants.carbon @@ -29,70 +29,68 @@ interface I { } // CHECK:STDOUT: - filename: associated_constants.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LibraryIntroducer', text: 'library'}, -// CHECK:STDOUT: {kind: 'LibraryName', text: '"associated_constants"'}, -// CHECK:STDOUT: {kind: 'LibraryDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'I'}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'AssociatedConstantIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'T'}, -// CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, -// CHECK:STDOUT: {kind: 'AssociatedConstantNameAndType', text: ':', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'AssociatedConstantDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'AssociatedConstantIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'FinalModifier', text: 'final'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'I'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'AssociatedConstantNameAndType', text: ':', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'AssociatedConstantDecl', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'AssociatedConstantIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'DefaultModifier', text: 'default'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'D'}, -// CHECK:STDOUT: {kind: 'BoolTypeLiteral', text: 'bool'}, -// CHECK:STDOUT: {kind: 'AssociatedConstantNameAndType', text: ':', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'AssociatedConstantDecl', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 21}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LibraryIntroducer 'library' +// CHECK:STDOUT: │ ├─LibraryName '"associated_constants"' +// CHECK:STDOUT: ├─LibraryDecl ';' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'I' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─AssociatedConstantIntroducer 'let' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'T' +// CHECK:STDOUT: │ │ │ ├─TypeTypeLiteral 'type' +// CHECK:STDOUT: │ │ ├─AssociatedConstantNameAndType ':' +// CHECK:STDOUT: │ ├─AssociatedConstantDecl ';' +// CHECK:STDOUT: │ │ ╭─AssociatedConstantIntroducer 'let' +// CHECK:STDOUT: │ │ ├─FinalModifier 'final' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'I' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─AssociatedConstantNameAndType ':' +// CHECK:STDOUT: │ ├─AssociatedConstantDecl ';' +// CHECK:STDOUT: │ │ ╭─AssociatedConstantIntroducer 'let' +// CHECK:STDOUT: │ │ ├─DefaultModifier 'default' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'D' +// CHECK:STDOUT: │ │ │ ├─BoolTypeLiteral 'bool' +// CHECK:STDOUT: │ │ ├─AssociatedConstantNameAndType ':' +// CHECK:STDOUT: │ ├─AssociatedConstantDecl ';' +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: initializer.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LibraryIntroducer', text: 'library'}, -// CHECK:STDOUT: {kind: 'LibraryName', text: '"initializer"'}, -// CHECK:STDOUT: {kind: 'LibraryDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'I'}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'AssociatedConstantIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'T'}, -// CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, -// CHECK:STDOUT: {kind: 'AssociatedConstantNameAndType', text: ':', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'AssociatedConstantInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'TupleLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'AssociatedConstantDecl', text: ';', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'AssociatedConstantIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'FinalModifier', text: 'final'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'I'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'AssociatedConstantNameAndType', text: ':', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'AssociatedConstantInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '42'}, -// CHECK:STDOUT: {kind: 'AssociatedConstantDecl', text: ';', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'AssociatedConstantIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'DefaultModifier', text: 'default'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'D'}, -// CHECK:STDOUT: {kind: 'BoolTypeLiteral', text: 'bool'}, -// CHECK:STDOUT: {kind: 'AssociatedConstantNameAndType', text: ':', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'AssociatedConstantInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'BoolLiteralFalse', text: 'false'}, -// CHECK:STDOUT: {kind: 'AssociatedConstantDecl', text: ';', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 31}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LibraryIntroducer 'library' +// CHECK:STDOUT: │ ├─LibraryName '"initializer"' +// CHECK:STDOUT: ├─LibraryDecl ';' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'I' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─AssociatedConstantIntroducer 'let' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'T' +// CHECK:STDOUT: │ │ │ ├─TypeTypeLiteral 'type' +// CHECK:STDOUT: │ │ ├─AssociatedConstantNameAndType ':' +// CHECK:STDOUT: │ │ ├─AssociatedConstantInitializer '=' +// CHECK:STDOUT: │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─TupleLiteralComma ',' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ ├─AssociatedConstantDecl ';' +// CHECK:STDOUT: │ │ ╭─AssociatedConstantIntroducer 'let' +// CHECK:STDOUT: │ │ ├─FinalModifier 'final' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'I' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─AssociatedConstantNameAndType ':' +// CHECK:STDOUT: │ │ ├─AssociatedConstantInitializer '=' +// CHECK:STDOUT: │ │ ├─IntLiteral '42' +// CHECK:STDOUT: │ ├─AssociatedConstantDecl ';' +// CHECK:STDOUT: │ │ ╭─AssociatedConstantIntroducer 'let' +// CHECK:STDOUT: │ │ ├─DefaultModifier 'default' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'D' +// CHECK:STDOUT: │ │ │ ├─BoolTypeLiteral 'bool' +// CHECK:STDOUT: │ │ ├─AssociatedConstantNameAndType ':' +// CHECK:STDOUT: │ │ ├─AssociatedConstantInitializer '=' +// CHECK:STDOUT: │ │ ├─BoolLiteralFalse 'false' +// CHECK:STDOUT: │ ├─AssociatedConstantDecl ';' +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/interface/basic.carbon b/toolchain/parse/testdata/generics/interface/basic.carbon index 9f09a5bad3e2..66fb7374bed3 100644 --- a/toolchain/parse/testdata/generics/interface/basic.carbon +++ b/toolchain/parse/testdata/generics/interface/basic.carbon @@ -14,41 +14,40 @@ interface Foo { } // CHECK:STDOUT: - filename: basic.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Add'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'SelfValueName', text: 'self'}, -// CHECK:STDOUT: {kind: 'SelfBindingPattern', text: 'self', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, -// CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Add'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'SelfValueName', text: 'self'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'foo'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, -// CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 16}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 34}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Foo' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ ├─IdentifierNameMaybeBeforeSignature 'Add' +// CHECK:STDOUT: │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ │ ╭─SelfValueName 'self' +// CHECK:STDOUT: │ │ │ ├─SelfBindingPattern 'self' +// CHECK:STDOUT: │ │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─SelfTypeNameExpr 'Self' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ │ ╭─SelfTypeNameExpr 'Self' +// CHECK:STDOUT: │ │ ├─ReturnType '->' +// CHECK:STDOUT: │ ├─FunctionDecl ';' +// CHECK:STDOUT: │ │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ ├─IdentifierNameMaybeBeforeSignature 'Add' +// CHECK:STDOUT: │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ │ ╭─SelfValueName 'self' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IdentifierNameExpr 'foo' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─SelfTypeNameExpr 'Self' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ │ ╭─SelfTypeNameExpr 'Self' +// CHECK:STDOUT: │ │ ├─ReturnType '->' +// CHECK:STDOUT: │ ├─FunctionDecl ';' +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/interface/declaration.carbon b/toolchain/parse/testdata/generics/interface/declaration.carbon index db2e2947a0ed..5751f22b0fec 100644 --- a/toolchain/parse/testdata/generics/interface/declaration.carbon +++ b/toolchain/parse/testdata/generics/interface/declaration.carbon @@ -11,10 +11,9 @@ interface Foo; // CHECK:STDOUT: - filename: declaration.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'InterfaceDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Foo' +// CHECK:STDOUT: ├─InterfaceDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/interface/default_fn.carbon b/toolchain/parse/testdata/generics/interface/default_fn.carbon index cd9cf47bd211..b128276f7d0c 100644 --- a/toolchain/parse/testdata/generics/interface/default_fn.carbon +++ b/toolchain/parse/testdata/generics/interface/default_fn.carbon @@ -18,45 +18,44 @@ interface Foo { } // CHECK:STDOUT: - filename: default_fn.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Scale'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'SelfValueName', text: 'self'}, -// CHECK:STDOUT: {kind: 'SelfBindingPattern', text: 'self', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 's'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, -// CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'DefaultModifier', text: 'default'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Invert'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'SelfValueName', text: 'self'}, -// CHECK:STDOUT: {kind: 'SelfBindingPattern', text: 'self', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, -// CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'SelfValueNameExpr', text: 'self'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Scale'}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'CallExprStart', text: '(', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '1'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorMinus', text: '-', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'CallExpr', text: ')', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 20}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 38}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Foo' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ ├─IdentifierNameMaybeBeforeSignature 'Scale' +// CHECK:STDOUT: │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ │ ╭─SelfValueName 'self' +// CHECK:STDOUT: │ │ │ ├─SelfBindingPattern 'self' +// CHECK:STDOUT: │ │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 's' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ │ ╭─SelfTypeNameExpr 'Self' +// CHECK:STDOUT: │ │ ├─ReturnType '->' +// CHECK:STDOUT: │ ├─FunctionDecl ';' +// CHECK:STDOUT: │ │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ ├─DefaultModifier 'default' +// CHECK:STDOUT: │ │ ├─IdentifierNameMaybeBeforeSignature 'Invert' +// CHECK:STDOUT: │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ │ ╭─SelfValueName 'self' +// CHECK:STDOUT: │ │ │ ├─SelfBindingPattern 'self' +// CHECK:STDOUT: │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ │ ╭─SelfTypeNameExpr 'Self' +// CHECK:STDOUT: │ │ ├─ReturnType '->' +// CHECK:STDOUT: │ │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ │ │ ╭─SelfValueNameExpr 'self' +// CHECK:STDOUT: │ │ │ │ ├─IdentifierNameNotBeforeSignature 'Scale' +// CHECK:STDOUT: │ │ │ │ ╭─MemberAccessExpr '.' +// CHECK:STDOUT: │ │ │ │ ╭─CallExprStart '(' +// CHECK:STDOUT: │ │ │ │ │ ╭─IntLiteral '1' +// CHECK:STDOUT: │ │ │ │ ├─PrefixOperatorMinus '-' +// CHECK:STDOUT: │ │ │ ├─CallExpr ')' +// CHECK:STDOUT: │ │ ├─ReturnStatement ';' +// CHECK:STDOUT: │ ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/interface/empty_body.carbon b/toolchain/parse/testdata/generics/interface/empty_body.carbon index e0a50cdeb983..b721bbe885ef 100644 --- a/toolchain/parse/testdata/generics/interface/empty_body.carbon +++ b/toolchain/parse/testdata/generics/interface/empty_body.carbon @@ -12,11 +12,10 @@ interface Foo { } // CHECK:STDOUT: - filename: empty_body.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Foo' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/interface/fail_associated_constants.carbon b/toolchain/parse/testdata/generics/interface/fail_associated_constants.carbon index 391c742f74d7..a47bea13dd15 100644 --- a/toolchain/parse/testdata/generics/interface/fail_associated_constants.carbon +++ b/toolchain/parse/testdata/generics/interface/fail_associated_constants.carbon @@ -118,130 +118,121 @@ interface I { // CHECK:STDOUT: - filename: fail_tuple_pattern.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LibraryIntroducer', text: 'library'}, -// CHECK:STDOUT: {kind: 'LibraryName', text: '"tuple_pattern"'}, -// CHECK:STDOUT: {kind: 'LibraryDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'I'}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'AssociatedConstantIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'AssociatedConstantDecl', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LibraryIntroducer 'library' +// CHECK:STDOUT: │ ├─LibraryName '"tuple_pattern"' +// CHECK:STDOUT: ├─LibraryDecl ';' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'I' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─AssociatedConstantIntroducer 'let' +// CHECK:STDOUT: │ ├─AssociatedConstantDecl ';' has_error +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_tuple_pattern_with_default.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LibraryIntroducer', text: 'library'}, -// CHECK:STDOUT: {kind: 'LibraryName', text: '"tuple_pattern_with_default"'}, -// CHECK:STDOUT: {kind: 'LibraryDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'I'}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'AssociatedConstantIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'DefaultModifier', text: 'default'}, -// CHECK:STDOUT: {kind: 'AssociatedConstantDecl', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LibraryIntroducer 'library' +// CHECK:STDOUT: │ ├─LibraryName '"tuple_pattern_with_default"' +// CHECK:STDOUT: ├─LibraryDecl ';' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'I' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─AssociatedConstantIntroducer 'let' +// CHECK:STDOUT: │ │ ├─DefaultModifier 'default' +// CHECK:STDOUT: │ ├─AssociatedConstantDecl ';' has_error +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_var_pattern.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LibraryIntroducer', text: 'library'}, -// CHECK:STDOUT: {kind: 'LibraryName', text: '"var_pattern"'}, -// CHECK:STDOUT: {kind: 'LibraryDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'I'}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'AssociatedConstantIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'AssociatedConstantDecl', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LibraryIntroducer 'library' +// CHECK:STDOUT: │ ├─LibraryName '"var_pattern"' +// CHECK:STDOUT: ├─LibraryDecl ';' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'I' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─AssociatedConstantIntroducer 'let' +// CHECK:STDOUT: │ ├─AssociatedConstantDecl ';' has_error +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_var_pattern_with_default.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LibraryIntroducer', text: 'library'}, -// CHECK:STDOUT: {kind: 'LibraryName', text: '"var_pattern_with_default"'}, -// CHECK:STDOUT: {kind: 'LibraryDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'I'}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'AssociatedConstantIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'DefaultModifier', text: 'default'}, -// CHECK:STDOUT: {kind: 'AssociatedConstantDecl', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LibraryIntroducer 'library' +// CHECK:STDOUT: │ ├─LibraryName '"var_pattern_with_default"' +// CHECK:STDOUT: ├─LibraryDecl ';' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'I' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─AssociatedConstantIntroducer 'let' +// CHECK:STDOUT: │ │ ├─DefaultModifier 'default' +// CHECK:STDOUT: │ ├─AssociatedConstantDecl ';' has_error +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_not_constant.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LibraryIntroducer', text: 'library'}, -// CHECK:STDOUT: {kind: 'LibraryName', text: '"not_constant"'}, -// CHECK:STDOUT: {kind: 'LibraryDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'I'}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'AssociatedConstantIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'AssociatedConstantDecl', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LibraryIntroducer 'library' +// CHECK:STDOUT: │ ├─LibraryName '"not_constant"' +// CHECK:STDOUT: ├─LibraryDecl ';' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'I' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─AssociatedConstantIntroducer 'let' +// CHECK:STDOUT: │ ├─AssociatedConstantDecl ';' has_error +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_template.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LibraryIntroducer', text: 'library'}, -// CHECK:STDOUT: {kind: 'LibraryName', text: '"template"'}, -// CHECK:STDOUT: {kind: 'LibraryDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'I'}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'AssociatedConstantIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'AssociatedConstantDecl', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LibraryIntroducer 'library' +// CHECK:STDOUT: │ ├─LibraryName '"template"' +// CHECK:STDOUT: ├─LibraryDecl ';' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'I' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─AssociatedConstantIntroducer 'let' +// CHECK:STDOUT: │ ├─AssociatedConstantDecl ';' has_error +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_generic.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LibraryIntroducer', text: 'library'}, -// CHECK:STDOUT: {kind: 'LibraryName', text: '"generic"'}, -// CHECK:STDOUT: {kind: 'LibraryDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'I'}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'AssociatedConstantIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'AssociatedConstantDecl', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LibraryIntroducer 'library' +// CHECK:STDOUT: │ ├─LibraryName '"generic"' +// CHECK:STDOUT: ├─LibraryDecl ';' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'I' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─AssociatedConstantIntroducer 'let' +// CHECK:STDOUT: │ ├─AssociatedConstantDecl ';' has_error +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_underscore.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LibraryIntroducer', text: 'library'}, -// CHECK:STDOUT: {kind: 'LibraryName', text: '"underscore"'}, -// CHECK:STDOUT: {kind: 'LibraryDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'I'}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'AssociatedConstantIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'AssociatedConstantDecl', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LibraryIntroducer 'library' +// CHECK:STDOUT: │ ├─LibraryName '"underscore"' +// CHECK:STDOUT: ├─LibraryDecl ';' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'I' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─AssociatedConstantIntroducer 'let' +// CHECK:STDOUT: │ ├─AssociatedConstantDecl ';' has_error +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_missing_colon.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LibraryIntroducer', text: 'library'}, -// CHECK:STDOUT: {kind: 'LibraryName', text: '"missing_colon"'}, -// CHECK:STDOUT: {kind: 'LibraryDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'I'}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'AssociatedConstantIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'AssociatedConstantDecl', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LibraryIntroducer 'library' +// CHECK:STDOUT: │ ├─LibraryName '"missing_colon"' +// CHECK:STDOUT: ├─LibraryDecl ';' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'I' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─AssociatedConstantIntroducer 'let' +// CHECK:STDOUT: │ ├─AssociatedConstantDecl ';' has_error +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/interface/fail_missing_name.carbon b/toolchain/parse/testdata/generics/interface/fail_missing_name.carbon index 9ac540879e62..2e9ea69756e9 100644 --- a/toolchain/parse/testdata/generics/interface/fail_missing_name.carbon +++ b/toolchain/parse/testdata/generics/interface/fail_missing_name.carbon @@ -16,10 +16,9 @@ interface { } // CHECK:STDOUT: - filename: fail_missing_name.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '{', has_error: yes}, -// CHECK:STDOUT: {kind: 'InterfaceDecl', text: '}', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─InvalidParse '{' has_error +// CHECK:STDOUT: ├─InterfaceDecl '}' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/interface/fail_missing_open_curly.carbon b/toolchain/parse/testdata/generics/interface/fail_missing_open_curly.carbon index ff38a0cfd2f0..cd7b37087878 100644 --- a/toolchain/parse/testdata/generics/interface/fail_missing_open_curly.carbon +++ b/toolchain/parse/testdata/generics/interface/fail_missing_open_curly.carbon @@ -16,18 +16,17 @@ interface Bar Baz {} interface Foo -// CHECK:STDERR: fail_missing_open_curly.carbon:[[@LINE+14]]:21: error: `interface` declarations must either end with a `;` or have a `{ ... }` block for a definition [ExpectedDeclSemiOrDefinition] -// CHECK:STDERR: // CHECK:STDOUT: ] -// CHECK:STDERR: ^ +// CHECK:STDERR: fail_missing_open_curly.carbon:[[@LINE+13]]:26: error: `interface` declarations must either end with a `;` or have a `{ ... }` block for a definition [ExpectedDeclSemiOrDefinition] +// CHECK:STDERR: // CHECK:STDOUT: (root) +// CHECK:STDERR: ^ // CHECK:STDERR: // CHECK:STDOUT: - filename: fail_missing_open_curly.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Bar'}, -// CHECK:STDOUT: {kind: 'InterfaceDecl', text: '}', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'InterfaceDecl', text: 'Foo', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Bar' +// CHECK:STDOUT: ├─InterfaceDecl '}' has_error +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Foo' +// CHECK:STDOUT: ├─InterfaceDecl 'Foo' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/interface/fail_self_param_syntax.carbon b/toolchain/parse/testdata/generics/interface/fail_self_param_syntax.carbon index 5c9dfe485167..4d416cb59c98 100644 --- a/toolchain/parse/testdata/generics/interface/fail_self_param_syntax.carbon +++ b/toolchain/parse/testdata/generics/interface/fail_self_param_syntax.carbon @@ -19,39 +19,38 @@ interface Foo { } // CHECK:STDOUT: - filename: fail_self_param_syntax.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Sub'}, -// CHECK:STDOUT: {kind: 'ImplicitParamListStart', text: '['}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'me'}, -// CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, -// CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Mul'}, -// CHECK:STDOUT: {kind: 'ImplicitParamListStart', text: '['}, -// CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, -// CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, -// CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 32}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Foo' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ ├─IdentifierNameMaybeBeforeSignature 'Sub' +// CHECK:STDOUT: │ │ │ ╭─ImplicitParamListStart '[' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'me' +// CHECK:STDOUT: │ │ ├─ImplicitParamList ']' has_error +// CHECK:STDOUT: │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─SelfTypeNameExpr 'Self' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ │ ╭─SelfTypeNameExpr 'Self' +// CHECK:STDOUT: │ │ ├─ReturnType '->' +// CHECK:STDOUT: │ ├─FunctionDecl ';' +// CHECK:STDOUT: │ │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ ├─IdentifierNameMaybeBeforeSignature 'Mul' +// CHECK:STDOUT: │ │ │ ╭─ImplicitParamListStart '[' +// CHECK:STDOUT: │ │ │ ├─SelfTypeNameExpr 'Self' +// CHECK:STDOUT: │ │ ├─ImplicitParamList ']' +// CHECK:STDOUT: │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─SelfTypeNameExpr 'Self' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ │ ╭─SelfTypeNameExpr 'Self' +// CHECK:STDOUT: │ │ ├─ReturnType '->' +// CHECK:STDOUT: │ ├─FunctionDecl ';' +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/interface/final_fn.carbon b/toolchain/parse/testdata/generics/interface/final_fn.carbon index a4461115dde6..dd764eac7a41 100644 --- a/toolchain/parse/testdata/generics/interface/final_fn.carbon +++ b/toolchain/parse/testdata/generics/interface/final_fn.carbon @@ -16,49 +16,48 @@ interface Order { } // CHECK:STDOUT: - filename: final_fn.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Order'}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Less'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'SelfValueName', text: 'self'}, -// CHECK:STDOUT: {kind: 'SelfBindingPattern', text: 'self', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'right'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'BoolTypeLiteral', text: 'bool'}, -// CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'FinalModifier', text: 'final'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Greater'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'SelfValueName', text: 'self'}, -// CHECK:STDOUT: {kind: 'SelfBindingPattern', text: 'self', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'right'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'BoolTypeLiteral', text: 'bool'}, -// CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'right'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Less'}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'CallExprStart', text: '(', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'SelfValueNameExpr', text: 'self'}, -// CHECK:STDOUT: {kind: 'CallExpr', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 24}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 42}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Order' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ ├─IdentifierNameMaybeBeforeSignature 'Less' +// CHECK:STDOUT: │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ │ ╭─SelfValueName 'self' +// CHECK:STDOUT: │ │ │ ├─SelfBindingPattern 'self' +// CHECK:STDOUT: │ │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'right' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─SelfTypeNameExpr 'Self' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ │ ╭─BoolTypeLiteral 'bool' +// CHECK:STDOUT: │ │ ├─ReturnType '->' +// CHECK:STDOUT: │ ├─FunctionDecl ';' +// CHECK:STDOUT: │ │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ ├─FinalModifier 'final' +// CHECK:STDOUT: │ │ ├─IdentifierNameMaybeBeforeSignature 'Greater' +// CHECK:STDOUT: │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ │ ╭─SelfValueName 'self' +// CHECK:STDOUT: │ │ │ ├─SelfBindingPattern 'self' +// CHECK:STDOUT: │ │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'right' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─SelfTypeNameExpr 'Self' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ │ ╭─BoolTypeLiteral 'bool' +// CHECK:STDOUT: │ │ ├─ReturnType '->' +// CHECK:STDOUT: │ │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameExpr 'right' +// CHECK:STDOUT: │ │ │ │ ├─IdentifierNameNotBeforeSignature 'Less' +// CHECK:STDOUT: │ │ │ │ ╭─MemberAccessExpr '.' +// CHECK:STDOUT: │ │ │ │ ╭─CallExprStart '(' +// CHECK:STDOUT: │ │ │ │ ├─SelfValueNameExpr 'self' +// CHECK:STDOUT: │ │ │ ├─CallExpr ')' +// CHECK:STDOUT: │ │ ├─ReturnStatement ';' +// CHECK:STDOUT: │ ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/interface/final_member_definition.carbon b/toolchain/parse/testdata/generics/interface/final_member_definition.carbon index 99e807136412..5b242f7f4d8f 100644 --- a/toolchain/parse/testdata/generics/interface/final_member_definition.carbon +++ b/toolchain/parse/testdata/generics/interface/final_member_definition.carbon @@ -15,33 +15,32 @@ interface Foo { } // CHECK:STDOUT: - filename: final_member_definition.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'FinalModifier', text: 'final'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Add'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'SelfValueName', text: 'self'}, -// CHECK:STDOUT: {kind: 'SelfBindingPattern', text: 'self', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'UnusedPattern', text: 'unused', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, -// CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 16}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'print'}, -// CHECK:STDOUT: {kind: 'CallExprStart', text: '(', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'StringLiteral', text: '"Allowed."'}, -// CHECK:STDOUT: {kind: 'CallExpr', text: ')', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 22}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 26}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Foo' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ ├─FinalModifier 'final' +// CHECK:STDOUT: │ │ ├─IdentifierNameMaybeBeforeSignature 'Add' +// CHECK:STDOUT: │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ │ ╭─SelfValueName 'self' +// CHECK:STDOUT: │ │ │ │ ╭─SelfBindingPattern 'self' +// CHECK:STDOUT: │ │ │ ├─UnusedPattern 'unused' +// CHECK:STDOUT: │ │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─SelfTypeNameExpr 'Self' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ │ ╭─SelfTypeNameExpr 'Self' +// CHECK:STDOUT: │ │ ├─ReturnType '->' +// CHECK:STDOUT: │ │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'print' +// CHECK:STDOUT: │ │ │ ╭─CallExprStart '(' +// CHECK:STDOUT: │ │ │ ├─StringLiteral '"Allowed."' +// CHECK:STDOUT: │ │ │ ╭─CallExpr ')' +// CHECK:STDOUT: │ │ ├─ExprStatement ';' +// CHECK:STDOUT: │ ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/interface/non_instance_fn.carbon b/toolchain/parse/testdata/generics/interface/non_instance_fn.carbon index 82b9bdf7f64a..3db872cc555a 100644 --- a/toolchain/parse/testdata/generics/interface/non_instance_fn.carbon +++ b/toolchain/parse/testdata/generics/interface/non_instance_fn.carbon @@ -13,18 +13,17 @@ interface Foo { } // CHECK:STDOUT: - filename: non_instance_fn.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'FooFactory'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', 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}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Foo' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ ├─IdentifierNameMaybeBeforeSignature 'FooFactory' +// CHECK:STDOUT: │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ │ ╭─SelfTypeNameExpr 'Self' +// CHECK:STDOUT: │ │ ├─ReturnType '->' +// CHECK:STDOUT: │ ├─FunctionDecl ';' +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/interface/require.carbon b/toolchain/parse/testdata/generics/interface/require.carbon index f64e32c3dc50..a412eb03bffa 100644 --- a/toolchain/parse/testdata/generics/interface/require.carbon +++ b/toolchain/parse/testdata/generics/interface/require.carbon @@ -93,175 +93,166 @@ interface Z { } // CHECK:STDOUT: - filename: implicit_self_impls.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Y'}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Z'}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'RequireIntroducer', text: 'require'}, -// CHECK:STDOUT: {kind: 'RequireDefaultSelfImpls', text: 'impls'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Y'}, -// CHECK:STDOUT: {kind: 'RequireDecl', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Y' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Z' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─RequireIntroducer 'require' +// CHECK:STDOUT: │ │ ├─RequireDefaultSelfImpls 'impls' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'Y' +// CHECK:STDOUT: │ ├─RequireDecl ';' +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: explicit_self_impls.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Y'}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Z'}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'RequireIntroducer', text: 'require'}, -// CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, -// CHECK:STDOUT: {kind: 'RequireTypeImpls', text: 'impls', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Y'}, -// CHECK:STDOUT: {kind: 'RequireDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Y' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Z' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─RequireIntroducer 'require' +// CHECK:STDOUT: │ │ │ ╭─SelfTypeNameExpr 'Self' +// CHECK:STDOUT: │ │ ├─RequireTypeImpls 'impls' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'Y' +// CHECK:STDOUT: │ ├─RequireDecl ';' +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: impls_where.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Y'}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'AssociatedConstantIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Y1'}, -// CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, -// CHECK:STDOUT: {kind: 'AssociatedConstantNameAndType', text: ':', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'AssociatedConstantDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Z'}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'RequireIntroducer', text: 'require'}, -// CHECK:STDOUT: {kind: 'RequireDefaultSelfImpls', text: 'impls'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Y'}, -// CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Y1'}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'RequirementEqual', text: '=', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'RequireDecl', text: ';', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Y' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─AssociatedConstantIntroducer 'let' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'Y1' +// CHECK:STDOUT: │ │ │ ├─TypeTypeLiteral 'type' +// CHECK:STDOUT: │ │ ├─AssociatedConstantNameAndType ':' +// CHECK:STDOUT: │ ├─AssociatedConstantDecl ';' +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Z' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─RequireIntroducer 'require' +// CHECK:STDOUT: │ │ ├─RequireDefaultSelfImpls 'impls' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'Y' +// CHECK:STDOUT: │ │ │ ╭─WhereOperand 'where' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'Y1' +// CHECK:STDOUT: │ │ │ │ ╭─DesignatorExpr '.' +// CHECK:STDOUT: │ │ │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ │ ├─RequirementEqual '=' +// CHECK:STDOUT: │ │ ├─WhereExpr 'where' +// CHECK:STDOUT: │ ├─RequireDecl ';' +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: other_impls.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Y'}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Z'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'T'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'RequireIntroducer', text: 'require'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'T'}, -// CHECK:STDOUT: {kind: 'RequireTypeImpls', text: 'impls', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Y'}, -// CHECK:STDOUT: {kind: 'RequireDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Y' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'Z' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'T' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─TypeTypeLiteral 'type' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─RequireIntroducer 'require' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'T' +// CHECK:STDOUT: │ │ ├─RequireTypeImpls 'impls' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'Y' +// CHECK:STDOUT: │ ├─RequireDecl ';' +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: extend.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Y'}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Z'}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'RequireIntroducer', text: 'require'}, -// CHECK:STDOUT: {kind: 'ExtendModifier', text: 'extend'}, -// CHECK:STDOUT: {kind: 'RequireDefaultSelfImpls', text: 'impls'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Y'}, -// CHECK:STDOUT: {kind: 'RequireDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Y' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Z' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─RequireIntroducer 'require' +// CHECK:STDOUT: │ │ ├─ExtendModifier 'extend' +// CHECK:STDOUT: │ │ ├─RequireDefaultSelfImpls 'impls' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'Y' +// CHECK:STDOUT: │ ├─RequireDecl ';' +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: type_and.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Y'}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Z'}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'RequireIntroducer', text: 'require'}, -// CHECK:STDOUT: {kind: 'RequireDefaultSelfImpls', text: 'impls'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Y'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Y'}, -// CHECK:STDOUT: {kind: 'InfixOperatorAmp', text: '&', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'RequireDecl', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Y' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Z' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─RequireIntroducer 'require' +// CHECK:STDOUT: │ │ ├─RequireDefaultSelfImpls 'impls' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'Y' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'Y' +// CHECK:STDOUT: │ │ ├─InfixOperatorAmp '&' +// CHECK:STDOUT: │ ├─RequireDecl ';' +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_missing_impls.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Y'}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Z'}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'RequireIntroducer', text: 'require'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Y'}, -// CHECK:STDOUT: {kind: 'RequireDecl', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Y' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Z' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─RequireIntroducer 'require' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'Y' +// CHECK:STDOUT: │ ├─RequireDecl ';' has_error +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_wrong_keyword.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Y'}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Z'}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'RequireIntroducer', text: 'require'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: 'as', has_error: yes}, -// CHECK:STDOUT: {kind: 'RequireDecl', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Y' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Z' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─RequireIntroducer 'require' +// CHECK:STDOUT: │ │ ├─InvalidParse 'as' has_error +// CHECK:STDOUT: │ ├─RequireDecl ';' has_error +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_as_in_self.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Y'}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Z'}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'RequireIntroducer', text: 'require'}, -// CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, -// CHECK:STDOUT: {kind: 'RequireDecl', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Y' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Z' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─RequireIntroducer 'require' +// CHECK:STDOUT: │ │ ├─SelfTypeNameExpr 'Self' +// CHECK:STDOUT: │ ├─RequireDecl ';' has_error +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/interface/self_ref.carbon b/toolchain/parse/testdata/generics/interface/self_ref.carbon index 666edbdc6e74..862016af39e3 100644 --- a/toolchain/parse/testdata/generics/interface/self_ref.carbon +++ b/toolchain/parse/testdata/generics/interface/self_ref.carbon @@ -14,43 +14,42 @@ interface Foo { } // CHECK:STDOUT: - filename: self_ref.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Sub'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'SelfValueName', text: 'self'}, -// CHECK:STDOUT: {kind: 'RefBindingName', text: 'ref', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'SelfBindingPattern', text: 'self', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, -// CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Sub'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'SelfValueName', text: 'self'}, -// CHECK:STDOUT: {kind: 'RefBindingName', text: 'ref', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'foo'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, -// CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 17}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 36}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Foo' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ ├─IdentifierNameMaybeBeforeSignature 'Sub' +// CHECK:STDOUT: │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ │ ╭─SelfValueName 'self' +// CHECK:STDOUT: │ │ │ │ ╭─RefBindingName 'ref' +// CHECK:STDOUT: │ │ │ ├─SelfBindingPattern 'self' +// CHECK:STDOUT: │ │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─SelfTypeNameExpr 'Self' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ │ ╭─SelfTypeNameExpr 'Self' +// CHECK:STDOUT: │ │ ├─ReturnType '->' +// CHECK:STDOUT: │ ├─FunctionDecl ';' +// CHECK:STDOUT: │ │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ ├─IdentifierNameMaybeBeforeSignature 'Sub' +// CHECK:STDOUT: │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ │ ╭─SelfValueName 'self' +// CHECK:STDOUT: │ │ │ │ ╭─RefBindingName 'ref' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IdentifierNameExpr 'foo' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─SelfTypeNameExpr 'Self' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ │ ╭─SelfTypeNameExpr 'Self' +// CHECK:STDOUT: │ │ ├─ReturnType '->' +// CHECK:STDOUT: │ ├─FunctionDecl ';' +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/named_constraint/basic.carbon b/toolchain/parse/testdata/generics/named_constraint/basic.carbon index 5e726cbef87e..ae6e37494085 100644 --- a/toolchain/parse/testdata/generics/named_constraint/basic.carbon +++ b/toolchain/parse/testdata/generics/named_constraint/basic.carbon @@ -23,28 +23,25 @@ constraint WithRequire { constraint ForwardDeclared; // CHECK:STDOUT: - filename: empty.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'NamedConstraintIntroducer', text: 'constraint'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Empty'}, -// CHECK:STDOUT: {kind: 'NamedConstraintDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'NamedConstraintDefinition', text: '}', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─NamedConstraintIntroducer 'constraint' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Empty' +// CHECK:STDOUT: │ ╭─NamedConstraintDefinitionStart '{' +// CHECK:STDOUT: ├─NamedConstraintDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: with_require.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'NamedConstraintIntroducer', text: 'constraint'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'WithRequire'}, -// CHECK:STDOUT: {kind: 'NamedConstraintDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'NamedConstraintDefinition', text: '}', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─NamedConstraintIntroducer 'constraint' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'WithRequire' +// CHECK:STDOUT: │ ╭─NamedConstraintDefinitionStart '{' +// CHECK:STDOUT: ├─NamedConstraintDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: forward_decl.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'NamedConstraintIntroducer', text: 'constraint'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'ForwardDeclared'}, -// CHECK:STDOUT: {kind: 'NamedConstraintDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─NamedConstraintIntroducer 'constraint' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'ForwardDeclared' +// CHECK:STDOUT: ├─NamedConstraintDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/named_constraint/fail_incomplete.carbon b/toolchain/parse/testdata/generics/named_constraint/fail_incomplete.carbon index d3713d331de4..d7ecfc6f4a83 100644 --- a/toolchain/parse/testdata/generics/named_constraint/fail_incomplete.carbon +++ b/toolchain/parse/testdata/generics/named_constraint/fail_incomplete.carbon @@ -21,13 +21,12 @@ constraint "Foo" constraint // CHECK:STDOUT: - filename: fail_incomplete.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'NamedConstraintIntroducer', text: 'constraint'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '"Foo"', has_error: yes}, -// CHECK:STDOUT: {kind: 'NamedConstraintDecl', text: '"Foo"', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'NamedConstraintIntroducer', text: 'constraint'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '', has_error: yes}, -// CHECK:STDOUT: {kind: 'NamedConstraintDecl', text: 'constraint', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─NamedConstraintIntroducer 'constraint' +// CHECK:STDOUT: │ ├─InvalidParse '"Foo"' has_error +// CHECK:STDOUT: ├─NamedConstraintDecl '"Foo"' has_error +// CHECK:STDOUT: │ ╭─NamedConstraintIntroducer 'constraint' +// CHECK:STDOUT: │ ├─InvalidParse '' has_error +// CHECK:STDOUT: ├─NamedConstraintDecl 'constraint' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/named_constraint/invalid_method.carbon b/toolchain/parse/testdata/generics/named_constraint/invalid_method.carbon index 91126a826115..3dbece26fc11 100644 --- a/toolchain/parse/testdata/generics/named_constraint/invalid_method.carbon +++ b/toolchain/parse/testdata/generics/named_constraint/invalid_method.carbon @@ -19,45 +19,44 @@ constraint Foo { } // CHECK:STDOUT: - filename: invalid_method.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'NamedConstraintIntroducer', text: 'constraint'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'E'}, -// CHECK:STDOUT: {kind: 'NamedConstraintDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'DeclaredMethod'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'SelfValueName', text: 'self'}, -// CHECK:STDOUT: {kind: 'SelfBindingPattern', text: 'self', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, -// CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'NamedConstraintDefinition', text: '}', subtree_size: 18}, -// CHECK:STDOUT: {kind: 'NamedConstraintIntroducer', text: 'constraint'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'NamedConstraintDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'DefinedMethod'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'SelfValueName', text: 'self'}, -// CHECK:STDOUT: {kind: 'SelfBindingPattern', text: 'self', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'UnusedPattern', text: 'unused', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'SelfTypeNameExpr', text: 'Self'}, -// CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 16}, -// CHECK:STDOUT: {kind: 'NamedConstraintDefinition', text: '}', subtree_size: 20}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─NamedConstraintIntroducer 'constraint' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'E' +// CHECK:STDOUT: │ ╭─NamedConstraintDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ ├─IdentifierNameMaybeBeforeSignature 'DeclaredMethod' +// CHECK:STDOUT: │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ │ ╭─SelfValueName 'self' +// CHECK:STDOUT: │ │ │ ├─SelfBindingPattern 'self' +// CHECK:STDOUT: │ │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─SelfTypeNameExpr 'Self' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ │ ╭─SelfTypeNameExpr 'Self' +// CHECK:STDOUT: │ │ ├─ReturnType '->' +// CHECK:STDOUT: │ ├─FunctionDecl ';' +// CHECK:STDOUT: ├─NamedConstraintDefinition '}' +// CHECK:STDOUT: │ ╭─NamedConstraintIntroducer 'constraint' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Foo' +// CHECK:STDOUT: │ ╭─NamedConstraintDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ ├─IdentifierNameMaybeBeforeSignature 'DefinedMethod' +// CHECK:STDOUT: │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ │ ╭─SelfValueName 'self' +// CHECK:STDOUT: │ │ │ │ ╭─SelfBindingPattern 'self' +// CHECK:STDOUT: │ │ │ ├─UnusedPattern 'unused' +// CHECK:STDOUT: │ │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─SelfTypeNameExpr 'Self' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ │ ╭─SelfTypeNameExpr 'Self' +// CHECK:STDOUT: │ │ ├─ReturnType '->' +// CHECK:STDOUT: │ │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─NamedConstraintDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/named_constraint/template_constraint.carbon b/toolchain/parse/testdata/generics/named_constraint/template_constraint.carbon index edee27a093d1..8e494a4676f5 100644 --- a/toolchain/parse/testdata/generics/named_constraint/template_constraint.carbon +++ b/toolchain/parse/testdata/generics/named_constraint/template_constraint.carbon @@ -27,11 +27,10 @@ template constraint Foo { template constraint ForwardDeclared; // CHECK:STDOUT: - filename: fail_todo_template_constraint.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'InvalidParseStart', text: 'template', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParseSubtree', text: '}', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InvalidParseStart', text: 'template', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParseSubtree', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─InvalidParseStart 'template' has_error +// CHECK:STDOUT: ├─InvalidParseSubtree '}' has_error +// CHECK:STDOUT: │ ╭─InvalidParseStart 'template' has_error +// CHECK:STDOUT: ├─InvalidParseSubtree ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/params/empty.carbon b/toolchain/parse/testdata/generics/params/empty.carbon index e91ca451094e..24b9974488cf 100644 --- a/toolchain/parse/testdata/generics/params/empty.carbon +++ b/toolchain/parse/testdata/generics/params/empty.carbon @@ -13,18 +13,17 @@ class Foo(); interface Bar() {} // CHECK:STDOUT: - filename: empty.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ClassDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Bar'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'Foo' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─ClassDecl ';' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'Bar' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/params/fail_redundant_phase_keyword.carbon b/toolchain/parse/testdata/generics/params/fail_redundant_phase_keyword.carbon index 17736bbcccfa..39b62772eae8 100644 --- a/toolchain/parse/testdata/generics/params/fail_redundant_phase_keyword.carbon +++ b/toolchain/parse/testdata/generics/params/fail_redundant_phase_keyword.carbon @@ -49,83 +49,78 @@ fn C.F[generic T: type](); fn C.G(runtime x: i32); // CHECK:STDOUT: - filename: fail_redundant_generic_deduced.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ImplicitParamListStart', text: '['}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'T'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ImplicitParamListStart '[' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'T' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─TypeTypeLiteral 'type' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ ├─ImplicitParamList ']' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_redundant_generic_class_param.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'C'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'T'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'C' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'T' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─TypeTypeLiteral 'type' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─ClassDefinitionStart '{' +// CHECK:STDOUT: ├─ClassDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_redundant_runtime_explicit.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'G'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'RuntimeBindingName', text: 'runtime', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'G' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ╭─RuntimeBindingName 'runtime' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_redundant_generic_qualified.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'C'}, -// CHECK:STDOUT: {kind: 'IdentifierNameQualifierWithoutParams', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ImplicitParamListStart', text: '['}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'T'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'C' +// CHECK:STDOUT: │ ├─IdentifierNameQualifierWithoutParams '.' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ImplicitParamListStart '[' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'T' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─TypeTypeLiteral 'type' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ ├─ImplicitParamList ']' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_redundant_runtime_qualified.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'C'}, -// CHECK:STDOUT: {kind: 'IdentifierNameQualifierWithoutParams', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'G'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'RuntimeBindingName', text: 'runtime', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'C' +// CHECK:STDOUT: │ ├─IdentifierNameQualifierWithoutParams '.' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'G' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ╭─RuntimeBindingName 'runtime' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/params/fail_unused_after_phase_keyword.carbon b/toolchain/parse/testdata/generics/params/fail_unused_after_phase_keyword.carbon index daf515ccf902..c07feeb9453a 100644 --- a/toolchain/parse/testdata/generics/params/fail_unused_after_phase_keyword.carbon +++ b/toolchain/parse/testdata/generics/params/fail_unused_after_phase_keyword.carbon @@ -33,51 +33,48 @@ fn G[runtime unused T: type](); fn H(runtime unused x: i32); // CHECK:STDOUT: - filename: fail_generic_before_unused.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'T'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':', has_error: yes}, -// CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'UnusedPattern', text: 'unused', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', has_error: yes, subtree_size: 7}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'T' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' has_error +// CHECK:STDOUT: │ │ │ ├─TypeTypeLiteral 'type' +// CHECK:STDOUT: │ │ │ ╭─CompileTimeBindingPattern ':' has_error +// CHECK:STDOUT: │ │ ├─UnusedPattern 'unused' has_error +// CHECK:STDOUT: │ ├─ExplicitParamList ')' has_error +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_runtime_before_unused.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'G'}, -// CHECK:STDOUT: {kind: 'ImplicitParamListStart', text: '['}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'T'}, -// CHECK:STDOUT: {kind: 'RuntimeBindingName', text: 'runtime', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':', has_error: yes}, -// CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'UnusedPattern', text: 'unused', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', has_error: yes, subtree_size: 8}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'G' +// CHECK:STDOUT: │ │ ╭─ImplicitParamListStart '[' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'T' +// CHECK:STDOUT: │ │ │ ╭─RuntimeBindingName 'runtime' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' has_error +// CHECK:STDOUT: │ │ │ ├─TypeTypeLiteral 'type' +// CHECK:STDOUT: │ │ │ ╭─LetBindingPattern ':' has_error +// CHECK:STDOUT: │ │ ├─UnusedPattern 'unused' has_error +// CHECK:STDOUT: │ ├─ImplicitParamList ']' has_error +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_redundant_runtime_before_unused.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'H'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'RuntimeBindingName', text: 'runtime', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'UnusedPattern', text: 'unused', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'H' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ╭─RuntimeBindingName 'runtime' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─UnusedPattern 'unused' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/params/name_qualifier.carbon b/toolchain/parse/testdata/generics/params/name_qualifier.carbon index 2cf067613134..4795812698d2 100644 --- a/toolchain/parse/testdata/generics/params/name_qualifier.carbon +++ b/toolchain/parse/testdata/generics/params/name_qualifier.carbon @@ -31,159 +31,158 @@ class OuterGeneric(T: type).InnerGeneric(U: type) { fn OuterGeneric(T: type).InnerGeneric(U: type).F(x: T, y: U) {} // CHECK:STDOUT: - filename: name_qualifier.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'GenericClass1'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'T'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'GenericClass1'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'T'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'IdentifierNameQualifierWithParams', text: '.', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'GenericClass2'}, -// CHECK:STDOUT: {kind: 'ImplicitParamListStart', text: '['}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'T'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'X'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'T'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 21}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'GenericClass2'}, -// CHECK:STDOUT: {kind: 'ImplicitParamListStart', text: '['}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'T'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'X'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'T'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'IdentifierNameQualifierWithParams', text: '.', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 19}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 20}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'OuterGeneric'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'T'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'InnerGeneric'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'U'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ClassDecl', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 19}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'OuterGeneric'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'T'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'IdentifierNameQualifierWithParams', text: '.', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'InnerGeneric'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'U'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 17}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'T'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'U'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 32}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'OuterGeneric'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'T'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'IdentifierNameQualifierWithParams', text: '.', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'InnerGeneric'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'U'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'IdentifierNameQualifierWithParams', text: '.', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'T'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'U'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 30}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 31}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'GenericClass1' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'T' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─TypeTypeLiteral 'type' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─ClassDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ├─FunctionDecl ';' +// CHECK:STDOUT: ├─ClassDefinition '}' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ ╭─IdentifierNameMaybeBeforeSignature 'GenericClass1' +// CHECK:STDOUT: │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'T' +// CHECK:STDOUT: │ │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─TypeTypeLiteral 'type' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ├─IdentifierNameQualifierWithParams '.' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'GenericClass2' +// CHECK:STDOUT: │ │ ╭─ImplicitParamListStart '[' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'T' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─TypeTypeLiteral 'type' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ ├─ImplicitParamList ']' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'X' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'T' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─ClassDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ├─FunctionDecl ';' +// CHECK:STDOUT: ├─ClassDefinition '}' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ ╭─IdentifierNameMaybeBeforeSignature 'GenericClass2' +// CHECK:STDOUT: │ │ │ ╭─ImplicitParamListStart '[' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'T' +// CHECK:STDOUT: │ │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─TypeTypeLiteral 'type' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─ImplicitParamList ']' +// CHECK:STDOUT: │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'X' +// CHECK:STDOUT: │ │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IdentifierNameExpr 'T' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ├─IdentifierNameQualifierWithParams '.' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'OuterGeneric' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'T' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─TypeTypeLiteral 'type' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─ClassDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ │ ├─IdentifierNameMaybeBeforeSignature 'InnerGeneric' +// CHECK:STDOUT: │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'U' +// CHECK:STDOUT: │ │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─TypeTypeLiteral 'type' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ├─ClassDecl ';' +// CHECK:STDOUT: ├─ClassDefinition '}' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ │ ╭─IdentifierNameMaybeBeforeSignature 'OuterGeneric' +// CHECK:STDOUT: │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'T' +// CHECK:STDOUT: │ │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─TypeTypeLiteral 'type' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ├─IdentifierNameQualifierWithParams '.' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'InnerGeneric' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'U' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─TypeTypeLiteral 'type' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─ClassDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IdentifierNameExpr 'T' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IdentifierNameExpr 'U' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ├─FunctionDecl ';' +// CHECK:STDOUT: ├─ClassDefinition '}' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ ╭─IdentifierNameMaybeBeforeSignature 'OuterGeneric' +// CHECK:STDOUT: │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'T' +// CHECK:STDOUT: │ │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─TypeTypeLiteral 'type' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ├─IdentifierNameQualifierWithParams '.' +// CHECK:STDOUT: │ │ ╭─IdentifierNameMaybeBeforeSignature 'InnerGeneric' +// CHECK:STDOUT: │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'U' +// CHECK:STDOUT: │ │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─TypeTypeLiteral 'type' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ├─IdentifierNameQualifierWithParams '.' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'T' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'U' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/params/one.carbon b/toolchain/parse/testdata/generics/params/one.carbon index f0ca085171c0..96c4e51a8c91 100644 --- a/toolchain/parse/testdata/generics/params/one.carbon +++ b/toolchain/parse/testdata/generics/params/one.carbon @@ -13,26 +13,25 @@ class Foo(a: i32); interface Bar(a: i32) {} // CHECK:STDOUT: - filename: one.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ClassDecl', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Bar'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'Foo' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─ClassDecl ';' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'Bar' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/params/one_suffix_comma.carbon b/toolchain/parse/testdata/generics/params/one_suffix_comma.carbon index 28a4e08c3a3e..018505ba66d2 100644 --- a/toolchain/parse/testdata/generics/params/one_suffix_comma.carbon +++ b/toolchain/parse/testdata/generics/params/one_suffix_comma.carbon @@ -13,28 +13,27 @@ class Foo(a: i32,); interface Bar(a: i32,) {} // CHECK:STDOUT: - filename: one_suffix_comma.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ClassDecl', text: ';', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Bar'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'Foo' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─ClassDecl ';' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'Bar' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/params/six.carbon b/toolchain/parse/testdata/generics/params/six.carbon index 1d2360f9bc84..7c6efc902197 100644 --- a/toolchain/parse/testdata/generics/params/six.carbon +++ b/toolchain/parse/testdata/generics/params/six.carbon @@ -13,76 +13,75 @@ class Foo(a: i32, b: i32, c: i32, d: i32, e: i32, f: i32); interface Bar(a: i32, b: i32, c: i32, d: i32, e: i32, f: i32) {} // CHECK:STDOUT: - filename: six.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'c'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'd'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'e'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'f'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 31}, -// CHECK:STDOUT: {kind: 'ClassDecl', text: ';', subtree_size: 34}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Bar'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'c'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'd'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'e'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'f'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 31}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 34}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 35}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'Foo' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'c' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'd' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'e' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'f' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─ClassDecl ';' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'Bar' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'c' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'd' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'e' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'f' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/params/two.carbon b/toolchain/parse/testdata/generics/params/two.carbon index c10459c87f71..65291d17d95a 100644 --- a/toolchain/parse/testdata/generics/params/two.carbon +++ b/toolchain/parse/testdata/generics/params/two.carbon @@ -13,36 +13,35 @@ class Foo(a: i32, b: i32); interface Bar(a: i32, b: i32) {} // CHECK:STDOUT: - filename: two.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'ClassDecl', text: ';', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Bar'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'Foo' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─ClassDecl ';' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'Bar' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/generics/params/two_suffix_comma.carbon b/toolchain/parse/testdata/generics/params/two_suffix_comma.carbon index e0c5b524ab76..d91736b9841b 100644 --- a/toolchain/parse/testdata/generics/params/two_suffix_comma.carbon +++ b/toolchain/parse/testdata/generics/params/two_suffix_comma.carbon @@ -13,38 +13,37 @@ class Foo(a: i32, b: i32,); interface Bar(a: i32, b: i32,) {} // CHECK:STDOUT: - filename: two_suffix_comma.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'ClassDecl', text: ';', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Bar'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 16}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'Foo' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─ClassDecl ';' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'Bar' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/if/basic.carbon b/toolchain/parse/testdata/if/basic.carbon index 582fcf240d9b..4962306dfe34 100644 --- a/toolchain/parse/testdata/if/basic.carbon +++ b/toolchain/parse/testdata/if/basic.carbon @@ -19,33 +19,32 @@ fn F() { } // CHECK:STDOUT: - filename: basic.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IfConditionStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'IfCondition', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IfConditionStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'IfCondition', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IfConditionStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'c'}, -// CHECK:STDOUT: {kind: 'IfCondition', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'd'}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: '}', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IfStatement', text: 'if', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: '}', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'IfStatement', text: 'if', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: '}', subtree_size: 16}, -// CHECK:STDOUT: {kind: 'IfStatement', text: 'if', subtree_size: 20}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 26}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IfConditionStart '(' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ╭─IfCondition ')' +// CHECK:STDOUT: │ │ │ ╭─CodeBlockStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─IfConditionStart '(' +// CHECK:STDOUT: │ │ │ │ ├─IdentifierNameExpr 'b' +// CHECK:STDOUT: │ │ │ │ ╭─IfCondition ')' +// CHECK:STDOUT: │ │ │ │ │ ╭─CodeBlockStart '{' +// CHECK:STDOUT: │ │ │ │ │ │ ╭─IfConditionStart '(' +// CHECK:STDOUT: │ │ │ │ │ │ ├─IdentifierNameExpr 'c' +// CHECK:STDOUT: │ │ │ │ │ │ ╭─IfCondition ')' +// CHECK:STDOUT: │ │ │ │ │ │ │ ╭─CodeBlockStart '{' +// CHECK:STDOUT: │ │ │ │ │ │ │ │ ╭─IdentifierNameExpr 'd' +// CHECK:STDOUT: │ │ │ │ │ │ │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ │ │ │ │ ├─CodeBlock '}' +// CHECK:STDOUT: │ │ │ │ │ ├─IfStatement 'if' +// CHECK:STDOUT: │ │ │ │ ├─CodeBlock '}' +// CHECK:STDOUT: │ │ │ ├─IfStatement 'if' +// CHECK:STDOUT: │ │ ├─CodeBlock '}' +// CHECK:STDOUT: │ ├─IfStatement 'if' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/if/else.carbon b/toolchain/parse/testdata/if/else.carbon index b1c3dd19b6b4..5b82ccb663bd 100644 --- a/toolchain/parse/testdata/if/else.carbon +++ b/toolchain/parse/testdata/if/else.carbon @@ -24,59 +24,58 @@ fn F() { } // CHECK:STDOUT: - filename: else.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IfConditionStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'IfCondition', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IfConditionStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'IfCondition', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'c'}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: '}', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IfStatementElse', text: 'else'}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'd'}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: '}', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IfStatement', text: 'if', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: '}', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'IfStatementElse', text: 'else'}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'e'}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: '}', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IfStatement', text: 'if', subtree_size: 24}, -// CHECK:STDOUT: {kind: 'IfConditionStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'x'}, -// CHECK:STDOUT: {kind: 'IfCondition', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'f'}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: '}', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IfStatementElse', text: 'else'}, -// CHECK:STDOUT: {kind: 'IfConditionStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'x'}, -// CHECK:STDOUT: {kind: 'IfCondition', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'g'}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: '}', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IfStatementElse', text: 'else'}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'h'}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: '}', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IfStatement', text: 'if', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'IfStatement', text: 'if', subtree_size: 22}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 52}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IfConditionStart '(' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ╭─IfCondition ')' +// CHECK:STDOUT: │ │ │ ╭─CodeBlockStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─IfConditionStart '(' +// CHECK:STDOUT: │ │ │ │ ├─IdentifierNameExpr 'b' +// CHECK:STDOUT: │ │ │ │ ╭─IfCondition ')' +// CHECK:STDOUT: │ │ │ │ │ ╭─CodeBlockStart '{' +// CHECK:STDOUT: │ │ │ │ │ │ ╭─IdentifierNameExpr 'c' +// CHECK:STDOUT: │ │ │ │ │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ │ │ ├─CodeBlock '}' +// CHECK:STDOUT: │ │ │ │ ├─IfStatementElse 'else' +// CHECK:STDOUT: │ │ │ │ │ ╭─CodeBlockStart '{' +// CHECK:STDOUT: │ │ │ │ │ │ ╭─IdentifierNameExpr 'd' +// CHECK:STDOUT: │ │ │ │ │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ │ │ ├─CodeBlock '}' +// CHECK:STDOUT: │ │ │ ├─IfStatement 'if' +// CHECK:STDOUT: │ │ ├─CodeBlock '}' +// CHECK:STDOUT: │ │ ├─IfStatementElse 'else' +// CHECK:STDOUT: │ │ │ ╭─CodeBlockStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameExpr 'e' +// CHECK:STDOUT: │ │ │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ├─CodeBlock '}' +// CHECK:STDOUT: │ ├─IfStatement 'if' +// CHECK:STDOUT: │ │ ╭─IfConditionStart '(' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'x' +// CHECK:STDOUT: │ │ ╭─IfCondition ')' +// CHECK:STDOUT: │ │ │ ╭─CodeBlockStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameExpr 'f' +// CHECK:STDOUT: │ │ │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ├─CodeBlock '}' +// CHECK:STDOUT: │ │ ├─IfStatementElse 'else' +// CHECK:STDOUT: │ │ │ ╭─IfConditionStart '(' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'x' +// CHECK:STDOUT: │ │ │ ╭─IfCondition ')' +// CHECK:STDOUT: │ │ │ │ ╭─CodeBlockStart '{' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameExpr 'g' +// CHECK:STDOUT: │ │ │ │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ │ ├─CodeBlock '}' +// CHECK:STDOUT: │ │ │ ├─IfStatementElse 'else' +// CHECK:STDOUT: │ │ │ │ ╭─CodeBlockStart '{' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameExpr 'h' +// CHECK:STDOUT: │ │ │ │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ │ ├─CodeBlock '}' +// CHECK:STDOUT: │ │ ├─IfStatement 'if' +// CHECK:STDOUT: │ ├─IfStatement 'if' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/if/fail_else_unbraced.carbon b/toolchain/parse/testdata/if/fail_else_unbraced.carbon index 4c7e6a7c7c05..2e00bf9c6ebe 100644 --- a/toolchain/parse/testdata/if/fail_else_unbraced.carbon +++ b/toolchain/parse/testdata/if/fail_else_unbraced.carbon @@ -38,59 +38,58 @@ fn F() { } // CHECK:STDOUT: - filename: fail_else_unbraced.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IfConditionStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'IfCondition', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: 'if', has_error: yes}, -// CHECK:STDOUT: {kind: 'IfConditionStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'IfCondition', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: 'c', has_error: yes}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'c'}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: 'c', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IfStatementElse', text: 'else'}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: 'd', has_error: yes}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'd'}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: 'd', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IfStatement', text: 'if', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: 'if', has_error: yes, subtree_size: 15}, -// CHECK:STDOUT: {kind: 'IfStatementElse', text: 'else'}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: 'e', has_error: yes}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'e'}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: 'e', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IfStatement', text: 'if', subtree_size: 24}, -// CHECK:STDOUT: {kind: 'IfConditionStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'x'}, -// CHECK:STDOUT: {kind: 'IfCondition', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'f'}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: '}', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IfStatementElse', text: 'else'}, -// CHECK:STDOUT: {kind: 'IfConditionStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'x'}, -// CHECK:STDOUT: {kind: 'IfCondition', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'g'}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: '}', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IfStatementElse', text: 'else'}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'h'}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: '}', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IfStatement', text: 'if', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'IfStatement', text: 'if', subtree_size: 22}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 52}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IfConditionStart '(' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ╭─IfCondition ')' +// CHECK:STDOUT: │ │ │ ╭─CodeBlockStart 'if' has_error +// CHECK:STDOUT: │ │ │ │ ╭─IfConditionStart '(' +// CHECK:STDOUT: │ │ │ │ ├─IdentifierNameExpr 'b' +// CHECK:STDOUT: │ │ │ │ ╭─IfCondition ')' +// CHECK:STDOUT: │ │ │ │ │ ╭─CodeBlockStart 'c' has_error +// CHECK:STDOUT: │ │ │ │ │ │ ╭─IdentifierNameExpr 'c' +// CHECK:STDOUT: │ │ │ │ │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ │ │ ├─CodeBlock 'c' has_error +// CHECK:STDOUT: │ │ │ │ ├─IfStatementElse 'else' +// CHECK:STDOUT: │ │ │ │ │ ╭─CodeBlockStart 'd' has_error +// CHECK:STDOUT: │ │ │ │ │ │ ╭─IdentifierNameExpr 'd' +// CHECK:STDOUT: │ │ │ │ │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ │ │ ├─CodeBlock 'd' has_error +// CHECK:STDOUT: │ │ │ ├─IfStatement 'if' +// CHECK:STDOUT: │ │ ├─CodeBlock 'if' has_error +// CHECK:STDOUT: │ │ ├─IfStatementElse 'else' +// CHECK:STDOUT: │ │ │ ╭─CodeBlockStart 'e' has_error +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameExpr 'e' +// CHECK:STDOUT: │ │ │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ├─CodeBlock 'e' has_error +// CHECK:STDOUT: │ ├─IfStatement 'if' +// CHECK:STDOUT: │ │ ╭─IfConditionStart '(' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'x' +// CHECK:STDOUT: │ │ ╭─IfCondition ')' +// CHECK:STDOUT: │ │ │ ╭─CodeBlockStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameExpr 'f' +// CHECK:STDOUT: │ │ │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ├─CodeBlock '}' +// CHECK:STDOUT: │ │ ├─IfStatementElse 'else' +// CHECK:STDOUT: │ │ │ ╭─IfConditionStart '(' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'x' +// CHECK:STDOUT: │ │ │ ╭─IfCondition ')' +// CHECK:STDOUT: │ │ │ │ ╭─CodeBlockStart '{' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameExpr 'g' +// CHECK:STDOUT: │ │ │ │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ │ ├─CodeBlock '}' +// CHECK:STDOUT: │ │ │ ├─IfStatementElse 'else' +// CHECK:STDOUT: │ │ │ │ ╭─CodeBlockStart '{' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameExpr 'h' +// CHECK:STDOUT: │ │ │ │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ │ ├─CodeBlock '}' +// CHECK:STDOUT: │ │ ├─IfStatement 'if' +// CHECK:STDOUT: │ ├─IfStatement 'if' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/if/fail_errors.carbon b/toolchain/parse/testdata/if/fail_errors.carbon index 9fa3f4fab1db..fcc203bff5f7 100644 --- a/toolchain/parse/testdata/if/fail_errors.carbon +++ b/toolchain/parse/testdata/if/fail_errors.carbon @@ -36,39 +36,38 @@ fn F() { } // CHECK:STDOUT: - filename: fail_errors.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', 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'}, -// CHECK:STDOUT: {kind: 'IfCondition', text: 'if', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: '{'}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IfStatement', text: 'if', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'IfConditionStart', text: '('}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ')', has_error: yes}, -// CHECK:STDOUT: {kind: 'IfCondition', text: ')', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: '{'}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IfStatement', text: 'if', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'IfConditionStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'IfCondition', text: ')', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: '{'}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IfStatement', text: 'if', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'IfConditionStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'd'}, -// CHECK:STDOUT: {kind: 'IfCondition', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: '}', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '}', has_error: yes}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ')', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: '}', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IfStatement', text: 'if', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 32}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IfConditionStart 'if' has_error +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ╭─IfCondition 'if' has_error +// CHECK:STDOUT: │ │ │ ╭─CodeBlockStart '{' +// CHECK:STDOUT: │ │ ├─CodeBlock '}' +// CHECK:STDOUT: │ ├─IfStatement 'if' +// CHECK:STDOUT: │ │ ╭─IfConditionStart '(' +// CHECK:STDOUT: │ │ ├─InvalidParse ')' has_error +// CHECK:STDOUT: │ │ ╭─IfCondition ')' has_error +// CHECK:STDOUT: │ │ │ ╭─CodeBlockStart '{' +// CHECK:STDOUT: │ │ ├─CodeBlock '}' +// CHECK:STDOUT: │ ├─IfStatement 'if' +// CHECK:STDOUT: │ │ ╭─IfConditionStart '(' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'b' +// CHECK:STDOUT: │ │ ╭─IfCondition ')' has_error +// CHECK:STDOUT: │ │ │ ╭─CodeBlockStart '{' +// CHECK:STDOUT: │ │ ├─CodeBlock '}' +// CHECK:STDOUT: │ ├─IfStatement 'if' +// CHECK:STDOUT: │ │ ╭─IfConditionStart '(' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'd' +// CHECK:STDOUT: │ │ ╭─IfCondition ')' +// CHECK:STDOUT: │ │ │ ╭─CodeBlockStart '}' has_error +// CHECK:STDOUT: │ │ │ │ ╭─InvalidParse '}' has_error +// CHECK:STDOUT: │ │ │ ├─ExprStatement ')' has_error +// CHECK:STDOUT: │ │ ├─CodeBlock '}' has_error +// CHECK:STDOUT: │ ├─IfStatement 'if' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/if/fail_missing_cond.carbon b/toolchain/parse/testdata/if/fail_missing_cond.carbon index b484950e74be..ed0b6318891f 100644 --- a/toolchain/parse/testdata/if/fail_missing_cond.carbon +++ b/toolchain/parse/testdata/if/fail_missing_cond.carbon @@ -18,19 +18,18 @@ fn F() { } // CHECK:STDOUT: - filename: fail_missing_cond.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IfConditionStart', text: 'if', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '{', has_error: yes}, -// CHECK:STDOUT: {kind: 'IfCondition', text: 'if', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: '{'}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IfStatement', text: 'if', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IfConditionStart 'if' has_error +// CHECK:STDOUT: │ │ ├─InvalidParse '{' has_error +// CHECK:STDOUT: │ │ ╭─IfCondition 'if' has_error +// CHECK:STDOUT: │ │ │ ╭─CodeBlockStart '{' +// CHECK:STDOUT: │ │ ├─CodeBlock '}' +// CHECK:STDOUT: │ ├─IfStatement 'if' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/if/fail_square_brackets.carbon b/toolchain/parse/testdata/if/fail_square_brackets.carbon index 95a1a0de6081..1829986dd36e 100644 --- a/toolchain/parse/testdata/if/fail_square_brackets.carbon +++ b/toolchain/parse/testdata/if/fail_square_brackets.carbon @@ -29,21 +29,20 @@ fn F() { } // CHECK:STDOUT: - filename: fail_square_brackets.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IfConditionStart', text: 'if', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '[', has_error: yes}, -// CHECK:STDOUT: {kind: 'IfCondition', text: 'if', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: '[', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '[', has_error: yes}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: '}', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: '[', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IfStatement', text: 'if', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IfConditionStart 'if' has_error +// CHECK:STDOUT: │ │ ├─InvalidParse '[' has_error +// CHECK:STDOUT: │ │ ╭─IfCondition 'if' has_error +// CHECK:STDOUT: │ │ │ ╭─CodeBlockStart '[' has_error +// CHECK:STDOUT: │ │ │ │ ╭─InvalidParse '[' has_error +// CHECK:STDOUT: │ │ │ ├─ExprStatement '}' has_error +// CHECK:STDOUT: │ │ ├─CodeBlock '[' has_error +// CHECK:STDOUT: │ ├─IfStatement 'if' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/if/fail_unbraced.carbon b/toolchain/parse/testdata/if/fail_unbraced.carbon index d1aed8bc11d5..ac8c8cc89b89 100644 --- a/toolchain/parse/testdata/if/fail_unbraced.carbon +++ b/toolchain/parse/testdata/if/fail_unbraced.carbon @@ -29,33 +29,32 @@ fn F() { } // CHECK:STDOUT: - filename: fail_unbraced.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IfConditionStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'IfCondition', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: 'if', has_error: yes}, -// CHECK:STDOUT: {kind: 'IfConditionStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'IfCondition', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: 'if', has_error: yes}, -// CHECK:STDOUT: {kind: 'IfConditionStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'c'}, -// CHECK:STDOUT: {kind: 'IfCondition', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: 'd', has_error: yes}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'd'}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: 'd', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IfStatement', text: 'if', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: 'if', has_error: yes, subtree_size: 10}, -// CHECK:STDOUT: {kind: 'IfStatement', text: 'if', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: 'if', has_error: yes, subtree_size: 16}, -// CHECK:STDOUT: {kind: 'IfStatement', text: 'if', subtree_size: 20}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 26}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IfConditionStart '(' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ╭─IfCondition ')' +// CHECK:STDOUT: │ │ │ ╭─CodeBlockStart 'if' has_error +// CHECK:STDOUT: │ │ │ │ ╭─IfConditionStart '(' +// CHECK:STDOUT: │ │ │ │ ├─IdentifierNameExpr 'b' +// CHECK:STDOUT: │ │ │ │ ╭─IfCondition ')' +// CHECK:STDOUT: │ │ │ │ │ ╭─CodeBlockStart 'if' has_error +// CHECK:STDOUT: │ │ │ │ │ │ ╭─IfConditionStart '(' +// CHECK:STDOUT: │ │ │ │ │ │ ├─IdentifierNameExpr 'c' +// CHECK:STDOUT: │ │ │ │ │ │ ╭─IfCondition ')' +// CHECK:STDOUT: │ │ │ │ │ │ │ ╭─CodeBlockStart 'd' has_error +// CHECK:STDOUT: │ │ │ │ │ │ │ │ ╭─IdentifierNameExpr 'd' +// CHECK:STDOUT: │ │ │ │ │ │ │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ │ │ │ │ ├─CodeBlock 'd' has_error +// CHECK:STDOUT: │ │ │ │ │ ├─IfStatement 'if' +// CHECK:STDOUT: │ │ │ │ ├─CodeBlock 'if' has_error +// CHECK:STDOUT: │ │ │ ├─IfStatement 'if' +// CHECK:STDOUT: │ │ ├─CodeBlock 'if' has_error +// CHECK:STDOUT: │ ├─IfStatement 'if' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/if_expr/basic.carbon b/toolchain/parse/testdata/if_expr/basic.carbon index fe539692e585..1f8fabdfb9ac 100644 --- a/toolchain/parse/testdata/if_expr/basic.carbon +++ b/toolchain/parse/testdata/if_expr/basic.carbon @@ -13,37 +13,36 @@ fn F(b: bool, x: i32, y: i32) -> bool { } // CHECK:STDOUT: - filename: basic.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'BoolTypeLiteral', text: 'bool'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 16}, -// CHECK:STDOUT: {kind: 'BoolTypeLiteral', text: 'bool'}, -// CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 21}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'IfExprIf', text: 'if', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'x'}, -// CHECK:STDOUT: {kind: 'IfExprThen', text: 'then', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'y'}, -// CHECK:STDOUT: {kind: 'IfExprElse', text: 'else', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 30}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─BoolTypeLiteral 'bool' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ╭─BoolTypeLiteral 'bool' +// CHECK:STDOUT: │ ├─ReturnType '->' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'b' +// CHECK:STDOUT: │ │ │ ╭─IfExprIf 'if' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameExpr 'x' +// CHECK:STDOUT: │ │ │ ├─IfExprThen 'then' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'y' +// CHECK:STDOUT: │ │ ├─IfExprElse 'else' +// CHECK:STDOUT: │ ├─ReturnStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/if_expr/fail_condition_missing.carbon b/toolchain/parse/testdata/if_expr/fail_condition_missing.carbon index 352f49a8e026..d781fb227e4b 100644 --- a/toolchain/parse/testdata/if_expr/fail_condition_missing.carbon +++ b/toolchain/parse/testdata/if_expr/fail_condition_missing.carbon @@ -17,26 +17,25 @@ fn F() { } // CHECK:STDOUT: - filename: fail_condition_missing.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'n'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ';', has_error: yes}, -// CHECK:STDOUT: {kind: 'IfExprIf', text: 'if', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ';', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ';', has_error: yes}, -// CHECK:STDOUT: {kind: 'IfExprElse', text: 'if', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 19}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'n' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ │ ╭─InvalidParse ';' has_error +// CHECK:STDOUT: │ │ │ ╭─IfExprIf 'if' has_error +// CHECK:STDOUT: │ │ │ ├─InvalidParse ';' has_error +// CHECK:STDOUT: │ │ │ ├─InvalidParse ';' has_error +// CHECK:STDOUT: │ │ ├─IfExprElse 'if' has_error +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/if_expr/fail_else_expr_missing.carbon b/toolchain/parse/testdata/if_expr/fail_else_expr_missing.carbon index 3f43359a026b..26d93c8fabc3 100644 --- a/toolchain/parse/testdata/if_expr/fail_else_expr_missing.carbon +++ b/toolchain/parse/testdata/if_expr/fail_else_expr_missing.carbon @@ -17,27 +17,26 @@ fn F() { } // CHECK:STDOUT: - filename: fail_else_expr_missing.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'n'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'BoolLiteralTrue', text: 'true'}, -// CHECK:STDOUT: {kind: 'IfExprIf', text: 'if', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '1'}, -// CHECK:STDOUT: {kind: 'IfExprThen', text: 'then', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ';', has_error: yes}, -// CHECK:STDOUT: {kind: 'IfExprElse', text: 'else', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 20}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'n' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ │ ╭─BoolLiteralTrue 'true' +// CHECK:STDOUT: │ │ │ ╭─IfExprIf 'if' +// CHECK:STDOUT: │ │ │ │ ╭─IntLiteral '1' +// CHECK:STDOUT: │ │ │ ├─IfExprThen 'then' +// CHECK:STDOUT: │ │ │ ├─InvalidParse ';' has_error +// CHECK:STDOUT: │ │ ├─IfExprElse 'else' has_error +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/if_expr/fail_else_missing.carbon b/toolchain/parse/testdata/if_expr/fail_else_missing.carbon index cc45ab9753e1..ad894be8454b 100644 --- a/toolchain/parse/testdata/if_expr/fail_else_missing.carbon +++ b/toolchain/parse/testdata/if_expr/fail_else_missing.carbon @@ -17,27 +17,26 @@ fn F() { } // CHECK:STDOUT: - filename: fail_else_missing.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'n'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'BoolLiteralTrue', text: 'true'}, -// CHECK:STDOUT: {kind: 'IfExprIf', text: 'if', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '1'}, -// CHECK:STDOUT: {kind: 'IfExprThen', text: 'then', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ';', has_error: yes}, -// CHECK:STDOUT: {kind: 'IfExprElse', text: 'if', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 20}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'n' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ │ ╭─BoolLiteralTrue 'true' +// CHECK:STDOUT: │ │ │ ╭─IfExprIf 'if' +// CHECK:STDOUT: │ │ │ │ ╭─IntLiteral '1' +// CHECK:STDOUT: │ │ │ ├─IfExprThen 'then' +// CHECK:STDOUT: │ │ │ ├─InvalidParse ';' has_error +// CHECK:STDOUT: │ │ ├─IfExprElse 'if' has_error +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/if_expr/fail_then_expr_missing.carbon b/toolchain/parse/testdata/if_expr/fail_then_expr_missing.carbon index 28dd1a1b62bc..a275caa71533 100644 --- a/toolchain/parse/testdata/if_expr/fail_then_expr_missing.carbon +++ b/toolchain/parse/testdata/if_expr/fail_then_expr_missing.carbon @@ -17,27 +17,26 @@ fn F() { } // CHECK:STDOUT: - filename: fail_then_expr_missing.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'n'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'BoolLiteralTrue', text: 'true'}, -// CHECK:STDOUT: {kind: 'IfExprIf', text: 'if', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ';', has_error: yes}, -// CHECK:STDOUT: {kind: 'IfExprThen', text: 'then', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ';', has_error: yes}, -// CHECK:STDOUT: {kind: 'IfExprElse', text: 'if', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 20}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'n' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ │ ╭─BoolLiteralTrue 'true' +// CHECK:STDOUT: │ │ │ ╭─IfExprIf 'if' +// CHECK:STDOUT: │ │ │ │ ╭─InvalidParse ';' has_error +// CHECK:STDOUT: │ │ │ ├─IfExprThen 'then' has_error +// CHECK:STDOUT: │ │ │ ├─InvalidParse ';' has_error +// CHECK:STDOUT: │ │ ├─IfExprElse 'if' has_error +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/if_expr/fail_then_missing.carbon b/toolchain/parse/testdata/if_expr/fail_then_missing.carbon index ca38e0bf350e..c5bff07525d1 100644 --- a/toolchain/parse/testdata/if_expr/fail_then_missing.carbon +++ b/toolchain/parse/testdata/if_expr/fail_then_missing.carbon @@ -17,26 +17,25 @@ fn F() { } // CHECK:STDOUT: - filename: fail_then_missing.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'n'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'BoolLiteralTrue', text: 'true'}, -// CHECK:STDOUT: {kind: 'IfExprIf', text: 'if', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ';', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ';', has_error: yes}, -// CHECK:STDOUT: {kind: 'IfExprElse', text: 'if', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 19}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'n' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ │ ╭─BoolLiteralTrue 'true' +// CHECK:STDOUT: │ │ │ ╭─IfExprIf 'if' +// CHECK:STDOUT: │ │ │ ├─InvalidParse ';' has_error +// CHECK:STDOUT: │ │ │ ├─InvalidParse ';' has_error +// CHECK:STDOUT: │ │ ├─IfExprElse 'if' has_error +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/if_expr/fail_top_level_if.carbon b/toolchain/parse/testdata/if_expr/fail_top_level_if.carbon index 92ae92433e01..d50f09b96aac 100644 --- a/toolchain/parse/testdata/if_expr/fail_top_level_if.carbon +++ b/toolchain/parse/testdata/if_expr/fail_top_level_if.carbon @@ -25,21 +25,20 @@ fn F() { } // CHECK:STDOUT: - filename: fail_top_level_if.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', 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'}, -// CHECK:STDOUT: {kind: 'IfCondition', text: 'if', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: 'then', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: 'then', has_error: yes}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: 'then', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IfStatement', text: 'if', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IfConditionStart 'if' has_error +// CHECK:STDOUT: │ │ ├─BoolLiteralTrue 'true' +// CHECK:STDOUT: │ │ ╭─IfCondition 'if' has_error +// CHECK:STDOUT: │ │ │ ╭─CodeBlockStart 'then' has_error +// CHECK:STDOUT: │ │ │ │ ╭─InvalidParse 'then' has_error +// CHECK:STDOUT: │ │ │ ├─ExprStatement ';' has_error +// CHECK:STDOUT: │ │ ├─CodeBlock 'then' has_error +// CHECK:STDOUT: │ ├─IfStatement 'if' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/if_expr/in_type.carbon b/toolchain/parse/testdata/if_expr/in_type.carbon index 4a60c55a4458..e1a7545769f5 100644 --- a/toolchain/parse/testdata/if_expr/in_type.carbon +++ b/toolchain/parse/testdata/if_expr/in_type.carbon @@ -15,37 +15,36 @@ fn F() -> if true then i32 else i32* { } // CHECK:STDOUT: - filename: in_type.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'n'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', 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'}, -// CHECK:STDOUT: {kind: 'IfExprThen', text: 'then', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IfExprElse', text: 'else', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'BoolLiteralTrue', text: 'true'}, -// CHECK:STDOUT: {kind: 'IfExprIf', text: 'if', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'IfExprThen', text: 'then', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorAmp', text: '&', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IfExprElse', text: 'else', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 23}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'n' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ╭─BoolLiteralTrue 'true' +// CHECK:STDOUT: │ │ ╭─IfExprIf 'if' +// CHECK:STDOUT: │ │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─IfExprThen 'then' +// CHECK:STDOUT: │ │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─PostfixOperatorStar '*' +// CHECK:STDOUT: │ │ ╭─IfExprElse 'else' +// CHECK:STDOUT: │ ├─ReturnType '->' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ │ ╭─BoolLiteralTrue 'true' +// CHECK:STDOUT: │ │ │ ╭─IfExprIf 'if' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ │ │ ├─IfExprThen 'then' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ │ │ ├─PrefixOperatorAmp '&' +// CHECK:STDOUT: │ │ ├─IfExprElse 'else' +// CHECK:STDOUT: │ ├─ReturnStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/if_expr/precedence.carbon b/toolchain/parse/testdata/if_expr/precedence.carbon index 1da48bf540ca..f50c20c6e493 100644 --- a/toolchain/parse/testdata/if_expr/precedence.carbon +++ b/toolchain/parse/testdata/if_expr/precedence.carbon @@ -13,36 +13,35 @@ fn F(b: bool) -> bool { } // CHECK:STDOUT: - filename: precedence.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'BoolTypeLiteral', text: 'bool'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'BoolTypeLiteral', text: 'bool'}, -// CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'ShortCircuitOperandAnd', text: 'and', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'ShortCircuitOperatorAnd', text: 'and', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IfExprIf', text: 'if', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'ShortCircuitOperandAnd', text: 'and', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'ShortCircuitOperatorAnd', text: 'and', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IfExprThen', text: 'then', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'ShortCircuitOperandOr', text: 'or', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'ShortCircuitOperatorOr', text: 'or', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IfExprElse', text: 'else', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 17}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 29}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─BoolTypeLiteral 'bool' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ╭─BoolTypeLiteral 'bool' +// CHECK:STDOUT: │ ├─ReturnType '->' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'b' +// CHECK:STDOUT: │ │ │ ╭─ShortCircuitOperandAnd 'and' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'b' +// CHECK:STDOUT: │ │ │ ╭─ShortCircuitOperatorAnd 'and' +// CHECK:STDOUT: │ │ │ ╭─IfExprIf 'if' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameExpr 'b' +// CHECK:STDOUT: │ │ │ │ ╭─ShortCircuitOperandAnd 'and' +// CHECK:STDOUT: │ │ │ │ ├─IdentifierNameExpr 'b' +// CHECK:STDOUT: │ │ │ │ ╭─ShortCircuitOperatorAnd 'and' +// CHECK:STDOUT: │ │ │ ├─IfExprThen 'then' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameExpr 'b' +// CHECK:STDOUT: │ │ │ │ ╭─ShortCircuitOperandOr 'or' +// CHECK:STDOUT: │ │ │ │ ├─IdentifierNameExpr 'b' +// CHECK:STDOUT: │ │ │ ├─ShortCircuitOperatorOr 'or' +// CHECK:STDOUT: │ │ ├─IfExprElse 'else' +// CHECK:STDOUT: │ ├─ReturnStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/index/assign_to_var.carbon b/toolchain/parse/testdata/index/assign_to_var.carbon index 8a3735f68d27..ef16131f4433 100644 --- a/toolchain/parse/testdata/index/assign_to_var.carbon +++ b/toolchain/parse/testdata/index/assign_to_var.carbon @@ -11,19 +11,18 @@ var v: i32 = t[0]; // CHECK:STDOUT: - filename: assign_to_var.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'v'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 't'}, -// CHECK:STDOUT: {kind: 'IndexExprStart', text: '[', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'IndexExpr', text: ']', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'v' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 't' +// CHECK:STDOUT: │ │ ╭─IndexExprStart '[' +// CHECK:STDOUT: │ │ ├─IntLiteral '0' +// CHECK:STDOUT: │ ├─IndexExpr ']' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/index/fail_empty_expr.carbon b/toolchain/parse/testdata/index/fail_empty_expr.carbon index fd32b736e718..cfd377f7ce35 100644 --- a/toolchain/parse/testdata/index/fail_empty_expr.carbon +++ b/toolchain/parse/testdata/index/fail_empty_expr.carbon @@ -15,19 +15,18 @@ var v: i32 = t[]; // CHECK:STDOUT: - filename: fail_empty_expr.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'v'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 't'}, -// CHECK:STDOUT: {kind: 'IndexExprStart', text: '[', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ']', has_error: yes}, -// CHECK:STDOUT: {kind: 'IndexExpr', text: ']', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'v' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 't' +// CHECK:STDOUT: │ │ ╭─IndexExprStart '[' +// CHECK:STDOUT: │ │ ├─InvalidParse ']' has_error +// CHECK:STDOUT: │ ├─IndexExpr ']' has_error +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/index/fail_malformed_expr.carbon b/toolchain/parse/testdata/index/fail_malformed_expr.carbon index 6e5776c68479..d38a144a0ddb 100644 --- a/toolchain/parse/testdata/index/fail_malformed_expr.carbon +++ b/toolchain/parse/testdata/index/fail_malformed_expr.carbon @@ -15,19 +15,18 @@ var v: i32 = t[0,]; // CHECK:STDOUT: - filename: fail_malformed_expr.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'v'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 't'}, -// CHECK:STDOUT: {kind: 'IndexExprStart', text: '[', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'IndexExpr', text: ']', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'v' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 't' +// CHECK:STDOUT: │ │ ╭─IndexExprStart '[' +// CHECK:STDOUT: │ │ ├─IntLiteral '0' +// CHECK:STDOUT: │ ├─IndexExpr ']' has_error +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/lambda/lambda.carbon b/toolchain/parse/testdata/lambda/lambda.carbon index 3cbb1bce567b..b58ce9f2d01d 100644 --- a/toolchain/parse/testdata/lambda/lambda.carbon +++ b/toolchain/parse/testdata/lambda/lambda.carbon @@ -66,129 +66,125 @@ fn G() { } // CHECK:STDOUT: - filename: basic.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'AutoTypeLiteral', text: 'auto'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'LambdaIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'ImplicitParamListStart', text: '['}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'T'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ImplicitParamList', text: ']', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'T'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'T'}, -// CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: '{'}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'x'}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: '}', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'Lambda', text: 'fn', subtree_size: 21}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 29}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'AutoTypeLiteral', text: 'auto'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'LambdaIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'TerseBodyArrow', text: '=>'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'x'}, -// CHECK:STDOUT: {kind: 'Lambda', text: 'fn', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 18}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'c'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'AutoTypeLiteral', text: 'auto'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'LambdaIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: '{'}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'Lambda', text: 'fn', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─AutoTypeLiteral 'auto' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─LambdaIntroducer 'fn' +// CHECK:STDOUT: │ │ │ ╭─ImplicitParamListStart '[' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'T' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─TypeTypeLiteral 'type' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─ImplicitParamList ']' +// CHECK:STDOUT: │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IdentifierNameExpr 'T' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'T' +// CHECK:STDOUT: │ │ ├─ReturnType '->' +// CHECK:STDOUT: │ │ │ ╭─CodeBlockStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ │ │ ├─IdentifierNameExpr 'x' +// CHECK:STDOUT: │ │ │ ├─ReturnStatement ';' +// CHECK:STDOUT: │ │ ├─CodeBlock '}' +// CHECK:STDOUT: │ ├─Lambda 'fn' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─AutoTypeLiteral 'auto' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─LambdaIntroducer 'fn' +// CHECK:STDOUT: │ │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ├─TerseBodyArrow '=>' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'x' +// CHECK:STDOUT: │ ├─Lambda 'fn' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'c' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─AutoTypeLiteral 'auto' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─LambdaIntroducer 'fn' +// CHECK:STDOUT: │ │ │ ╭─CodeBlockStart '{' +// CHECK:STDOUT: │ │ ├─CodeBlock '}' +// CHECK:STDOUT: │ ├─Lambda 'fn' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_unconsumed_lambda_introducer.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'RequireIntroducer', text: 'require'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'j'}, -// CHECK:STDOUT: {kind: 'LambdaIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '>', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '', has_error: yes}, -// CHECK:STDOUT: {kind: 'InfixOperatorGreater', text: '>', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '', has_error: yes}, -// CHECK:STDOUT: {kind: 'Lambda', text: 'fn', has_error: yes, subtree_size: 7}, -// CHECK:STDOUT: {kind: 'PrefixOperatorMinus', text: '-', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'InfixOperatorPercent', text: '%', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'RequireDecl', text: '>', has_error: yes, subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─RequireIntroducer 'require' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'j' +// CHECK:STDOUT: │ │ │ ╭─LambdaIntroducer 'fn' +// CHECK:STDOUT: │ │ │ │ ╭─InvalidParse '>' has_error +// CHECK:STDOUT: │ │ │ │ ├─InvalidParse '' has_error +// CHECK:STDOUT: │ │ │ │ ╭─InfixOperatorGreater '>' has_error +// CHECK:STDOUT: │ │ │ ├─ReturnType '->' +// CHECK:STDOUT: │ │ │ ├─InvalidParse '' has_error +// CHECK:STDOUT: │ │ │ ╭─Lambda 'fn' has_error +// CHECK:STDOUT: │ │ ├─PrefixOperatorMinus '-' +// CHECK:STDOUT: │ ├─InfixOperatorPercent '%' +// CHECK:STDOUT: ├─RequireDecl '>' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_expected_body.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'AutoTypeLiteral', text: 'auto'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'LambdaIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ';', has_error: yes}, -// CHECK:STDOUT: {kind: 'Lambda', text: 'fn', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 17}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─AutoTypeLiteral 'auto' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ │ ╭─LambdaIntroducer 'fn' +// CHECK:STDOUT: │ │ │ ├─InvalidParse ';' has_error +// CHECK:STDOUT: │ │ ├─Lambda 'fn' has_error +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_expected_body_after_return_type.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'G'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'AutoTypeLiteral', text: 'auto'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'LambdaIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ';', has_error: yes}, -// CHECK:STDOUT: {kind: 'Lambda', text: 'fn', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 19}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'G' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─AutoTypeLiteral 'auto' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ │ ╭─LambdaIntroducer 'fn' +// CHECK:STDOUT: │ │ │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─ReturnType '->' +// CHECK:STDOUT: │ │ │ ├─InvalidParse ';' has_error +// CHECK:STDOUT: │ │ ├─Lambda 'fn' has_error +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/let/expression_pattern_precedence.carbon b/toolchain/parse/testdata/let/expression_pattern_precedence.carbon index 6557e44df8a5..aa6d4c5c24b3 100644 --- a/toolchain/parse/testdata/let/expression_pattern_precedence.carbon +++ b/toolchain/parse/testdata/let/expression_pattern_precedence.carbon @@ -49,93 +49,89 @@ fn I() { } // CHECK:STDOUT: - filename: parens.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'InfixOperatorEqualEqual', text: '==', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ParenPattern', text: ')', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'c'}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'ShortCircuitOperandAnd', text: 'and', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'ShortCircuitOperatorAnd', text: 'and', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ParenPattern', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'c'}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'BoolLiteralTrue', text: 'true'}, -// CHECK:STDOUT: {kind: 'IfExprIf', text: 'if', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '1'}, -// CHECK:STDOUT: {kind: 'IfExprThen', text: 'then', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '2'}, -// CHECK:STDOUT: {kind: 'IfExprElse', text: 'else', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ParenPattern', text: ')', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '3'}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 37}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ │ ╭─TuplePatternStart '(' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ │ │ ├─IdentifierNameExpr 'b' +// CHECK:STDOUT: │ │ │ ├─InfixOperatorEqualEqual '==' +// CHECK:STDOUT: │ │ ├─ParenPattern ')' +// CHECK:STDOUT: │ │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'c' +// CHECK:STDOUT: │ ├─LetDecl ';' +// CHECK:STDOUT: │ │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ │ ╭─TuplePatternStart '(' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ │ │ ╭─ShortCircuitOperandAnd 'and' +// CHECK:STDOUT: │ │ │ │ ├─IdentifierNameExpr 'b' +// CHECK:STDOUT: │ │ │ ├─ShortCircuitOperatorAnd 'and' +// CHECK:STDOUT: │ │ ├─ParenPattern ')' +// CHECK:STDOUT: │ │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'c' +// CHECK:STDOUT: │ ├─LetDecl ';' +// CHECK:STDOUT: │ │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ │ ╭─TuplePatternStart '(' +// CHECK:STDOUT: │ │ │ │ ╭─BoolLiteralTrue 'true' +// CHECK:STDOUT: │ │ │ │ ╭─IfExprIf 'if' +// CHECK:STDOUT: │ │ │ │ │ ╭─IntLiteral '1' +// CHECK:STDOUT: │ │ │ │ ├─IfExprThen 'then' +// CHECK:STDOUT: │ │ │ │ ├─IntLiteral '2' +// CHECK:STDOUT: │ │ │ ├─IfExprElse 'else' +// CHECK:STDOUT: │ │ ├─ParenPattern ')' +// CHECK:STDOUT: │ │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ├─IntLiteral '3' +// CHECK:STDOUT: │ ├─LetDecl ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_relational.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'G'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'G' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ ├─LetDecl ';' has_error +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_logical.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'H'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'H' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ ├─LetDecl ';' has_error +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_if.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'I'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'BoolLiteralTrue', text: 'true'}, -// CHECK:STDOUT: {kind: 'IfExprIf', text: 'if', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '1'}, -// CHECK:STDOUT: {kind: 'IfExprThen', text: 'then', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '2'}, -// CHECK:STDOUT: {kind: 'IfExprElse', text: 'else', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '3'}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 16}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'I' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ │ ╭─BoolLiteralTrue 'true' +// CHECK:STDOUT: │ │ │ ╭─IfExprIf 'if' +// CHECK:STDOUT: │ │ │ │ ╭─IntLiteral '1' +// CHECK:STDOUT: │ │ │ ├─IfExprThen 'then' +// CHECK:STDOUT: │ │ │ ├─IntLiteral '2' +// CHECK:STDOUT: │ │ ├─IfExprElse 'else' +// CHECK:STDOUT: │ │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ├─IntLiteral '3' +// CHECK:STDOUT: │ ├─LetDecl ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/let/fail_bad_name.carbon b/toolchain/parse/testdata/let/fail_bad_name.carbon index 09e591598b16..2d2dfcbacd36 100644 --- a/toolchain/parse/testdata/let/fail_bad_name.carbon +++ b/toolchain/parse/testdata/let/fail_bad_name.carbon @@ -15,12 +15,11 @@ let ? = 4; // CHECK:STDOUT: - filename: fail_bad_name.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '?', has_error: yes}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '4'}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ ├─InvalidParse '?' has_error +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ ├─IntLiteral '4' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/let/fail_empty.carbon b/toolchain/parse/testdata/let/fail_empty.carbon index 2c23f087f3ac..11aaf033ef6b 100644 --- a/toolchain/parse/testdata/let/fail_empty.carbon +++ b/toolchain/parse/testdata/let/fail_empty.carbon @@ -15,10 +15,9 @@ let; // CHECK:STDOUT: - filename: fail_empty.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ';', has_error: yes}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ ├─InvalidParse ';' has_error +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/let/fail_generic_ref.carbon b/toolchain/parse/testdata/let/fail_generic_ref.carbon index f6d1b7347f33..6ad63016a4aa 100644 --- a/toolchain/parse/testdata/let/fail_generic_ref.carbon +++ b/toolchain/parse/testdata/let/fail_generic_ref.carbon @@ -15,15 +15,14 @@ let generic ref X: i32 = 0; // CHECK:STDOUT: - filename: fail_generic_ref.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'X'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':', has_error: yes}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'X' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPatternTypeStart ':' has_error +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ ├─CompileTimeBindingPattern ':' has_error +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ ├─IntLiteral '0' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/let/fail_missing_name.carbon b/toolchain/parse/testdata/let/fail_missing_name.carbon index 0ce2c5aa348e..56aebebe03c7 100644 --- a/toolchain/parse/testdata/let/fail_missing_name.carbon +++ b/toolchain/parse/testdata/let/fail_missing_name.carbon @@ -25,25 +25,23 @@ let : i32 = 4; let generic : bool = true; // CHECK:STDOUT: - filename: fail_runtime_binding.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ':', has_error: yes}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '4'}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ ├─InvalidParse ':' has_error +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ ├─IntLiteral '4' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_compiletime_binding.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: ':', has_error: yes}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':', has_error: yes}, -// CHECK:STDOUT: {kind: 'BoolTypeLiteral', text: 'bool'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'BoolLiteralTrue', text: 'true'}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature ':' has_error +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPatternTypeStart ':' has_error +// CHECK:STDOUT: │ │ ├─BoolTypeLiteral 'bool' +// CHECK:STDOUT: │ ├─CompileTimeBindingPattern ':' has_error +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ ├─BoolLiteralTrue 'true' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/let/fail_no_semi.carbon b/toolchain/parse/testdata/let/fail_no_semi.carbon index 34de0813b38e..833cc07ab018 100644 --- a/toolchain/parse/testdata/let/fail_no_semi.carbon +++ b/toolchain/parse/testdata/let/fail_no_semi.carbon @@ -10,19 +10,18 @@ let -// CHECK:STDERR: fail_no_semi.carbon:[[@LINE+15]]:21: error: expected pattern [ExpectedPattern] -// CHECK:STDERR: // CHECK:STDOUT: ] -// CHECK:STDERR: ^ +// CHECK:STDERR: fail_no_semi.carbon:[[@LINE+14]]:26: error: expected pattern [ExpectedPattern] +// CHECK:STDERR: // CHECK:STDOUT: (root) +// CHECK:STDERR: ^ // CHECK:STDERR: -// CHECK:STDERR: fail_no_semi.carbon:[[@LINE+11]]:21: error: `let` declarations must end with a `;` [ExpectedDeclSemi] -// CHECK:STDERR: // CHECK:STDOUT: ] -// CHECK:STDERR: ^ +// CHECK:STDERR: fail_no_semi.carbon:[[@LINE+10]]:26: error: `let` declarations must end with a `;` [ExpectedDeclSemi] +// CHECK:STDERR: // CHECK:STDOUT: (root) +// CHECK:STDERR: ^ // CHECK:STDERR: // CHECK:STDOUT: - filename: fail_no_semi.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '', has_error: yes}, -// CHECK:STDOUT: {kind: 'LetDecl', text: 'let', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ ├─InvalidParse '' has_error +// CHECK:STDOUT: ├─LetDecl 'let' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/let/let.carbon b/toolchain/parse/testdata/let/let.carbon index 436c28a86c6b..86938da6631a 100644 --- a/toolchain/parse/testdata/let/let.carbon +++ b/toolchain/parse/testdata/let/let.carbon @@ -16,45 +16,44 @@ fn F() { } // CHECK:STDOUT: - filename: let.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'v'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'UnderscoreName', text: '_'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '1'}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 's'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'StringTypeLiteral', text: 'str'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StringLiteral', text: '"hello"'}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'UnderscoreName', text: '_'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'StringTypeLiteral', text: 'str'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StringLiteral', text: '"goodbye"'}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 22}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'v' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ ├─IntLiteral '0' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─UnderscoreName '_' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ ├─IntLiteral '1' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 's' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─StringTypeLiteral 'str' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ├─StringLiteral '"hello"' +// CHECK:STDOUT: │ ├─LetDecl ';' +// CHECK:STDOUT: │ │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ │ ╭─UnderscoreName '_' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─StringTypeLiteral 'str' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ├─StringLiteral '"goodbye"' +// CHECK:STDOUT: │ ├─LetDecl ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/let/let_ref.carbon b/toolchain/parse/testdata/let/let_ref.carbon index c425892bac24..b96555d6081b 100644 --- a/toolchain/parse/testdata/let/let_ref.carbon +++ b/toolchain/parse/testdata/let/let_ref.carbon @@ -16,49 +16,48 @@ fn F() { } // CHECK:STDOUT: - filename: let_ref.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'v'}, -// CHECK:STDOUT: {kind: 'RefBindingName', text: 'ref', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'UnderscoreName', text: '_'}, -// CHECK:STDOUT: {kind: 'RefBindingName', text: 'ref', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '1'}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 's'}, -// CHECK:STDOUT: {kind: 'RefBindingName', text: 'ref', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'StringTypeLiteral', text: 'str'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StringLiteral', text: '"hello"'}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'UnderscoreName', text: '_'}, -// CHECK:STDOUT: {kind: 'RefBindingName', text: 'ref', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'StringTypeLiteral', text: 'str'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StringLiteral', text: '"goodbye"'}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 24}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'v' +// CHECK:STDOUT: │ │ ╭─RefBindingName 'ref' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ ├─IntLiteral '0' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─UnderscoreName '_' +// CHECK:STDOUT: │ │ ╭─RefBindingName 'ref' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ ├─IntLiteral '1' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 's' +// CHECK:STDOUT: │ │ │ ╭─RefBindingName 'ref' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─StringTypeLiteral 'str' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ├─StringLiteral '"hello"' +// CHECK:STDOUT: │ ├─LetDecl ';' +// CHECK:STDOUT: │ │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ │ ╭─UnderscoreName '_' +// CHECK:STDOUT: │ │ │ ╭─RefBindingName 'ref' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─StringTypeLiteral 'str' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ├─StringLiteral '"goodbye"' +// CHECK:STDOUT: │ ├─LetDecl ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/let/let_struct.carbon b/toolchain/parse/testdata/let/let_struct.carbon index 68daf6f271cb..24151f91cd0d 100644 --- a/toolchain/parse/testdata/let/let_struct.carbon +++ b/toolchain/parse/testdata/let/let_struct.carbon @@ -29,169 +29,164 @@ let {.s = ref s: str, .i = i: i32} = {.s = "hello ref", .i = 3}; let {ref s: str, i: i32} = {.s = "hello ref shorthand", .i = 4}; // CHECK:STDOUT: - filename: let_struct.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 's'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 's'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'StringTypeLiteral', text: 'str'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'i'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'i'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 17}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 's'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'StringLiteral', text: '"hello"'}, -// CHECK:STDOUT: {kind: 'StructLiteralField', text: '=', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'i'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '1'}, -// CHECK:STDOUT: {kind: 'StructLiteralField', text: '=', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 31}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 's' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 's' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─StringTypeLiteral 'str' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─StructPatternDesignatedField '=' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'i' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'i' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─StructPatternDesignatedField '=' +// CHECK:STDOUT: │ ├─StructPattern '}' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 's' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ ├─StringLiteral '"hello"' +// CHECK:STDOUT: │ │ ├─StructLiteralField '=' +// CHECK:STDOUT: │ │ ├─StructLiteralComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'i' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ ├─IntLiteral '1' +// CHECK:STDOUT: │ │ ├─StructLiteralField '=' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: let_struct_shorthand.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 's'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'StringTypeLiteral', text: 'str'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'i'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 's'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'StringLiteral', text: '"hello shorthand"'}, -// CHECK:STDOUT: {kind: 'StructLiteralField', text: '=', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'i'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '2'}, -// CHECK:STDOUT: {kind: 'StructLiteralField', text: '=', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 25}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 's' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─StringTypeLiteral 'str' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'i' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ ├─StructPattern '}' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 's' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ ├─StringLiteral '"hello shorthand"' +// CHECK:STDOUT: │ │ ├─StructLiteralField '=' +// CHECK:STDOUT: │ │ ├─StructLiteralComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'i' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ ├─IntLiteral '2' +// CHECK:STDOUT: │ │ ├─StructLiteralField '=' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: let_struct_mixed.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 's'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 's'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'StringTypeLiteral', text: 'str'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'i'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 's'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'StringLiteral', text: '"hello mixed"'}, -// CHECK:STDOUT: {kind: 'StructLiteralField', text: '=', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'i'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '2'}, -// CHECK:STDOUT: {kind: 'StructLiteralField', text: '=', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 28}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 's' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 's' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─StringTypeLiteral 'str' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─StructPatternDesignatedField '=' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'i' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ ├─StructPattern '}' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 's' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ ├─StringLiteral '"hello mixed"' +// CHECK:STDOUT: │ │ ├─StructLiteralField '=' +// CHECK:STDOUT: │ │ ├─StructLiteralComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'i' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ ├─IntLiteral '2' +// CHECK:STDOUT: │ │ ├─StructLiteralField '=' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: let_ref_struct.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 's'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 's'}, -// CHECK:STDOUT: {kind: 'RefBindingName', text: 'ref', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'StringTypeLiteral', text: 'str'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'i'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'i'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 18}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 's'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'StringLiteral', text: '"hello ref"'}, -// CHECK:STDOUT: {kind: 'StructLiteralField', text: '=', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'i'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '3'}, -// CHECK:STDOUT: {kind: 'StructLiteralField', text: '=', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 32}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 's' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 's' +// CHECK:STDOUT: │ │ │ │ ╭─RefBindingName 'ref' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─StringTypeLiteral 'str' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─StructPatternDesignatedField '=' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'i' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'i' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─StructPatternDesignatedField '=' +// CHECK:STDOUT: │ ├─StructPattern '}' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 's' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ ├─StringLiteral '"hello ref"' +// CHECK:STDOUT: │ │ ├─StructLiteralField '=' +// CHECK:STDOUT: │ │ ├─StructLiteralComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'i' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ ├─IntLiteral '3' +// CHECK:STDOUT: │ │ ├─StructLiteralField '=' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: let_ref_struct_shorthand.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 's'}, -// CHECK:STDOUT: {kind: 'RefBindingName', text: 'ref', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'StringTypeLiteral', text: 'str'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'i'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 's'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'StringLiteral', text: '"hello ref shorthand"'}, -// CHECK:STDOUT: {kind: 'StructLiteralField', text: '=', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'i'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '4'}, -// CHECK:STDOUT: {kind: 'StructLiteralField', text: '=', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 26}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 's' +// CHECK:STDOUT: │ │ │ ╭─RefBindingName 'ref' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─StringTypeLiteral 'str' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'i' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ ├─StructPattern '}' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 's' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ ├─StringLiteral '"hello ref shorthand"' +// CHECK:STDOUT: │ │ ├─StructLiteralField '=' +// CHECK:STDOUT: │ │ ├─StructLiteralComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'i' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ ├─IntLiteral '4' +// CHECK:STDOUT: │ │ ├─StructLiteralField '=' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/let/let_tuple.carbon b/toolchain/parse/testdata/let/let_tuple.carbon index e97c1b3d7d01..8cfd1c614a29 100644 --- a/toolchain/parse/testdata/let/let_tuple.carbon +++ b/toolchain/parse/testdata/let/let_tuple.carbon @@ -13,32 +13,31 @@ fn F() { } // CHECK:STDOUT: - filename: let_tuple.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 's'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'StringTypeLiteral', text: 'str'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'i'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'StringLiteral', text: '"hello"'}, -// CHECK:STDOUT: {kind: 'TupleLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 19}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 25}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ │ ╭─TuplePatternStart '(' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 's' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─StringTypeLiteral 'str' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'i' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─TuplePattern ')' +// CHECK:STDOUT: │ │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ ├─StringLiteral '"hello"' +// CHECK:STDOUT: │ │ │ ├─TupleLiteralComma ',' +// CHECK:STDOUT: │ │ │ ├─IntLiteral '0' +// CHECK:STDOUT: │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ ├─LetDecl ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/let/missing_type.carbon b/toolchain/parse/testdata/let/missing_type.carbon index 5a99a53c455a..cebf82ec5ac1 100644 --- a/toolchain/parse/testdata/let/missing_type.carbon +++ b/toolchain/parse/testdata/let/missing_type.carbon @@ -11,12 +11,11 @@ let a = 4; // CHECK:STDOUT: - filename: missing_type.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '4'}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ ├─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ ├─IntLiteral '4' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/let/missing_value.carbon b/toolchain/parse/testdata/let/missing_value.carbon index d896f1ede95c..ca75b9589155 100644 --- a/toolchain/parse/testdata/let/missing_value.carbon +++ b/toolchain/parse/testdata/let/missing_value.carbon @@ -19,34 +19,33 @@ interface I { } // CHECK:STDOUT: - filename: missing_value.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'I'}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'AssociatedConstantIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'T'}, -// CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, -// CHECK:STDOUT: {kind: 'AssociatedConstantNameAndType', text: ':', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'AssociatedConstantDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ ├─LetBindingPattern ':' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ ├─LetDecl ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'I' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─AssociatedConstantIntroducer 'let' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'T' +// CHECK:STDOUT: │ │ │ ├─TypeTypeLiteral 'type' +// CHECK:STDOUT: │ │ ├─AssociatedConstantNameAndType ':' +// CHECK:STDOUT: │ ├─AssociatedConstantDecl ';' +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/match/fail_cases_after_default.carbon b/toolchain/parse/testdata/match/fail_cases_after_default.carbon index daa045d303c7..c780cb6cddec 100644 --- a/toolchain/parse/testdata/match/fail_cases_after_default.carbon +++ b/toolchain/parse/testdata/match/fail_cases_after_default.carbon @@ -32,40 +32,39 @@ fn f() -> i32 { } // CHECK:STDOUT: - filename: fail_cases_after_default.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'f'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', 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}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '3'}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'MatchIntroducer', text: 'match'}, -// CHECK:STDOUT: {kind: 'MatchConditionStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'x'}, -// CHECK:STDOUT: {kind: 'MatchCondition', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MatchStatementStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'MatchDefaultIntroducer', text: 'default'}, -// CHECK:STDOUT: {kind: 'MatchDefault', text: '=>', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'MatchHandlerStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '1'}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MatchHandler', text: '}', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'MatchStatement', text: '}', has_error: yes, subtree_size: 13}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 33}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'f' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ ├─ReturnType '->' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ├─IntLiteral '3' +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: │ │ ╭─MatchIntroducer 'match' +// CHECK:STDOUT: │ │ │ ╭─MatchConditionStart '(' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'x' +// CHECK:STDOUT: │ │ ├─MatchCondition ')' +// CHECK:STDOUT: │ │ ╭─MatchStatementStart '{' +// CHECK:STDOUT: │ │ │ ╭─MatchDefaultIntroducer 'default' +// CHECK:STDOUT: │ │ │ ╭─MatchDefault '=>' +// CHECK:STDOUT: │ │ │ ╭─MatchHandlerStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ │ │ ├─IntLiteral '1' +// CHECK:STDOUT: │ │ │ ├─ReturnStatement ';' +// CHECK:STDOUT: │ │ ├─MatchHandler '}' +// CHECK:STDOUT: │ ├─MatchStatement '}' has_error +// CHECK:STDOUT: │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ ├─IntLiteral '0' +// CHECK:STDOUT: │ ├─ReturnStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/match/fail_missing_case_arrow.carbon b/toolchain/parse/testdata/match/fail_missing_case_arrow.carbon index 884fbabbc27a..a30e5286bb34 100644 --- a/toolchain/parse/testdata/match/fail_missing_case_arrow.carbon +++ b/toolchain/parse/testdata/match/fail_missing_case_arrow.carbon @@ -25,46 +25,45 @@ fn f() -> i32 { } // CHECK:STDOUT: - filename: fail_missing_case_arrow.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'f'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', 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}, -// CHECK:STDOUT: {kind: 'MatchIntroducer', text: 'match'}, -// CHECK:STDOUT: {kind: 'MatchConditionStart', text: '('}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '3'}, -// CHECK:STDOUT: {kind: 'MatchCondition', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MatchStatementStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'MatchCaseIntroducer', text: 'case'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'MatchCase', text: '{', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'MatchHandlerStart', text: '{', has_error: yes, subtree_size: 7}, -// CHECK:STDOUT: {kind: 'MatchHandler', text: '{', has_error: yes, subtree_size: 8}, -// CHECK:STDOUT: {kind: 'MatchCaseIntroducer', text: 'case'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'MatchCaseGuardIntroducer', text: 'if'}, -// CHECK:STDOUT: {kind: 'MatchCaseGuardStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'x'}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '3'}, -// CHECK:STDOUT: {kind: 'InfixOperatorEqualEqual', text: '==', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MatchCaseGuard', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'MatchCase', text: '{', has_error: yes, subtree_size: 12}, -// CHECK:STDOUT: {kind: 'MatchHandlerStart', text: '{', has_error: yes, subtree_size: 13}, -// CHECK:STDOUT: {kind: 'MatchHandler', text: '{', has_error: yes, subtree_size: 14}, -// CHECK:STDOUT: {kind: 'MatchStatement', text: '}', subtree_size: 28}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 39}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'f' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ ├─ReturnType '->' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─MatchIntroducer 'match' +// CHECK:STDOUT: │ │ │ ╭─MatchConditionStart '(' +// CHECK:STDOUT: │ │ │ ├─IntLiteral '3' +// CHECK:STDOUT: │ │ ├─MatchCondition ')' +// CHECK:STDOUT: │ │ ╭─MatchStatementStart '{' +// CHECK:STDOUT: │ │ │ ╭─MatchCaseIntroducer 'case' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ │ ╭─MatchCase '{' has_error +// CHECK:STDOUT: │ │ │ ╭─MatchHandlerStart '{' has_error +// CHECK:STDOUT: │ │ ├─MatchHandler '{' has_error +// CHECK:STDOUT: │ │ │ ╭─MatchCaseIntroducer 'case' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ │ │ ╭─MatchCaseGuardIntroducer 'if' +// CHECK:STDOUT: │ │ │ │ ├─MatchCaseGuardStart '(' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameExpr 'x' +// CHECK:STDOUT: │ │ │ │ │ ├─IntLiteral '3' +// CHECK:STDOUT: │ │ │ │ ├─InfixOperatorEqualEqual '==' +// CHECK:STDOUT: │ │ │ ├─MatchCaseGuard ')' +// CHECK:STDOUT: │ │ │ ╭─MatchCase '{' has_error +// CHECK:STDOUT: │ │ │ ╭─MatchHandlerStart '{' has_error +// CHECK:STDOUT: │ │ ├─MatchHandler '{' has_error +// CHECK:STDOUT: │ ├─MatchStatement '}' +// CHECK:STDOUT: │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ ├─IntLiteral '0' +// CHECK:STDOUT: │ ├─ReturnStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/match/fail_missing_case_pattern.carbon b/toolchain/parse/testdata/match/fail_missing_case_pattern.carbon index 391d3e020130..2fa255d5f0ce 100644 --- a/toolchain/parse/testdata/match/fail_missing_case_pattern.carbon +++ b/toolchain/parse/testdata/match/fail_missing_case_pattern.carbon @@ -20,29 +20,28 @@ fn f() -> i32 { } // CHECK:STDOUT: - filename: fail_missing_case_pattern.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'f'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', 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}, -// CHECK:STDOUT: {kind: 'MatchIntroducer', text: 'match'}, -// CHECK:STDOUT: {kind: 'MatchConditionStart', text: '('}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '3'}, -// CHECK:STDOUT: {kind: 'MatchCondition', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MatchStatementStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'MatchCaseIntroducer', text: 'case'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '=>', has_error: yes}, -// CHECK:STDOUT: {kind: 'MatchCase', text: '=>', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MatchHandlerStart', text: '=>', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'MatchHandler', text: '=>', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'MatchStatement', text: '}', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 22}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'f' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ ├─ReturnType '->' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─MatchIntroducer 'match' +// CHECK:STDOUT: │ │ │ ╭─MatchConditionStart '(' +// CHECK:STDOUT: │ │ │ ├─IntLiteral '3' +// CHECK:STDOUT: │ │ ├─MatchCondition ')' +// CHECK:STDOUT: │ │ ╭─MatchStatementStart '{' +// CHECK:STDOUT: │ │ │ ╭─MatchCaseIntroducer 'case' +// CHECK:STDOUT: │ │ │ ├─InvalidParse '=>' has_error +// CHECK:STDOUT: │ │ │ ╭─MatchCase '=>' has_error +// CHECK:STDOUT: │ │ │ ╭─MatchHandlerStart '=>' has_error +// CHECK:STDOUT: │ │ ├─MatchHandler '=>' has_error +// CHECK:STDOUT: │ ├─MatchStatement '}' +// CHECK:STDOUT: │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ ├─IntLiteral '0' +// CHECK:STDOUT: │ ├─ReturnStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/match/fail_missing_case_statements_block.carbon b/toolchain/parse/testdata/match/fail_missing_case_statements_block.carbon index 7977d6ad5b6e..9541c79dc0b8 100644 --- a/toolchain/parse/testdata/match/fail_missing_case_statements_block.carbon +++ b/toolchain/parse/testdata/match/fail_missing_case_statements_block.carbon @@ -21,32 +21,31 @@ fn f() -> i32 { } // CHECK:STDOUT: - filename: fail_missing_case_statements_block.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'f'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', 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}, -// CHECK:STDOUT: {kind: 'MatchIntroducer', text: 'match'}, -// CHECK:STDOUT: {kind: 'MatchConditionStart', text: '('}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '3'}, -// CHECK:STDOUT: {kind: 'MatchCondition', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MatchStatementStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'MatchCaseIntroducer', text: 'case'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'MatchCase', text: '=>', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'MatchHandlerStart', text: 'default', has_error: yes, subtree_size: 7}, -// CHECK:STDOUT: {kind: 'MatchHandler', text: 'default', has_error: yes, subtree_size: 8}, -// CHECK:STDOUT: {kind: 'MatchStatement', text: '}', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 25}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'f' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ ├─ReturnType '->' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─MatchIntroducer 'match' +// CHECK:STDOUT: │ │ │ ╭─MatchConditionStart '(' +// CHECK:STDOUT: │ │ │ ├─IntLiteral '3' +// CHECK:STDOUT: │ │ ├─MatchCondition ')' +// CHECK:STDOUT: │ │ ╭─MatchStatementStart '{' +// CHECK:STDOUT: │ │ │ ╭─MatchCaseIntroducer 'case' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ │ ╭─MatchCase '=>' +// CHECK:STDOUT: │ │ │ ╭─MatchHandlerStart 'default' has_error +// CHECK:STDOUT: │ │ ├─MatchHandler 'default' has_error +// CHECK:STDOUT: │ ├─MatchStatement '}' +// CHECK:STDOUT: │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ ├─IntLiteral '0' +// CHECK:STDOUT: │ ├─ReturnStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/match/fail_missing_cases.carbon b/toolchain/parse/testdata/match/fail_missing_cases.carbon index c0691a86b11f..da21bbe05d93 100644 --- a/toolchain/parse/testdata/match/fail_missing_cases.carbon +++ b/toolchain/parse/testdata/match/fail_missing_cases.carbon @@ -19,24 +19,23 @@ fn f() -> i32 { } // CHECK:STDOUT: - filename: fail_missing_cases.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'f'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', 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}, -// CHECK:STDOUT: {kind: 'MatchIntroducer', text: 'match'}, -// CHECK:STDOUT: {kind: 'MatchConditionStart', text: '('}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '3'}, -// CHECK:STDOUT: {kind: 'MatchCondition', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MatchStatementStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'MatchStatement', text: '}', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 17}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'f' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ ├─ReturnType '->' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─MatchIntroducer 'match' +// CHECK:STDOUT: │ │ │ ╭─MatchConditionStart '(' +// CHECK:STDOUT: │ │ │ ├─IntLiteral '3' +// CHECK:STDOUT: │ │ ├─MatchCondition ')' +// CHECK:STDOUT: │ │ ╭─MatchStatementStart '{' +// CHECK:STDOUT: │ ├─MatchStatement '}' has_error +// CHECK:STDOUT: │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ ├─IntLiteral '0' +// CHECK:STDOUT: │ ├─ReturnStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/match/fail_missing_cases_block.carbon b/toolchain/parse/testdata/match/fail_missing_cases_block.carbon index 23dc7cb73047..13a13ca55696 100644 --- a/toolchain/parse/testdata/match/fail_missing_cases_block.carbon +++ b/toolchain/parse/testdata/match/fail_missing_cases_block.carbon @@ -18,21 +18,20 @@ fn f() -> i32 { } // CHECK:STDOUT: - filename: fail_missing_cases_block.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'f'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', 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}, -// CHECK:STDOUT: {kind: 'MatchIntroducer', text: 'match'}, -// CHECK:STDOUT: {kind: 'MatchConditionStart', text: '('}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '1'}, -// CHECK:STDOUT: {kind: 'MatchCondition', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MatchStatementStart', text: 'return', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'MatchStatement', text: 'return', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'f' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ ├─ReturnType '->' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─MatchIntroducer 'match' +// CHECK:STDOUT: │ │ │ ╭─MatchConditionStart '(' +// CHECK:STDOUT: │ │ │ ├─IntLiteral '1' +// CHECK:STDOUT: │ │ ├─MatchCondition ')' +// CHECK:STDOUT: │ │ ╭─MatchStatementStart 'return' has_error +// CHECK:STDOUT: │ ├─MatchStatement 'return' has_error +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/match/fail_missing_default_arrow.carbon b/toolchain/parse/testdata/match/fail_missing_default_arrow.carbon index a3daefccdc48..36075def7a55 100644 --- a/toolchain/parse/testdata/match/fail_missing_default_arrow.carbon +++ b/toolchain/parse/testdata/match/fail_missing_default_arrow.carbon @@ -20,28 +20,27 @@ fn f() -> i32 { } // CHECK:STDOUT: - filename: fail_missing_default_arrow.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'f'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', 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}, -// CHECK:STDOUT: {kind: 'MatchIntroducer', text: 'match'}, -// CHECK:STDOUT: {kind: 'MatchConditionStart', text: '('}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '3'}, -// CHECK:STDOUT: {kind: 'MatchCondition', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MatchStatementStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'MatchDefaultIntroducer', text: 'default'}, -// CHECK:STDOUT: {kind: 'MatchDefault', text: '{', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'MatchHandlerStart', text: '{', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MatchHandler', text: '{', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'MatchStatement', text: '}', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 21}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'f' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ ├─ReturnType '->' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─MatchIntroducer 'match' +// CHECK:STDOUT: │ │ │ ╭─MatchConditionStart '(' +// CHECK:STDOUT: │ │ │ ├─IntLiteral '3' +// CHECK:STDOUT: │ │ ├─MatchCondition ')' +// CHECK:STDOUT: │ │ ╭─MatchStatementStart '{' +// CHECK:STDOUT: │ │ │ ╭─MatchDefaultIntroducer 'default' +// CHECK:STDOUT: │ │ │ ╭─MatchDefault '{' has_error +// CHECK:STDOUT: │ │ │ ╭─MatchHandlerStart '{' has_error +// CHECK:STDOUT: │ │ ├─MatchHandler '{' has_error +// CHECK:STDOUT: │ ├─MatchStatement '}' +// CHECK:STDOUT: │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ ├─IntLiteral '0' +// CHECK:STDOUT: │ ├─ReturnStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/match/fail_missing_default_statements_block.carbon b/toolchain/parse/testdata/match/fail_missing_default_statements_block.carbon index 12162d68b2dd..c6beb7756801 100644 --- a/toolchain/parse/testdata/match/fail_missing_default_statements_block.carbon +++ b/toolchain/parse/testdata/match/fail_missing_default_statements_block.carbon @@ -20,28 +20,27 @@ fn f() -> i32 { } // CHECK:STDOUT: - filename: fail_missing_default_statements_block.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'f'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', 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}, -// CHECK:STDOUT: {kind: 'MatchIntroducer', text: 'match'}, -// CHECK:STDOUT: {kind: 'MatchConditionStart', text: '('}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '3'}, -// CHECK:STDOUT: {kind: 'MatchCondition', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MatchStatementStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'MatchDefaultIntroducer', text: 'default'}, -// CHECK:STDOUT: {kind: 'MatchDefault', text: '=>', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'MatchHandlerStart', text: '}', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MatchHandler', text: '}', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'MatchStatement', text: '}', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 21}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'f' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ ├─ReturnType '->' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─MatchIntroducer 'match' +// CHECK:STDOUT: │ │ │ ╭─MatchConditionStart '(' +// CHECK:STDOUT: │ │ │ ├─IntLiteral '3' +// CHECK:STDOUT: │ │ ├─MatchCondition ')' +// CHECK:STDOUT: │ │ ╭─MatchStatementStart '{' +// CHECK:STDOUT: │ │ │ ╭─MatchDefaultIntroducer 'default' +// CHECK:STDOUT: │ │ │ ╭─MatchDefault '=>' +// CHECK:STDOUT: │ │ │ ╭─MatchHandlerStart '}' has_error +// CHECK:STDOUT: │ │ ├─MatchHandler '}' has_error +// CHECK:STDOUT: │ ├─MatchStatement '}' +// CHECK:STDOUT: │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ ├─IntLiteral '0' +// CHECK:STDOUT: │ ├─ReturnStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/match/fail_missing_guard_close_paren.carbon b/toolchain/parse/testdata/match/fail_missing_guard_close_paren.carbon index ac0ddd216f9e..83f77a839924 100644 --- a/toolchain/parse/testdata/match/fail_missing_guard_close_paren.carbon +++ b/toolchain/parse/testdata/match/fail_missing_guard_close_paren.carbon @@ -24,36 +24,35 @@ fn f() -> i32 { } // CHECK:STDOUT: - filename: fail_missing_guard_close_paren.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'f'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', 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}, -// CHECK:STDOUT: {kind: 'MatchIntroducer', text: 'match'}, -// CHECK:STDOUT: {kind: 'MatchConditionStart', text: '('}, -// CHECK:STDOUT: {kind: 'BoolLiteralTrue', text: 'true'}, -// CHECK:STDOUT: {kind: 'MatchCondition', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MatchStatementStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'MatchCaseIntroducer', text: 'case'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'BoolTypeLiteral', text: 'bool'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'MatchCaseGuardIntroducer', text: 'if'}, -// CHECK:STDOUT: {kind: 'MatchCaseGuardStart', text: '('}, -// CHECK:STDOUT: {kind: 'BoolLiteralFalse', text: 'false'}, -// CHECK:STDOUT: {kind: 'MatchCaseGuard', text: '=>', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'MatchCase', text: '}', has_error: yes, subtree_size: 10}, -// CHECK:STDOUT: {kind: 'MatchHandlerStart', text: '}', has_error: yes, subtree_size: 11}, -// CHECK:STDOUT: {kind: 'MatchHandler', text: '}', has_error: yes, subtree_size: 12}, -// CHECK:STDOUT: {kind: 'MatchStatement', text: '}', subtree_size: 18}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 29}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'f' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ ├─ReturnType '->' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─MatchIntroducer 'match' +// CHECK:STDOUT: │ │ │ ╭─MatchConditionStart '(' +// CHECK:STDOUT: │ │ │ ├─BoolLiteralTrue 'true' +// CHECK:STDOUT: │ │ ├─MatchCondition ')' +// CHECK:STDOUT: │ │ ╭─MatchStatementStart '{' +// CHECK:STDOUT: │ │ │ ╭─MatchCaseIntroducer 'case' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─BoolTypeLiteral 'bool' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ │ │ ╭─MatchCaseGuardIntroducer 'if' +// CHECK:STDOUT: │ │ │ │ ├─MatchCaseGuardStart '(' +// CHECK:STDOUT: │ │ │ │ ├─BoolLiteralFalse 'false' +// CHECK:STDOUT: │ │ │ ├─MatchCaseGuard '=>' has_error +// CHECK:STDOUT: │ │ │ ╭─MatchCase '}' has_error +// CHECK:STDOUT: │ │ │ ╭─MatchHandlerStart '}' has_error +// CHECK:STDOUT: │ │ ├─MatchHandler '}' has_error +// CHECK:STDOUT: │ ├─MatchStatement '}' +// CHECK:STDOUT: │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ ├─IntLiteral '0' +// CHECK:STDOUT: │ ├─ReturnStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/match/fail_missing_guard_open_paren.carbon b/toolchain/parse/testdata/match/fail_missing_guard_open_paren.carbon index 73b08aac0b46..8636f8d7e67d 100644 --- a/toolchain/parse/testdata/match/fail_missing_guard_open_paren.carbon +++ b/toolchain/parse/testdata/match/fail_missing_guard_open_paren.carbon @@ -24,36 +24,35 @@ fn f() -> i32 { } // CHECK:STDOUT: - filename: fail_missing_guard_open_paren.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'f'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', 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}, -// CHECK:STDOUT: {kind: 'MatchIntroducer', text: 'match'}, -// CHECK:STDOUT: {kind: 'MatchConditionStart', text: '('}, -// CHECK:STDOUT: {kind: 'BoolLiteralTrue', text: 'true'}, -// CHECK:STDOUT: {kind: 'MatchCondition', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MatchStatementStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'MatchCaseIntroducer', text: 'case'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'BoolTypeLiteral', text: 'bool'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'MatchCaseGuardIntroducer', text: 'if'}, -// CHECK:STDOUT: {kind: 'MatchCaseGuardStart', text: 'false', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: 'false', has_error: yes}, -// CHECK:STDOUT: {kind: 'MatchCaseGuard', text: 'false', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'MatchCase', text: 'false', has_error: yes, subtree_size: 10}, -// CHECK:STDOUT: {kind: 'MatchHandlerStart', text: 'false', has_error: yes, subtree_size: 11}, -// CHECK:STDOUT: {kind: 'MatchHandler', text: 'false', has_error: yes, subtree_size: 12}, -// CHECK:STDOUT: {kind: 'MatchStatement', text: '}', subtree_size: 18}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 29}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'f' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ ├─ReturnType '->' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─MatchIntroducer 'match' +// CHECK:STDOUT: │ │ │ ╭─MatchConditionStart '(' +// CHECK:STDOUT: │ │ │ ├─BoolLiteralTrue 'true' +// CHECK:STDOUT: │ │ ├─MatchCondition ')' +// CHECK:STDOUT: │ │ ╭─MatchStatementStart '{' +// CHECK:STDOUT: │ │ │ ╭─MatchCaseIntroducer 'case' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─BoolTypeLiteral 'bool' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ │ │ ╭─MatchCaseGuardIntroducer 'if' +// CHECK:STDOUT: │ │ │ │ ├─MatchCaseGuardStart 'false' has_error +// CHECK:STDOUT: │ │ │ │ ├─InvalidParse 'false' has_error +// CHECK:STDOUT: │ │ │ ├─MatchCaseGuard 'false' has_error +// CHECK:STDOUT: │ │ │ ╭─MatchCase 'false' has_error +// CHECK:STDOUT: │ │ │ ╭─MatchHandlerStart 'false' has_error +// CHECK:STDOUT: │ │ ├─MatchHandler 'false' has_error +// CHECK:STDOUT: │ ├─MatchStatement '}' +// CHECK:STDOUT: │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ ├─IntLiteral '0' +// CHECK:STDOUT: │ ├─ReturnStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/match/fail_missing_guard_parens_only_parse_errors.carbon b/toolchain/parse/testdata/match/fail_missing_guard_parens_only_parse_errors.carbon index 55705a2c73ef..5f7cf252a52f 100644 --- a/toolchain/parse/testdata/match/fail_missing_guard_parens_only_parse_errors.carbon +++ b/toolchain/parse/testdata/match/fail_missing_guard_parens_only_parse_errors.carbon @@ -26,50 +26,49 @@ fn f() -> i32 { } // CHECK:STDOUT: - filename: fail_missing_guard_parens_only_parse_errors.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'f'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', 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}, -// CHECK:STDOUT: {kind: 'MatchIntroducer', text: 'match'}, -// CHECK:STDOUT: {kind: 'MatchConditionStart', text: '('}, -// CHECK:STDOUT: {kind: 'BoolLiteralTrue', text: 'true'}, -// CHECK:STDOUT: {kind: 'MatchCondition', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MatchStatementStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'MatchCaseIntroducer', text: 'case'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'BoolTypeLiteral', text: 'bool'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'MatchCaseGuardIntroducer', text: 'if'}, -// CHECK:STDOUT: {kind: 'MatchCaseGuardStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'x'}, -// CHECK:STDOUT: {kind: 'BoolLiteralFalse', text: 'false'}, -// CHECK:STDOUT: {kind: 'InfixOperatorEqualEqual', text: '==', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MatchCaseGuard', text: '=>', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'MatchCase', text: 'case', has_error: yes, subtree_size: 12}, -// CHECK:STDOUT: {kind: 'MatchHandlerStart', text: 'case', has_error: yes, subtree_size: 13}, -// CHECK:STDOUT: {kind: 'MatchHandler', text: 'case', has_error: yes, subtree_size: 14}, -// CHECK:STDOUT: {kind: 'MatchCaseIntroducer', text: 'case'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'z'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'BoolTypeLiteral', text: 'bool'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'MatchCaseGuardIntroducer', text: 'if'}, -// CHECK:STDOUT: {kind: 'MatchCaseGuardStart', text: 'true', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: 'true', has_error: yes}, -// CHECK:STDOUT: {kind: 'MatchCaseGuard', text: 'true', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'MatchCase', text: 'true', has_error: yes, subtree_size: 10}, -// CHECK:STDOUT: {kind: 'MatchHandlerStart', text: 'true', has_error: yes, subtree_size: 11}, -// CHECK:STDOUT: {kind: 'MatchHandler', text: 'true', has_error: yes, subtree_size: 12}, -// CHECK:STDOUT: {kind: 'MatchStatement', text: '}', subtree_size: 32}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 43}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'f' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ ├─ReturnType '->' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─MatchIntroducer 'match' +// CHECK:STDOUT: │ │ │ ╭─MatchConditionStart '(' +// CHECK:STDOUT: │ │ │ ├─BoolLiteralTrue 'true' +// CHECK:STDOUT: │ │ ├─MatchCondition ')' +// CHECK:STDOUT: │ │ ╭─MatchStatementStart '{' +// CHECK:STDOUT: │ │ │ ╭─MatchCaseIntroducer 'case' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─BoolTypeLiteral 'bool' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ │ │ ╭─MatchCaseGuardIntroducer 'if' +// CHECK:STDOUT: │ │ │ │ ├─MatchCaseGuardStart '(' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameExpr 'x' +// CHECK:STDOUT: │ │ │ │ │ ├─BoolLiteralFalse 'false' +// CHECK:STDOUT: │ │ │ │ ├─InfixOperatorEqualEqual '==' +// CHECK:STDOUT: │ │ │ ├─MatchCaseGuard '=>' has_error +// CHECK:STDOUT: │ │ │ ╭─MatchCase 'case' has_error +// CHECK:STDOUT: │ │ │ ╭─MatchHandlerStart 'case' has_error +// CHECK:STDOUT: │ │ ├─MatchHandler 'case' has_error +// CHECK:STDOUT: │ │ │ ╭─MatchCaseIntroducer 'case' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'z' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─BoolTypeLiteral 'bool' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ │ │ ╭─MatchCaseGuardIntroducer 'if' +// CHECK:STDOUT: │ │ │ │ ├─MatchCaseGuardStart 'true' has_error +// CHECK:STDOUT: │ │ │ │ ├─InvalidParse 'true' has_error +// CHECK:STDOUT: │ │ │ ├─MatchCaseGuard 'true' has_error +// CHECK:STDOUT: │ │ │ ╭─MatchCase 'true' has_error +// CHECK:STDOUT: │ │ │ ╭─MatchHandlerStart 'true' has_error +// CHECK:STDOUT: │ │ ├─MatchHandler 'true' has_error +// CHECK:STDOUT: │ ├─MatchStatement '}' +// CHECK:STDOUT: │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ ├─IntLiteral '0' +// CHECK:STDOUT: │ ├─ReturnStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/match/fail_missing_matched_expr.carbon b/toolchain/parse/testdata/match/fail_missing_matched_expr.carbon index 9426fc96796d..7cbac1b89eef 100644 --- a/toolchain/parse/testdata/match/fail_missing_matched_expr.carbon +++ b/toolchain/parse/testdata/match/fail_missing_matched_expr.carbon @@ -20,31 +20,30 @@ fn f() -> i32 { } // CHECK:STDOUT: - filename: fail_missing_matched_expr.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'f'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', 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}, -// CHECK:STDOUT: {kind: 'MatchIntroducer', text: 'match'}, -// CHECK:STDOUT: {kind: 'MatchConditionStart', text: 'match', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '{', has_error: yes}, -// CHECK:STDOUT: {kind: 'MatchCondition', text: 'match', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MatchStatementStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'MatchDefaultIntroducer', text: 'default'}, -// CHECK:STDOUT: {kind: 'MatchDefault', text: '=>', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'MatchHandlerStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '1'}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MatchHandler', text: '}', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'MatchStatement', text: '}', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 24}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'f' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ ├─ReturnType '->' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─MatchIntroducer 'match' +// CHECK:STDOUT: │ │ │ ╭─MatchConditionStart 'match' has_error +// CHECK:STDOUT: │ │ │ ├─InvalidParse '{' has_error +// CHECK:STDOUT: │ │ ├─MatchCondition 'match' has_error +// CHECK:STDOUT: │ │ ╭─MatchStatementStart '{' +// CHECK:STDOUT: │ │ │ ╭─MatchDefaultIntroducer 'default' +// CHECK:STDOUT: │ │ │ ╭─MatchDefault '=>' +// CHECK:STDOUT: │ │ │ ╭─MatchHandlerStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ │ │ ├─IntLiteral '1' +// CHECK:STDOUT: │ │ │ ├─ReturnStatement ';' +// CHECK:STDOUT: │ │ ├─MatchHandler '}' +// CHECK:STDOUT: │ ├─MatchStatement '}' +// CHECK:STDOUT: │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ ├─IntLiteral '0' +// CHECK:STDOUT: │ ├─ReturnStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/match/fail_unexpected_tokens_in_cases_block.carbon b/toolchain/parse/testdata/match/fail_unexpected_tokens_in_cases_block.carbon index ac1757e38d88..3ace8f9d6c8e 100644 --- a/toolchain/parse/testdata/match/fail_unexpected_tokens_in_cases_block.carbon +++ b/toolchain/parse/testdata/match/fail_unexpected_tokens_in_cases_block.carbon @@ -53,74 +53,73 @@ fn f() -> i32 { } // CHECK:STDOUT: - filename: fail_unexpected_tokens_in_cases_block.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'f'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', 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}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '3'}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'MatchIntroducer', text: 'match'}, -// CHECK:STDOUT: {kind: 'MatchConditionStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'x'}, -// CHECK:STDOUT: {kind: 'MatchCondition', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MatchStatementStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'MatchCaseIntroducer', text: 'case'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'MatchCaseGuardIntroducer', text: 'if'}, -// CHECK:STDOUT: {kind: 'MatchCaseGuardStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'y'}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '2'}, -// CHECK:STDOUT: {kind: 'InfixOperatorGreater', text: '>', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MatchCaseGuard', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'MatchCase', text: '=>', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'MatchHandlerStart', text: '{', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '1'}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MatchHandler', text: '}', subtree_size: 17}, -// CHECK:STDOUT: {kind: 'MatchCaseIntroducer', text: 'case'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'z'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'MatchCaseGuardIntroducer', text: 'if'}, -// CHECK:STDOUT: {kind: 'MatchCaseGuardStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'z'}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '3'}, -// CHECK:STDOUT: {kind: 'InfixOperatorEqualEqual', text: '==', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MatchCaseGuard', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'MatchCase', text: '=>', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'MatchHandlerStart', text: '{', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '3'}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MatchHandler', text: '}', subtree_size: 17}, -// CHECK:STDOUT: {kind: 'MatchDefaultIntroducer', text: 'default'}, -// CHECK:STDOUT: {kind: 'MatchDefault', text: '=>', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'MatchHandlerStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '3'}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MatchHandler', text: '}', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'MatchStatement', text: '}', has_error: yes, subtree_size: 47}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 67}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'f' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ ├─ReturnType '->' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ├─IntLiteral '3' +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: │ │ ╭─MatchIntroducer 'match' +// CHECK:STDOUT: │ │ │ ╭─MatchConditionStart '(' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'x' +// CHECK:STDOUT: │ │ ├─MatchCondition ')' +// CHECK:STDOUT: │ │ ╭─MatchStatementStart '{' +// CHECK:STDOUT: │ │ │ ╭─MatchCaseIntroducer 'case' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ │ │ ╭─MatchCaseGuardIntroducer 'if' +// CHECK:STDOUT: │ │ │ │ ├─MatchCaseGuardStart '(' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameExpr 'y' +// CHECK:STDOUT: │ │ │ │ │ ├─IntLiteral '2' +// CHECK:STDOUT: │ │ │ │ ├─InfixOperatorGreater '>' +// CHECK:STDOUT: │ │ │ ├─MatchCaseGuard ')' +// CHECK:STDOUT: │ │ │ ╭─MatchCase '=>' +// CHECK:STDOUT: │ │ │ ╭─MatchHandlerStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ │ │ ├─IntLiteral '1' +// CHECK:STDOUT: │ │ │ ├─ReturnStatement ';' +// CHECK:STDOUT: │ │ ├─MatchHandler '}' +// CHECK:STDOUT: │ │ │ ╭─MatchCaseIntroducer 'case' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'z' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ │ │ ╭─MatchCaseGuardIntroducer 'if' +// CHECK:STDOUT: │ │ │ │ ├─MatchCaseGuardStart '(' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameExpr 'z' +// CHECK:STDOUT: │ │ │ │ │ ├─IntLiteral '3' +// CHECK:STDOUT: │ │ │ │ ├─InfixOperatorEqualEqual '==' +// CHECK:STDOUT: │ │ │ ├─MatchCaseGuard ')' +// CHECK:STDOUT: │ │ │ ╭─MatchCase '=>' +// CHECK:STDOUT: │ │ │ ╭─MatchHandlerStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ │ │ ├─IntLiteral '3' +// CHECK:STDOUT: │ │ │ ├─ReturnStatement ';' +// CHECK:STDOUT: │ │ ├─MatchHandler '}' +// CHECK:STDOUT: │ │ │ ╭─MatchDefaultIntroducer 'default' +// CHECK:STDOUT: │ │ │ ╭─MatchDefault '=>' +// CHECK:STDOUT: │ │ │ ╭─MatchHandlerStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ │ │ ├─IntLiteral '3' +// CHECK:STDOUT: │ │ │ ├─ReturnStatement ';' +// CHECK:STDOUT: │ │ ├─MatchHandler '}' +// CHECK:STDOUT: │ ├─MatchStatement '}' has_error +// CHECK:STDOUT: │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ ├─IntLiteral '0' +// CHECK:STDOUT: │ ├─ReturnStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/match/match.carbon b/toolchain/parse/testdata/match/match.carbon index 09cbed2a7293..a0e8f9227a2a 100644 --- a/toolchain/parse/testdata/match/match.carbon +++ b/toolchain/parse/testdata/match/match.carbon @@ -20,97 +20,96 @@ fn f() -> i32 { } // CHECK:STDOUT: - filename: match.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'f'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', 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}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '3'}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'MatchIntroducer', text: 'match'}, -// CHECK:STDOUT: {kind: 'MatchConditionStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'f'}, -// CHECK:STDOUT: {kind: 'CallExprStart', text: '(', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'x'}, -// CHECK:STDOUT: {kind: 'CallExpr', text: ')', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'MatchCondition', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'MatchStatementStart', text: '{', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'MatchCaseIntroducer', text: 'case'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'MatchCase', text: '=>', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'MatchHandlerStart', text: '{', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MatchHandler', text: '}', subtree_size: 18}, -// CHECK:STDOUT: {kind: 'MatchCaseIntroducer', text: 'case'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ParenPattern', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'MatchCaseGuardIntroducer', text: 'if'}, -// CHECK:STDOUT: {kind: 'MatchCaseGuardStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'InfixOperatorLess', text: '<', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MatchCaseGuard', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'MatchCase', text: '=>', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'MatchHandlerStart', text: '{', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '2'}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MatchHandler', text: '}', subtree_size: 19}, -// CHECK:STDOUT: {kind: 'MatchCaseIntroducer', text: 'case'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'MatchCaseGuardIntroducer', text: 'if'}, -// CHECK:STDOUT: {kind: 'MatchCaseGuardStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'x'}, -// CHECK:STDOUT: {kind: 'InfixOperatorExclaimEqual', text: '!=', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MatchCaseGuard', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'MatchCase', text: '=>', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'MatchHandlerStart', text: '{', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '3'}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MatchHandler', text: '}', subtree_size: 17}, -// CHECK:STDOUT: {kind: 'MatchDefaultIntroducer', text: 'default'}, -// CHECK:STDOUT: {kind: 'MatchDefault', text: '=>', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'MatchHandlerStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '4'}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MatchHandler', text: '}', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'MatchStatement', text: '}', subtree_size: 70}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 90}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'f' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ ├─ReturnType '->' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ├─IntLiteral '3' +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: │ │ ╭─MatchIntroducer 'match' +// CHECK:STDOUT: │ │ │ ╭─MatchConditionStart '(' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameExpr 'f' +// CHECK:STDOUT: │ │ │ │ ╭─CallExprStart '(' +// CHECK:STDOUT: │ │ │ │ ├─IdentifierNameExpr 'x' +// CHECK:STDOUT: │ │ │ ├─CallExpr ')' +// CHECK:STDOUT: │ │ ├─MatchCondition ')' +// CHECK:STDOUT: │ │ ╭─MatchStatementStart '{' +// CHECK:STDOUT: │ │ │ ╭─MatchCaseIntroducer 'case' +// CHECK:STDOUT: │ │ │ │ ╭─TuplePatternStart '(' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ │ ├─TuplePattern ')' +// CHECK:STDOUT: │ │ │ ╭─MatchCase '=>' +// CHECK:STDOUT: │ │ │ ╭─MatchHandlerStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ │ │ ├─IntLiteral '0' +// CHECK:STDOUT: │ │ │ ├─ReturnStatement ';' +// CHECK:STDOUT: │ │ ├─MatchHandler '}' +// CHECK:STDOUT: │ │ │ ╭─MatchCaseIntroducer 'case' +// CHECK:STDOUT: │ │ │ │ ╭─TuplePatternStart '(' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ │ ├─ParenPattern ')' +// CHECK:STDOUT: │ │ │ │ ╭─MatchCaseGuardIntroducer 'if' +// CHECK:STDOUT: │ │ │ │ ├─MatchCaseGuardStart '(' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ │ │ │ ├─IntLiteral '0' +// CHECK:STDOUT: │ │ │ │ ├─InfixOperatorLess '<' +// CHECK:STDOUT: │ │ │ ├─MatchCaseGuard ')' +// CHECK:STDOUT: │ │ │ ╭─MatchCase '=>' +// CHECK:STDOUT: │ │ │ ╭─MatchHandlerStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ │ │ ├─IntLiteral '2' +// CHECK:STDOUT: │ │ │ ├─ReturnStatement ';' +// CHECK:STDOUT: │ │ ├─MatchHandler '}' +// CHECK:STDOUT: │ │ │ ╭─MatchCaseIntroducer 'case' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ │ │ ╭─MatchCaseGuardIntroducer 'if' +// CHECK:STDOUT: │ │ │ │ ├─MatchCaseGuardStart '(' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ │ │ │ ├─IdentifierNameExpr 'x' +// CHECK:STDOUT: │ │ │ │ ├─InfixOperatorExclaimEqual '!=' +// CHECK:STDOUT: │ │ │ ├─MatchCaseGuard ')' +// CHECK:STDOUT: │ │ │ ╭─MatchCase '=>' +// CHECK:STDOUT: │ │ │ ╭─MatchHandlerStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ │ │ ├─IntLiteral '3' +// CHECK:STDOUT: │ │ │ ├─ReturnStatement ';' +// CHECK:STDOUT: │ │ ├─MatchHandler '}' +// CHECK:STDOUT: │ │ │ ╭─MatchDefaultIntroducer 'default' +// CHECK:STDOUT: │ │ │ ╭─MatchDefault '=>' +// CHECK:STDOUT: │ │ │ ╭─MatchHandlerStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ │ │ ├─IntLiteral '4' +// CHECK:STDOUT: │ │ │ ├─ReturnStatement ';' +// CHECK:STDOUT: │ │ ├─MatchHandler '}' +// CHECK:STDOUT: │ ├─MatchStatement '}' +// CHECK:STDOUT: │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ ├─IntLiteral '0' +// CHECK:STDOUT: │ ├─ReturnStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/member_access/compound.carbon b/toolchain/parse/testdata/member_access/compound.carbon index 1b8c54c2dbfa..96a8ef29fbc9 100644 --- a/toolchain/parse/testdata/member_access/compound.carbon +++ b/toolchain/parse/testdata/member_access/compound.carbon @@ -14,25 +14,24 @@ fn F() { } // CHECK:STDOUT: - filename: compound.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'ParenExprStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'ParenExpr', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'ParenExprStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'ParenExpr', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'PointerMemberAccessExpr', text: '->', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 18}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ │ ╭─ParenExprStart '(' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'b' +// CHECK:STDOUT: │ │ ├─ParenExpr ')' +// CHECK:STDOUT: │ │ ╭─MemberAccessExpr '.' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ │ ╭─ParenExprStart '(' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'b' +// CHECK:STDOUT: │ │ ├─ParenExpr ')' +// CHECK:STDOUT: │ │ ╭─PointerMemberAccessExpr '->' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/member_access/fail_keyword.carbon b/toolchain/parse/testdata/member_access/fail_keyword.carbon index f4de7870c932..3d8619f3cc48 100644 --- a/toolchain/parse/testdata/member_access/fail_keyword.carbon +++ b/toolchain/parse/testdata/member_access/fail_keyword.carbon @@ -42,37 +42,36 @@ fn F() { } // CHECK:STDOUT: - filename: fail_keyword.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'self'}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Self'}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'for'}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'p'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'self'}, -// CHECK:STDOUT: {kind: 'PointerMemberAccessExpr', text: '->', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'p'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Self'}, -// CHECK:STDOUT: {kind: 'PointerMemberAccessExpr', text: '->', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'p'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'while'}, -// CHECK:STDOUT: {kind: 'PointerMemberAccessExpr', text: '->', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 30}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'self' +// CHECK:STDOUT: │ │ ╭─MemberAccessExpr '.' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'Self' +// CHECK:STDOUT: │ │ ╭─MemberAccessExpr '.' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'for' +// CHECK:STDOUT: │ │ ╭─MemberAccessExpr '.' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'p' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'self' +// CHECK:STDOUT: │ │ ╭─PointerMemberAccessExpr '->' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'p' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'Self' +// CHECK:STDOUT: │ │ ╭─PointerMemberAccessExpr '->' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'p' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'while' +// CHECK:STDOUT: │ │ ╭─PointerMemberAccessExpr '->' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/member_access/keyword.carbon b/toolchain/parse/testdata/member_access/keyword.carbon index 7023f7f1f1aa..9669db8cfe70 100644 --- a/toolchain/parse/testdata/member_access/keyword.carbon +++ b/toolchain/parse/testdata/member_access/keyword.carbon @@ -14,21 +14,20 @@ fn F() { } // CHECK:STDOUT: - filename: keyword.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'BaseName', text: 'base'}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'p'}, -// CHECK:STDOUT: {kind: 'BaseName', text: 'base'}, -// CHECK:STDOUT: {kind: 'PointerMemberAccessExpr', text: '->', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ├─BaseName 'base' +// CHECK:STDOUT: │ │ ╭─MemberAccessExpr '.' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'p' +// CHECK:STDOUT: │ │ ├─BaseName 'base' +// CHECK:STDOUT: │ │ ╭─PointerMemberAccessExpr '->' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/member_access/simple.carbon b/toolchain/parse/testdata/member_access/simple.carbon index a0d6ae8dc2ed..2d48396e78bd 100644 --- a/toolchain/parse/testdata/member_access/simple.carbon +++ b/toolchain/parse/testdata/member_access/simple.carbon @@ -16,37 +16,36 @@ fn F(a: T) { } // CHECK:STDOUT: - filename: simple.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'T'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'PointerMemberAccessExpr', text: '->', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'PointerMemberAccessExpr', text: '->', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'PointerMemberAccessExpr', text: '->', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 30}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'T' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ╭─MemberAccessExpr '.' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ╭─PointerMemberAccessExpr '->' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ╭─MemberAccessExpr '.' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ ╭─PointerMemberAccessExpr '->' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ╭─PointerMemberAccessExpr '->' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ ╭─MemberAccessExpr '.' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/namespace/args.carbon b/toolchain/parse/testdata/namespace/args.carbon index 1c5036915ac8..21a8fbaec89a 100644 --- a/toolchain/parse/testdata/namespace/args.carbon +++ b/toolchain/parse/testdata/namespace/args.carbon @@ -12,12 +12,11 @@ namespace Foo(); // CHECK:STDOUT: - filename: args.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'NamespaceStart', text: 'namespace'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'Namespace', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─NamespaceStart 'namespace' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'Foo' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─Namespace ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/namespace/basic.carbon b/toolchain/parse/testdata/namespace/basic.carbon index dd5db7bb9b12..097890d45ed7 100644 --- a/toolchain/parse/testdata/namespace/basic.carbon +++ b/toolchain/parse/testdata/namespace/basic.carbon @@ -15,22 +15,21 @@ fn Bar() { } // CHECK:STDOUT: - filename: basic.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'NamespaceStart', text: 'namespace'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'Namespace', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Bar'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Baz'}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'CallExprStart', text: '(', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'CallExpr', text: ')', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─NamespaceStart 'namespace' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Foo' +// CHECK:STDOUT: ├─Namespace ';' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'Bar' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'Foo' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'Baz' +// CHECK:STDOUT: │ │ ╭─MemberAccessExpr '.' +// CHECK:STDOUT: │ │ ╭─CallExprStart '(' +// CHECK:STDOUT: │ │ ╭─CallExpr ')' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/namespace/fail_arrow.carbon b/toolchain/parse/testdata/namespace/fail_arrow.carbon index 553eb5964f77..1da65029b3cf 100644 --- a/toolchain/parse/testdata/namespace/fail_arrow.carbon +++ b/toolchain/parse/testdata/namespace/fail_arrow.carbon @@ -17,13 +17,12 @@ namespace Foo; class Foo->Bar {} // CHECK:STDOUT: - filename: fail_arrow.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'NamespaceStart', text: 'namespace'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'Namespace', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'ClassDecl', text: '}', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─NamespaceStart 'namespace' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Foo' +// CHECK:STDOUT: ├─Namespace ';' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'Foo' +// CHECK:STDOUT: ├─ClassDecl '}' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/namespace/fail_incomplete.carbon b/toolchain/parse/testdata/namespace/fail_incomplete.carbon index 3fc65854e5e3..c496484d53f7 100644 --- a/toolchain/parse/testdata/namespace/fail_incomplete.carbon +++ b/toolchain/parse/testdata/namespace/fail_incomplete.carbon @@ -45,25 +45,24 @@ namespace namespace namespace namespace namespace namespace // CHECK:STDOUT: - filename: fail_incomplete.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'NamespaceStart', text: 'namespace'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '123', has_error: yes}, -// CHECK:STDOUT: {kind: 'Namespace', text: '123', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'NamespaceStart', text: 'namespace'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '""', has_error: yes}, -// CHECK:STDOUT: {kind: 'Namespace', text: '""', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'NamespaceStart', text: 'namespace'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '+', has_error: yes}, -// CHECK:STDOUT: {kind: 'Namespace', text: '+', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'NamespaceStart', text: 'namespace'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: 'bool', has_error: yes}, -// CHECK:STDOUT: {kind: 'Namespace', text: 'bool', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'NamespaceStart', text: 'namespace'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: 'namespace', has_error: yes}, -// CHECK:STDOUT: {kind: 'Namespace', text: 'namespace', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'NamespaceStart', text: 'namespace'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '', has_error: yes}, -// CHECK:STDOUT: {kind: 'Namespace', text: 'namespace', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─NamespaceStart 'namespace' +// CHECK:STDOUT: │ ├─InvalidParse '123' has_error +// CHECK:STDOUT: ├─Namespace '123' has_error +// CHECK:STDOUT: │ ╭─NamespaceStart 'namespace' +// CHECK:STDOUT: │ ├─InvalidParse '""' has_error +// CHECK:STDOUT: ├─Namespace '""' has_error +// CHECK:STDOUT: │ ╭─NamespaceStart 'namespace' +// CHECK:STDOUT: │ ├─InvalidParse '+' has_error +// CHECK:STDOUT: ├─Namespace '+' has_error +// CHECK:STDOUT: │ ╭─NamespaceStart 'namespace' +// CHECK:STDOUT: │ ├─InvalidParse 'bool' has_error +// CHECK:STDOUT: ├─Namespace 'bool' has_error +// CHECK:STDOUT: │ ╭─NamespaceStart 'namespace' +// CHECK:STDOUT: │ ├─InvalidParse 'namespace' has_error +// CHECK:STDOUT: ├─Namespace 'namespace' has_error +// CHECK:STDOUT: │ ╭─NamespaceStart 'namespace' +// CHECK:STDOUT: │ ├─InvalidParse '' has_error +// CHECK:STDOUT: ├─Namespace 'namespace' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/namespace/fail_incomplete_name.carbon b/toolchain/parse/testdata/namespace/fail_incomplete_name.carbon index 7fb6c5ecbf76..602460afddd4 100644 --- a/toolchain/parse/testdata/namespace/fail_incomplete_name.carbon +++ b/toolchain/parse/testdata/namespace/fail_incomplete_name.carbon @@ -15,12 +15,11 @@ namespace Foo.; // CHECK:STDOUT: - filename: fail_incomplete_name.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'NamespaceStart', text: 'namespace'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'IdentifierNameQualifierWithoutParams', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ';', has_error: yes}, -// CHECK:STDOUT: {kind: 'Namespace', text: ';', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─NamespaceStart 'namespace' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'Foo' +// CHECK:STDOUT: │ ├─IdentifierNameQualifierWithoutParams '.' +// CHECK:STDOUT: │ ├─InvalidParse ';' has_error +// CHECK:STDOUT: ├─Namespace ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/namespace/fail_modifiers.carbon b/toolchain/parse/testdata/namespace/fail_modifiers.carbon index 989c1a2c6abb..203c1684f972 100644 --- a/toolchain/parse/testdata/namespace/fail_modifiers.carbon +++ b/toolchain/parse/testdata/namespace/fail_modifiers.carbon @@ -17,11 +17,10 @@ virtual namespace B impl namespace // CHECK:STDOUT: - filename: fail_modifiers.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'NamespaceStart', text: 'namespace'}, -// CHECK:STDOUT: {kind: 'VirtualModifier', text: 'virtual'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'B'}, -// CHECK:STDOUT: {kind: 'Namespace', text: 'namespace', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─NamespaceStart 'namespace' +// CHECK:STDOUT: │ ├─VirtualModifier 'virtual' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'B' +// CHECK:STDOUT: ├─Namespace 'namespace' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/namespace/fail_no_name.carbon b/toolchain/parse/testdata/namespace/fail_no_name.carbon index 53cd52a63818..dc916d71691b 100644 --- a/toolchain/parse/testdata/namespace/fail_no_name.carbon +++ b/toolchain/parse/testdata/namespace/fail_no_name.carbon @@ -15,10 +15,9 @@ namespace; // CHECK:STDOUT: - filename: fail_no_name.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'NamespaceStart', text: 'namespace'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ';', has_error: yes}, -// CHECK:STDOUT: {kind: 'Namespace', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─NamespaceStart 'namespace' +// CHECK:STDOUT: │ ├─InvalidParse ';' has_error +// CHECK:STDOUT: ├─Namespace ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/namespace/local.carbon b/toolchain/parse/testdata/namespace/local.carbon index ae3235ce64c2..c23dc139a3ac 100644 --- a/toolchain/parse/testdata/namespace/local.carbon +++ b/toolchain/parse/testdata/namespace/local.carbon @@ -14,16 +14,15 @@ fn F() { } // CHECK:STDOUT: - filename: local.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'NamespaceStart', text: 'namespace'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'N'}, -// CHECK:STDOUT: {kind: 'Namespace', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─NamespaceStart 'namespace' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'N' +// CHECK:STDOUT: │ ├─Namespace ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/namespace/modifiers.carbon b/toolchain/parse/testdata/namespace/modifiers.carbon index 6499e46fe385..e325323c752d 100644 --- a/toolchain/parse/testdata/namespace/modifiers.carbon +++ b/toolchain/parse/testdata/namespace/modifiers.carbon @@ -13,20 +13,19 @@ private extern abstract base default final namespace Foo; impl namespace Foo; // CHECK:STDOUT: - filename: modifiers.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'NamespaceStart', text: 'namespace'}, -// CHECK:STDOUT: {kind: 'PrivateModifier', text: 'private'}, -// CHECK:STDOUT: {kind: 'ExternModifier', text: 'extern'}, -// CHECK:STDOUT: {kind: 'AbstractModifier', text: 'abstract'}, -// CHECK:STDOUT: {kind: 'BaseModifier', text: 'base'}, -// CHECK:STDOUT: {kind: 'DefaultModifier', text: 'default'}, -// CHECK:STDOUT: {kind: 'FinalModifier', text: 'final'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'Namespace', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'NamespaceStart', text: 'namespace'}, -// CHECK:STDOUT: {kind: 'ImplModifier', text: 'impl'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'Namespace', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─NamespaceStart 'namespace' +// CHECK:STDOUT: │ ├─PrivateModifier 'private' +// CHECK:STDOUT: │ ├─ExternModifier 'extern' +// CHECK:STDOUT: │ ├─AbstractModifier 'abstract' +// CHECK:STDOUT: │ ├─BaseModifier 'base' +// CHECK:STDOUT: │ ├─DefaultModifier 'default' +// CHECK:STDOUT: │ ├─FinalModifier 'final' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Foo' +// CHECK:STDOUT: ├─Namespace ';' +// CHECK:STDOUT: │ ╭─NamespaceStart 'namespace' +// CHECK:STDOUT: │ ├─ImplModifier 'impl' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Foo' +// CHECK:STDOUT: ├─Namespace ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/namespace/nested.carbon b/toolchain/parse/testdata/namespace/nested.carbon index 4d47f8bc68d1..3f4631a079d6 100644 --- a/toolchain/parse/testdata/namespace/nested.carbon +++ b/toolchain/parse/testdata/namespace/nested.carbon @@ -16,33 +16,32 @@ fn Foo.Bar.Baz() { } // CHECK:STDOUT: - filename: nested.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'NamespaceStart', text: 'namespace'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'Namespace', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'NamespaceStart', text: 'namespace'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'IdentifierNameQualifierWithoutParams', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Bar'}, -// CHECK:STDOUT: {kind: 'Namespace', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'IdentifierNameQualifierWithoutParams', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Bar'}, -// CHECK:STDOUT: {kind: 'IdentifierNameQualifierWithoutParams', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Baz'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Bar'}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Wiz'}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'CallExprStart', text: '(', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'CallExpr', text: ')', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 18}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─NamespaceStart 'namespace' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Foo' +// CHECK:STDOUT: ├─Namespace ';' +// CHECK:STDOUT: │ ╭─NamespaceStart 'namespace' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'Foo' +// CHECK:STDOUT: │ ├─IdentifierNameQualifierWithoutParams '.' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Bar' +// CHECK:STDOUT: ├─Namespace ';' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'Foo' +// CHECK:STDOUT: │ ├─IdentifierNameQualifierWithoutParams '.' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'Bar' +// CHECK:STDOUT: │ ├─IdentifierNameQualifierWithoutParams '.' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'Baz' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'Foo' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'Bar' +// CHECK:STDOUT: │ │ ╭─MemberAccessExpr '.' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'Wiz' +// CHECK:STDOUT: │ │ ╭─MemberAccessExpr '.' +// CHECK:STDOUT: │ │ ╭─CallExprStart '(' +// CHECK:STDOUT: │ │ ╭─CallExpr ')' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/observe/fail_invalid_operator.carbon b/toolchain/parse/testdata/observe/fail_invalid_operator.carbon index c9e61e974384..749edcfea82a 100644 --- a/toolchain/parse/testdata/observe/fail_invalid_operator.carbon +++ b/toolchain/parse/testdata/observe/fail_invalid_operator.carbon @@ -15,10 +15,9 @@ observe T = U impls I; // CHECK:STDOUT: - filename: fail_invalid_operator.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ObserveIntroducer', text: 'observe'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'T'}, -// CHECK:STDOUT: {kind: 'ObserveDecl', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ObserveIntroducer 'observe' +// CHECK:STDOUT: │ ├─IdentifierNameExpr 'T' +// CHECK:STDOUT: ├─ObserveDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/observe/fail_missing_expr.carbon b/toolchain/parse/testdata/observe/fail_missing_expr.carbon index bd3b1f794962..9cea1469871f 100644 --- a/toolchain/parse/testdata/observe/fail_missing_expr.carbon +++ b/toolchain/parse/testdata/observe/fail_missing_expr.carbon @@ -33,30 +33,27 @@ observe T impls ; observe T ; // CHECK:STDOUT: - filename: fail_missing_expr_after_observe.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ObserveIntroducer', text: 'observe'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: 'impls', has_error: yes}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'I'}, -// CHECK:STDOUT: {kind: 'ObserveImpls', text: 'impls', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ObserveDecl', text: ';', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ObserveIntroducer 'observe' +// CHECK:STDOUT: │ │ ╭─InvalidParse 'impls' has_error +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'I' +// CHECK:STDOUT: │ ├─ObserveImpls 'impls' has_error +// CHECK:STDOUT: ├─ObserveDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_missing_expr_after_impls.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ObserveIntroducer', text: 'observe'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'T'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ';', has_error: yes}, -// CHECK:STDOUT: {kind: 'ObserveImpls', text: 'impls', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ObserveDecl', text: ';', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ObserveIntroducer 'observe' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'T' +// CHECK:STDOUT: │ │ ├─InvalidParse ';' has_error +// CHECK:STDOUT: │ ├─ObserveImpls 'impls' has_error +// CHECK:STDOUT: ├─ObserveDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_missing_impls.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ObserveIntroducer', text: 'observe'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'T'}, -// CHECK:STDOUT: {kind: 'ObserveDecl', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ObserveIntroducer 'observe' +// CHECK:STDOUT: │ ├─IdentifierNameExpr 'T' +// CHECK:STDOUT: ├─ObserveDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/observe/observe.carbon b/toolchain/parse/testdata/observe/observe.carbon index fd4afcc5ae50..0dede736497a 100644 --- a/toolchain/parse/testdata/observe/observe.carbon +++ b/toolchain/parse/testdata/observe/observe.carbon @@ -32,72 +32,68 @@ interface I { } // CHECK:STDOUT: - filename: base.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ObserveIntroducer', text: 'observe'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'A'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'B'}, -// CHECK:STDOUT: {kind: 'ObserveEqualEqual', text: '==', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'C'}, -// CHECK:STDOUT: {kind: 'ObserveEqualEqual', text: '==', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ObserveDecl', text: ';', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ObserveIntroducer 'observe' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'A' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'B' +// CHECK:STDOUT: │ │ ╭─ObserveEqualEqual '==' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'C' +// CHECK:STDOUT: │ ├─ObserveEqualEqual '==' +// CHECK:STDOUT: ├─ObserveDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: impls.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ObserveIntroducer', text: 'observe'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'T'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'I'}, -// CHECK:STDOUT: {kind: 'ObserveImpls', text: 'impls', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ObserveDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ObserveIntroducer 'observe' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'T' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'I' +// CHECK:STDOUT: │ ├─ObserveImpls 'impls' +// CHECK:STDOUT: ├─ObserveDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: equal_equal_impls.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ObserveIntroducer', text: 'observe'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'T'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'U'}, -// CHECK:STDOUT: {kind: 'ObserveEqualEqual', text: '==', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'I'}, -// CHECK:STDOUT: {kind: 'ObserveImpls', text: 'impls', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ObserveDecl', text: ';', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ObserveIntroducer', text: 'observe'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'A'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'B'}, -// CHECK:STDOUT: {kind: 'ObserveEqualEqual', text: '==', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'C'}, -// CHECK:STDOUT: {kind: 'ObserveEqualEqual', text: '==', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'D'}, -// CHECK:STDOUT: {kind: 'ObserveEqualEqual', text: '==', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'I'}, -// CHECK:STDOUT: {kind: 'ObserveImpls', text: 'impls', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'ObserveDecl', text: ';', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ObserveIntroducer 'observe' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'T' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'U' +// CHECK:STDOUT: │ │ ╭─ObserveEqualEqual '==' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'I' +// CHECK:STDOUT: │ ├─ObserveImpls 'impls' +// CHECK:STDOUT: ├─ObserveDecl ';' +// CHECK:STDOUT: │ ╭─ObserveIntroducer 'observe' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'A' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'B' +// CHECK:STDOUT: │ │ ╭─ObserveEqualEqual '==' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'C' +// CHECK:STDOUT: │ │ ╭─ObserveEqualEqual '==' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'D' +// CHECK:STDOUT: │ │ ╭─ObserveEqualEqual '==' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'I' +// CHECK:STDOUT: │ ├─ObserveImpls 'impls' +// CHECK:STDOUT: ├─ObserveDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: statement.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ObserveIntroducer', text: 'observe'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'A'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'B'}, -// CHECK:STDOUT: {kind: 'ObserveEqualEqual', text: '==', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ObserveDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'I'}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ObserveIntroducer', text: 'observe'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'A'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'B'}, -// CHECK:STDOUT: {kind: 'ObserveEqualEqual', text: '==', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ObserveDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─ObserveIntroducer 'observe' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'A' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'B' +// CHECK:STDOUT: │ │ ├─ObserveEqualEqual '==' +// CHECK:STDOUT: │ ├─ObserveDecl ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'I' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─ObserveIntroducer 'observe' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'A' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'B' +// CHECK:STDOUT: │ │ ├─ObserveEqualEqual '==' +// CHECK:STDOUT: │ ├─ObserveDecl ';' +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/assign.carbon b/toolchain/parse/testdata/operators/assign.carbon index 22c9a36db3ed..532a7c20f88a 100644 --- a/toolchain/parse/testdata/operators/assign.carbon +++ b/toolchain/parse/testdata/operators/assign.carbon @@ -27,81 +27,80 @@ fn F() { } // CHECK:STDOUT: - filename: assign.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '1'}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'InfixOperatorEqual', text: '=', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'InfixOperatorStarEqual', text: '*=', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'InfixOperatorSlashEqual', text: '/=', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'InfixOperatorPlusEqual', text: '+=', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'InfixOperatorMinusEqual', text: '-=', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'InfixOperatorPercentEqual', text: '%=', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'InfixOperatorAmpEqual', text: '&=', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'InfixOperatorPipeEqual', text: '|=', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'InfixOperatorCaretEqual', text: '^=', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'InfixOperatorLessLessEqual', text: '<<=', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'InfixOperatorGreaterGreaterEqual', text: '>>=', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorPlusPlus', text: '++', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorMinusMinus', text: '--', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 74}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ├─IntLiteral '0' +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ├─IntLiteral '1' +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'b' +// CHECK:STDOUT: │ │ ╭─InfixOperatorEqual '=' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'b' +// CHECK:STDOUT: │ │ ╭─InfixOperatorStarEqual '*=' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'b' +// CHECK:STDOUT: │ │ ╭─InfixOperatorSlashEqual '/=' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'b' +// CHECK:STDOUT: │ │ ╭─InfixOperatorPlusEqual '+=' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'b' +// CHECK:STDOUT: │ │ ╭─InfixOperatorMinusEqual '-=' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'b' +// CHECK:STDOUT: │ │ ╭─InfixOperatorPercentEqual '%=' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'b' +// CHECK:STDOUT: │ │ ╭─InfixOperatorAmpEqual '&=' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'b' +// CHECK:STDOUT: │ │ ╭─InfixOperatorPipeEqual '|=' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'b' +// CHECK:STDOUT: │ │ ╭─InfixOperatorCaretEqual '^=' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'b' +// CHECK:STDOUT: │ │ ╭─InfixOperatorLessLessEqual '<<=' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'b' +// CHECK:STDOUT: │ │ ╭─InfixOperatorGreaterGreaterEqual '>>=' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ╭─PrefixOperatorPlusPlus '++' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ╭─PrefixOperatorMinusMinus '--' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/associative.carbon b/toolchain/parse/testdata/operators/associative.carbon index e0b496706c3d..24634f72866e 100644 --- a/toolchain/parse/testdata/operators/associative.carbon +++ b/toolchain/parse/testdata/operators/associative.carbon @@ -13,21 +13,20 @@ fn F() { } // CHECK:STDOUT: - filename: associative.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'ShortCircuitOperandAnd', text: 'and', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'ShortCircuitOperatorAnd', text: 'and', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ShortCircuitOperandAnd', text: 'and', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'c'}, -// CHECK:STDOUT: {kind: 'ShortCircuitOperatorAnd', text: 'and', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ╭─ShortCircuitOperandAnd 'and' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'b' +// CHECK:STDOUT: │ │ ╭─ShortCircuitOperatorAnd 'and' +// CHECK:STDOUT: │ │ ╭─ShortCircuitOperandAnd 'and' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'c' +// CHECK:STDOUT: │ │ ╭─ShortCircuitOperatorAnd 'and' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/fail_chained_assign.carbon b/toolchain/parse/testdata/operators/fail_chained_assign.carbon index 56587f0466c3..87280f1410c7 100644 --- a/toolchain/parse/testdata/operators/fail_chained_assign.carbon +++ b/toolchain/parse/testdata/operators/fail_chained_assign.carbon @@ -21,33 +21,32 @@ fn F() { } // CHECK:STDOUT: - filename: fail_chained_assign.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'InfixOperatorEqual', text: '=', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '1'}, -// CHECK:STDOUT: {kind: 'InfixOperatorEqual', text: '=', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 26}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'b' +// CHECK:STDOUT: │ │ ╭─InfixOperatorEqual '=' +// CHECK:STDOUT: │ │ ├─IntLiteral '1' +// CHECK:STDOUT: │ │ ╭─InfixOperatorEqual '=' has_error +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/fail_infix_uneven_space_after.carbon b/toolchain/parse/testdata/operators/fail_infix_uneven_space_after.carbon index 4b938bbb18bf..194e27295c05 100644 --- a/toolchain/parse/testdata/operators/fail_infix_uneven_space_after.carbon +++ b/toolchain/parse/testdata/operators/fail_infix_uneven_space_after.carbon @@ -17,17 +17,16 @@ var n: i8 = n* n; // CHECK:STDOUT: - filename: fail_infix_uneven_space_after.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'n'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i8'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', has_error: yes, subtree_size: 10}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'n' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i8' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ ├─PostfixOperatorStar '*' +// CHECK:STDOUT: ├─VariableDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/fail_infix_uneven_space_before.carbon b/toolchain/parse/testdata/operators/fail_infix_uneven_space_before.carbon index edf4d4297464..e6f13a293c30 100644 --- a/toolchain/parse/testdata/operators/fail_infix_uneven_space_before.carbon +++ b/toolchain/parse/testdata/operators/fail_infix_uneven_space_before.carbon @@ -15,18 +15,17 @@ var n: i8 = n *n; // CHECK:STDOUT: - filename: fail_infix_uneven_space_before.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'n'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i8'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'InfixOperatorStar', text: '*', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'n' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i8' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ ├─InfixOperatorStar '*' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/fail_invalid_infix.carbon b/toolchain/parse/testdata/operators/fail_invalid_infix.carbon index 690f0d6fc95d..1701cdadf854 100644 --- a/toolchain/parse/testdata/operators/fail_invalid_infix.carbon +++ b/toolchain/parse/testdata/operators/fail_invalid_infix.carbon @@ -29,40 +29,39 @@ var b: i32 = == n; var c: i32 = == ; // CHECK:STDOUT: - filename: fail_invalid_infix.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ';', has_error: yes}, -// CHECK:STDOUT: {kind: 'InfixOperatorEqualEqual', text: '==', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '==', has_error: yes}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'InfixOperatorEqualEqual', text: '==', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'c'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '==', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ';', has_error: yes}, -// CHECK:STDOUT: {kind: 'InfixOperatorEqualEqual', text: '==', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ │ ├─InvalidParse ';' has_error +// CHECK:STDOUT: │ ├─InfixOperatorEqualEqual '==' has_error +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─InvalidParse '==' has_error +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ ├─InfixOperatorEqualEqual '==' has_error +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'c' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─InvalidParse '==' has_error +// CHECK:STDOUT: │ │ ├─InvalidParse ';' has_error +// CHECK:STDOUT: │ ├─InfixOperatorEqualEqual '==' has_error +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/fail_postfix_space.carbon b/toolchain/parse/testdata/operators/fail_postfix_space.carbon index 96fde3a204ae..5479b3dac3a9 100644 --- a/toolchain/parse/testdata/operators/fail_postfix_space.carbon +++ b/toolchain/parse/testdata/operators/fail_postfix_space.carbon @@ -15,17 +15,16 @@ var v: type = i8 *; // CHECK:STDOUT: - filename: fail_postfix_space.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'v'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i8'}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'v' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─TypeTypeLiteral 'type' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─IntTypeLiteral 'i8' +// CHECK:STDOUT: │ ├─PostfixOperatorStar '*' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/fail_postfix_space_before_comma.carbon b/toolchain/parse/testdata/operators/fail_postfix_space_before_comma.carbon index b4d1461c7756..9628615b5f3a 100644 --- a/toolchain/parse/testdata/operators/fail_postfix_space_before_comma.carbon +++ b/toolchain/parse/testdata/operators/fail_postfix_space_before_comma.carbon @@ -15,22 +15,21 @@ var n: i8 = F(i8 *, 0); // CHECK:STDOUT: - filename: fail_postfix_space_before_comma.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'n'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i8'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'F'}, -// CHECK:STDOUT: {kind: 'CallExprStart', text: '(', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i8'}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'TupleLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'CallExpr', text: ')', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'n' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i8' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'F' +// CHECK:STDOUT: │ │ ╭─CallExprStart '(' +// CHECK:STDOUT: │ │ │ ╭─IntTypeLiteral 'i8' +// CHECK:STDOUT: │ │ ├─PostfixOperatorStar '*' +// CHECK:STDOUT: │ │ ├─TupleLiteralComma ',' +// CHECK:STDOUT: │ │ ├─IntLiteral '0' +// CHECK:STDOUT: │ ├─CallExpr ')' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/fail_postfix_space_in_call.carbon b/toolchain/parse/testdata/operators/fail_postfix_space_in_call.carbon index 4d73180aa9db..39c094ee310e 100644 --- a/toolchain/parse/testdata/operators/fail_postfix_space_in_call.carbon +++ b/toolchain/parse/testdata/operators/fail_postfix_space_in_call.carbon @@ -15,20 +15,19 @@ var n: i8 = F(i8 *); // CHECK:STDOUT: - filename: fail_postfix_space_in_call.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'n'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i8'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'F'}, -// CHECK:STDOUT: {kind: 'CallExprStart', text: '(', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i8'}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'CallExpr', text: ')', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'n' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i8' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'F' +// CHECK:STDOUT: │ │ ╭─CallExprStart '(' +// CHECK:STDOUT: │ │ │ ╭─IntTypeLiteral 'i8' +// CHECK:STDOUT: │ │ ├─PostfixOperatorStar '*' +// CHECK:STDOUT: │ ├─CallExpr ')' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/fail_postfix_space_surrounding.carbon b/toolchain/parse/testdata/operators/fail_postfix_space_surrounding.carbon index 62f590fa778f..ed9b4ec982c5 100644 --- a/toolchain/parse/testdata/operators/fail_postfix_space_surrounding.carbon +++ b/toolchain/parse/testdata/operators/fail_postfix_space_surrounding.carbon @@ -15,17 +15,16 @@ var v: type = i8 * ; // CHECK:STDOUT: - filename: fail_postfix_space_surrounding.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'v'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i8'}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'v' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─TypeTypeLiteral 'type' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─IntTypeLiteral 'i8' +// CHECK:STDOUT: │ ├─PostfixOperatorStar '*' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/fail_postincrement.carbon b/toolchain/parse/testdata/operators/fail_postincrement.carbon index bc45a55e9c25..81efb36be9a9 100644 --- a/toolchain/parse/testdata/operators/fail_postincrement.carbon +++ b/toolchain/parse/testdata/operators/fail_postincrement.carbon @@ -24,26 +24,25 @@ fn F() { } // CHECK:STDOUT: - filename: fail_postincrement.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'n'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 19}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'n' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ├─IntLiteral '0' +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ ├─ExprStatement ';' has_error +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ ├─ExprStatement ';' has_error +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/fail_precedence_and_or.carbon b/toolchain/parse/testdata/operators/fail_precedence_and_or.carbon index 51908e17f3cd..fa0206819ca5 100644 --- a/toolchain/parse/testdata/operators/fail_precedence_and_or.carbon +++ b/toolchain/parse/testdata/operators/fail_precedence_and_or.carbon @@ -17,21 +17,20 @@ fn F() { } // CHECK:STDOUT: - filename: fail_precedence_and_or.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'ShortCircuitOperandAnd', text: 'and', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'ShortCircuitOperatorAnd', text: 'and', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ShortCircuitOperandOr', text: 'or', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'c'}, -// CHECK:STDOUT: {kind: 'ShortCircuitOperatorOr', text: 'or', has_error: yes, subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ╭─ShortCircuitOperandAnd 'and' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'b' +// CHECK:STDOUT: │ │ ╭─ShortCircuitOperatorAnd 'and' +// CHECK:STDOUT: │ │ ╭─ShortCircuitOperandOr 'or' has_error +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'c' +// CHECK:STDOUT: │ │ ╭─ShortCircuitOperatorOr 'or' has_error +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/fail_precedence_as.carbon b/toolchain/parse/testdata/operators/fail_precedence_as.carbon index 523a48175e52..930142d0adfc 100644 --- a/toolchain/parse/testdata/operators/fail_precedence_as.carbon +++ b/toolchain/parse/testdata/operators/fail_precedence_as.carbon @@ -54,60 +54,59 @@ fn F(n: i32) { } // CHECK:STDOUT: - filename: fail_precedence_as.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'n'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'BoolLiteralTrue', text: 'true'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorNot', text: 'not', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'BoolTypeLiteral', text: 'bool'}, -// CHECK:STDOUT: {kind: 'InfixOperatorAs', text: 'as', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '1'}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '1'}, -// CHECK:STDOUT: {kind: 'InfixOperatorPlus', text: '+', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'InfixOperatorAs', text: 'as', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '5'}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '2'}, -// CHECK:STDOUT: {kind: 'InfixOperatorPercent', text: '%', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'InfixOperatorAs', text: 'as', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '3'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'InfixOperatorAs', text: 'as', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ShortCircuitOperandAnd', text: 'and', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'BoolLiteralTrue', text: 'true'}, -// CHECK:STDOUT: {kind: 'ShortCircuitOperatorAnd', text: 'and', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'BoolLiteralFalse', text: 'false'}, -// CHECK:STDOUT: {kind: 'ShortCircuitOperandOr', text: 'or', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '4'}, -// CHECK:STDOUT: {kind: 'ShortCircuitOperatorOr', text: 'or', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'InfixOperatorAs', text: 'as', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '6'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'InfixOperatorAs', text: 'as', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '7'}, -// CHECK:STDOUT: {kind: 'InfixOperatorEqualEqual', text: '==', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '8'}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '9'}, -// CHECK:STDOUT: {kind: 'InfixOperatorLessEqual', text: '<=', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'InfixOperatorAs', text: 'as', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 53}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'n' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─BoolLiteralTrue 'true' +// CHECK:STDOUT: │ │ ╭─PrefixOperatorNot 'not' +// CHECK:STDOUT: │ │ ├─BoolTypeLiteral 'bool' +// CHECK:STDOUT: │ │ ╭─InfixOperatorAs 'as' has_error +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IntLiteral '1' +// CHECK:STDOUT: │ │ ├─IntLiteral '1' +// CHECK:STDOUT: │ │ ╭─InfixOperatorPlus '+' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ╭─InfixOperatorAs 'as' has_error +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IntLiteral '5' +// CHECK:STDOUT: │ │ ├─IntLiteral '2' +// CHECK:STDOUT: │ │ ╭─InfixOperatorPercent '%' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ╭─InfixOperatorAs 'as' has_error +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IntLiteral '3' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ╭─InfixOperatorAs 'as' +// CHECK:STDOUT: │ │ ╭─ShortCircuitOperandAnd 'and' has_error +// CHECK:STDOUT: │ │ ├─BoolLiteralTrue 'true' +// CHECK:STDOUT: │ │ ╭─ShortCircuitOperatorAnd 'and' has_error +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─BoolLiteralFalse 'false' +// CHECK:STDOUT: │ │ ╭─ShortCircuitOperandOr 'or' +// CHECK:STDOUT: │ │ ├─IntLiteral '4' +// CHECK:STDOUT: │ │ ╭─ShortCircuitOperatorOr 'or' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ╭─InfixOperatorAs 'as' has_error +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IntLiteral '6' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ╭─InfixOperatorAs 'as' +// CHECK:STDOUT: │ │ ├─IntLiteral '7' +// CHECK:STDOUT: │ │ ╭─InfixOperatorEqualEqual '==' has_error +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IntLiteral '8' +// CHECK:STDOUT: │ │ ├─IntLiteral '9' +// CHECK:STDOUT: │ │ ╭─InfixOperatorLessEqual '<=' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ╭─InfixOperatorAs 'as' has_error +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/fail_precedence_assign.carbon b/toolchain/parse/testdata/operators/fail_precedence_assign.carbon index 15c70716219d..e010af44eae3 100644 --- a/toolchain/parse/testdata/operators/fail_precedence_assign.carbon +++ b/toolchain/parse/testdata/operators/fail_precedence_assign.carbon @@ -39,48 +39,47 @@ fn F() { } // CHECK:STDOUT: - filename: fail_precedence_assign.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '1'}, -// CHECK:STDOUT: {kind: 'ParenExprStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'ParenExpr', text: ')', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'InfixOperatorPlus', text: '+', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ParenExprStart', text: '('}, -// CHECK:STDOUT: {kind: 'BoolLiteralTrue', text: 'true'}, -// CHECK:STDOUT: {kind: 'IfExprIf', text: 'if', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'IfExprThen', text: 'then', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '+=', has_error: yes}, -// CHECK:STDOUT: {kind: 'IfExprElse', text: 'if', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ParenExpr', text: ')', has_error: yes, subtree_size: 8}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorPlusPlus', text: '++', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InfixOperatorPlus', text: '+', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'c'}, -// CHECK:STDOUT: {kind: 'IfExprIf', text: 'if', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'IfExprThen', text: 'then', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'IfExprElse', text: 'else', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'PrefixOperatorPlusPlus', text: '++', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 41}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: │ │ ╭─IntLiteral '1' +// CHECK:STDOUT: │ │ │ ╭─ParenExprStart '(' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ├─ParenExpr ')' has_error +// CHECK:STDOUT: │ │ ╭─InfixOperatorPlus '+' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─ParenExprStart '(' +// CHECK:STDOUT: │ │ │ ╭─BoolLiteralTrue 'true' +// CHECK:STDOUT: │ │ │ ╭─IfExprIf 'if' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ │ ├─IfExprThen 'then' +// CHECK:STDOUT: │ │ │ ├─InvalidParse '+=' has_error +// CHECK:STDOUT: │ │ ├─IfExprElse 'if' has_error +// CHECK:STDOUT: │ │ ╭─ParenExpr ')' has_error +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ├─PrefixOperatorPlusPlus '++' +// CHECK:STDOUT: │ │ ╭─InfixOperatorPlus '+' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'c' +// CHECK:STDOUT: │ │ ╭─IfExprIf 'if' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ├─IfExprThen 'then' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'b' +// CHECK:STDOUT: │ │ ╭─IfExprElse 'else' +// CHECK:STDOUT: │ │ ╭─PrefixOperatorPlusPlus '++' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/fail_precedence_or_and.carbon b/toolchain/parse/testdata/operators/fail_precedence_or_and.carbon index 22aedcbe7203..1aae14058421 100644 --- a/toolchain/parse/testdata/operators/fail_precedence_or_and.carbon +++ b/toolchain/parse/testdata/operators/fail_precedence_or_and.carbon @@ -17,21 +17,20 @@ fn F() { } // CHECK:STDOUT: - filename: fail_precedence_or_and.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'ShortCircuitOperandOr', text: 'or', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'ShortCircuitOperatorOr', text: 'or', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ShortCircuitOperandAnd', text: 'and', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'c'}, -// CHECK:STDOUT: {kind: 'ShortCircuitOperatorAnd', text: 'and', has_error: yes, subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ╭─ShortCircuitOperandOr 'or' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'b' +// CHECK:STDOUT: │ │ ╭─ShortCircuitOperatorOr 'or' +// CHECK:STDOUT: │ │ ╭─ShortCircuitOperandAnd 'and' has_error +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'c' +// CHECK:STDOUT: │ │ ╭─ShortCircuitOperatorAnd 'and' has_error +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/fail_precedence_where.carbon b/toolchain/parse/testdata/operators/fail_precedence_where.carbon index 4a59c7eff01a..1eb564c32954 100644 --- a/toolchain/parse/testdata/operators/fail_precedence_where.carbon +++ b/toolchain/parse/testdata/operators/fail_precedence_where.carbon @@ -99,174 +99,165 @@ fn GreaterInArgument() { } // CHECK:STDOUT: - filename: fail_and_where.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'AndWhere'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'BoolLiteralTrue', text: 'true'}, -// CHECK:STDOUT: {kind: 'ShortCircuitOperandAnd', text: 'and', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'T'}, -// CHECK:STDOUT: {kind: 'ShortCircuitOperatorAnd', text: 'and', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'A'}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'B'}, -// CHECK:STDOUT: {kind: 'RequirementEqual', text: '=', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', has_error: yes, subtree_size: 10}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', has_error: yes, subtree_size: 11}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 17}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'AndWhere' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─BoolLiteralTrue 'true' +// CHECK:STDOUT: │ │ ╭─ShortCircuitOperandAnd 'and' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'T' +// CHECK:STDOUT: │ │ ╭─ShortCircuitOperatorAnd 'and' +// CHECK:STDOUT: │ │ ╭─WhereOperand 'where' has_error +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'A' +// CHECK:STDOUT: │ │ │ ╭─DesignatorExpr '.' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'B' +// CHECK:STDOUT: │ │ ├─RequirementEqual '=' +// CHECK:STDOUT: │ │ ╭─WhereExpr 'where' has_error +// CHECK:STDOUT: │ ├─ExprStatement ';' has_error +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_where_or.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'WhereOr'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'U'}, -// CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'C'}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'D'}, -// CHECK:STDOUT: {kind: 'RequirementImpls', text: 'impls', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', has_error: yes, subtree_size: 8}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'WhereOr' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'U' +// CHECK:STDOUT: │ │ ╭─WhereOperand 'where' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'C' +// CHECK:STDOUT: │ │ │ ╭─DesignatorExpr '.' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'D' +// CHECK:STDOUT: │ │ ├─RequirementImpls 'impls' +// CHECK:STDOUT: │ │ ╭─WhereExpr 'where' +// CHECK:STDOUT: │ ├─ExprStatement ';' has_error +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_equals_where.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'EqualsWhere'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'e'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'V'}, -// CHECK:STDOUT: {kind: 'InfixOperatorEqualEqual', text: '==', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'G'}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FloatTypeLiteral', text: 'f32'}, -// CHECK:STDOUT: {kind: 'RequirementEqualEqual', text: '==', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', has_error: yes, subtree_size: 9}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', has_error: yes, subtree_size: 10}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 16}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'EqualsWhere' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'e' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'V' +// CHECK:STDOUT: │ │ ╭─InfixOperatorEqualEqual '==' +// CHECK:STDOUT: │ │ ╭─WhereOperand 'where' has_error +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'G' +// CHECK:STDOUT: │ │ │ ╭─DesignatorExpr '.' +// CHECK:STDOUT: │ │ │ ├─FloatTypeLiteral 'f32' +// CHECK:STDOUT: │ │ ├─RequirementEqualEqual '==' +// CHECK:STDOUT: │ │ ╭─WhereExpr 'where' has_error +// CHECK:STDOUT: │ ├─ExprStatement ';' has_error +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_where_neq.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'WhereNEq'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'W'}, -// CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'H'}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'BoolTypeLiteral', text: 'bool'}, -// CHECK:STDOUT: {kind: 'RequirementEqual', text: '=', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', has_error: yes, subtree_size: 8}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'WhereNEq' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'W' +// CHECK:STDOUT: │ │ ╭─WhereOperand 'where' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'H' +// CHECK:STDOUT: │ │ │ ╭─DesignatorExpr '.' +// CHECK:STDOUT: │ │ │ ├─BoolTypeLiteral 'bool' +// CHECK:STDOUT: │ │ ├─RequirementEqual '=' +// CHECK:STDOUT: │ │ ╭─WhereExpr 'where' +// CHECK:STDOUT: │ ├─ExprStatement ';' has_error +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_less_requirement.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'LessRequirement'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'X'}, -// CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'J'}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'LessRequirement' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'X' +// CHECK:STDOUT: │ │ ╭─WhereOperand 'where' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'J' +// CHECK:STDOUT: │ │ ├─DesignatorExpr '.' +// CHECK:STDOUT: │ │ ╭─WhereExpr 'where' has_error +// CHECK:STDOUT: │ ├─ExprStatement ';' has_error +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_as_where.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'AsWhere'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Y'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Z'}, -// CHECK:STDOUT: {kind: 'InfixOperatorAs', text: 'as', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'L'}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'M'}, -// CHECK:STDOUT: {kind: 'RequirementImpls', text: 'impls', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', has_error: yes, subtree_size: 9}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', has_error: yes, subtree_size: 10}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 16}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'AsWhere' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'Y' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'Z' +// CHECK:STDOUT: │ │ ╭─InfixOperatorAs 'as' +// CHECK:STDOUT: │ │ ╭─WhereOperand 'where' has_error +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'L' +// CHECK:STDOUT: │ │ │ ╭─DesignatorExpr '.' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'M' +// CHECK:STDOUT: │ │ ├─RequirementImpls 'impls' +// CHECK:STDOUT: │ │ ╭─WhereExpr 'where' has_error +// CHECK:STDOUT: │ ├─ExprStatement ';' has_error +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_where_as.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'WhereAs'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'S'}, -// CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'N'}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'RequirementEqualEqual', text: '==', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', has_error: yes, subtree_size: 8}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'WhereAs' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'S' +// CHECK:STDOUT: │ │ ╭─WhereOperand 'where' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'N' +// CHECK:STDOUT: │ │ │ ╭─DesignatorExpr '.' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─RequirementEqualEqual '==' +// CHECK:STDOUT: │ │ ╭─WhereExpr 'where' +// CHECK:STDOUT: │ ├─ExprStatement ';' has_error +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_as_in_argument.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'AsInArgument'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'R'}, -// CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'O'}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'AsInArgument' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'R' +// CHECK:STDOUT: │ │ ╭─WhereOperand 'where' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'O' +// CHECK:STDOUT: │ │ ├─DesignatorExpr '.' +// CHECK:STDOUT: │ │ ╭─WhereExpr 'where' has_error +// CHECK:STDOUT: │ ├─ExprStatement ';' has_error +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_greater_in_argument.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'GreaterInArgument'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Q'}, -// CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'AA'}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'GreaterInArgument' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'Q' +// CHECK:STDOUT: │ │ ╭─WhereOperand 'where' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'AA' +// CHECK:STDOUT: │ │ ├─DesignatorExpr '.' +// CHECK:STDOUT: │ │ ╭─WhereExpr 'where' has_error +// CHECK:STDOUT: │ ├─ExprStatement ';' has_error +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/fail_prefix_repeat.carbon b/toolchain/parse/testdata/operators/fail_prefix_repeat.carbon index 634c778216c4..f6a06be759ed 100644 --- a/toolchain/parse/testdata/operators/fail_prefix_repeat.carbon +++ b/toolchain/parse/testdata/operators/fail_prefix_repeat.carbon @@ -16,18 +16,17 @@ fn F() -> const const i32* { } // CHECK:STDOUT: - filename: fail_prefix_repeat.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorConst', text: 'const', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'PrefixOperatorConst', text: 'const', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ╭─PrefixOperatorConst 'const' +// CHECK:STDOUT: │ │ ╭─PrefixOperatorConst 'const' +// CHECK:STDOUT: │ │ ╭─PostfixOperatorStar '*' +// CHECK:STDOUT: │ ├─ReturnType '->' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/fail_prefix_space.carbon b/toolchain/parse/testdata/operators/fail_prefix_space.carbon index 45e6d88c9497..607a93450fa3 100644 --- a/toolchain/parse/testdata/operators/fail_prefix_space.carbon +++ b/toolchain/parse/testdata/operators/fail_prefix_space.carbon @@ -15,17 +15,16 @@ var n: i8 = - n; // CHECK:STDOUT: - filename: fail_prefix_space.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'n'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i8'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorMinus', text: '-', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'n' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i8' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ ├─PrefixOperatorMinus '-' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/fail_prefix_uneven_space_with_assign.carbon b/toolchain/parse/testdata/operators/fail_prefix_uneven_space_with_assign.carbon index 2d434a1f3f18..49049e413997 100644 --- a/toolchain/parse/testdata/operators/fail_prefix_uneven_space_with_assign.carbon +++ b/toolchain/parse/testdata/operators/fail_prefix_uneven_space_with_assign.carbon @@ -15,17 +15,16 @@ var n: i8 =- n; // CHECK:STDOUT: - filename: fail_prefix_uneven_space_with_assign.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'n'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i8'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorMinus', text: '-', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'n' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i8' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ ├─PrefixOperatorMinus '-' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/fail_star_minus.carbon b/toolchain/parse/testdata/operators/fail_star_minus.carbon index e5881270f6a6..80c1e679507b 100644 --- a/toolchain/parse/testdata/operators/fail_star_minus.carbon +++ b/toolchain/parse/testdata/operators/fail_star_minus.carbon @@ -20,19 +20,18 @@ var n: i8 = n* -n; // CHECK:STDOUT: - filename: fail_star_minus.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'n'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i8'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'InfixOperatorMinus', text: '-', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'n' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i8' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ │ ╭─PostfixOperatorStar '*' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ ├─InfixOperatorMinus '-' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/fail_star_star.carbon b/toolchain/parse/testdata/operators/fail_star_star.carbon index dbcb57e7d2f7..f394024361b9 100644 --- a/toolchain/parse/testdata/operators/fail_star_star.carbon +++ b/toolchain/parse/testdata/operators/fail_star_star.carbon @@ -15,19 +15,18 @@ var n: i8 = n* *p; // CHECK:STDOUT: - filename: fail_star_star.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'n'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i8'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'p'}, -// CHECK:STDOUT: {kind: 'InfixOperatorStar', text: '*', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'n' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i8' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ │ ╭─PostfixOperatorStar '*' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'p' +// CHECK:STDOUT: │ ├─InfixOperatorStar '*' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/fail_star_star_no_space.carbon b/toolchain/parse/testdata/operators/fail_star_star_no_space.carbon index 6de68ec2e691..c95fd7fe7541 100644 --- a/toolchain/parse/testdata/operators/fail_star_star_no_space.carbon +++ b/toolchain/parse/testdata/operators/fail_star_star_no_space.carbon @@ -19,18 +19,17 @@ var n: i8 = n**p; // CHECK:STDOUT: - filename: fail_star_star_no_space.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'n'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i8'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', has_error: yes, subtree_size: 11}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'n' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i8' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ │ ╭─PostfixOperatorStar '*' +// CHECK:STDOUT: │ ├─PostfixOperatorStar '*' +// CHECK:STDOUT: ├─VariableDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/fail_variety.carbon b/toolchain/parse/testdata/operators/fail_variety.carbon index 0ead7430e174..2418934d27d9 100644 --- a/toolchain/parse/testdata/operators/fail_variety.carbon +++ b/toolchain/parse/testdata/operators/fail_variety.carbon @@ -33,34 +33,33 @@ fn F() { } // CHECK:STDOUT: - filename: fail_variety.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'InfixOperatorStar', text: '*', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'c'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'd'}, -// CHECK:STDOUT: {kind: 'InfixOperatorStar', text: '*', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'InfixOperatorPlus', text: '+', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'InfixOperatorEqual', text: '=', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'd'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'd'}, -// CHECK:STDOUT: {kind: 'InfixOperatorStar', text: '*', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'e'}, -// CHECK:STDOUT: {kind: 'InfixOperatorLessLess', text: '<<', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'f'}, -// CHECK:STDOUT: {kind: 'InfixOperatorAmp', text: '&', has_error: yes, subtree_size: 7}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'g'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorNot', text: 'not', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InfixOperatorMinus', text: '-', has_error: yes, subtree_size: 10}, -// CHECK:STDOUT: {kind: 'InfixOperatorEqual', text: '=', has_error: yes, subtree_size: 20}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 21}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 27}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'b' +// CHECK:STDOUT: │ │ │ ╭─InfixOperatorStar '*' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameExpr 'c' +// CHECK:STDOUT: │ │ │ │ ├─IdentifierNameExpr 'd' +// CHECK:STDOUT: │ │ │ ├─InfixOperatorStar '*' +// CHECK:STDOUT: │ │ ├─InfixOperatorPlus '+' +// CHECK:STDOUT: │ │ ╭─InfixOperatorEqual '=' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'd' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'd' +// CHECK:STDOUT: │ │ │ ╭─InfixOperatorStar '*' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'e' +// CHECK:STDOUT: │ │ │ ╭─InfixOperatorLessLess '<<' has_error +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'f' +// CHECK:STDOUT: │ │ │ ╭─InfixOperatorAmp '&' has_error +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameExpr 'g' +// CHECK:STDOUT: │ │ │ ├─PrefixOperatorNot 'not' +// CHECK:STDOUT: │ │ ├─InfixOperatorMinus '-' has_error +// CHECK:STDOUT: │ │ ╭─InfixOperatorEqual '=' has_error +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/fixity_in_call.carbon b/toolchain/parse/testdata/operators/fixity_in_call.carbon index 9a6f3a21d869..bdb7e459df0e 100644 --- a/toolchain/parse/testdata/operators/fixity_in_call.carbon +++ b/toolchain/parse/testdata/operators/fixity_in_call.carbon @@ -13,23 +13,22 @@ fn F() { } // CHECK:STDOUT: - filename: fixity_in_call.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'G'}, -// CHECK:STDOUT: {kind: 'CallExprStart', text: '(', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'TupleLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'InfixOperatorStar', text: '*', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'CallExpr', text: ')', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 16}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'G' +// CHECK:STDOUT: │ │ ╭─CallExprStart '(' +// CHECK:STDOUT: │ │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─PostfixOperatorStar '*' +// CHECK:STDOUT: │ │ ├─TupleLiteralComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ │ ├─InfixOperatorStar '*' +// CHECK:STDOUT: │ │ ╭─CallExpr ')' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/fixity_in_params.carbon b/toolchain/parse/testdata/operators/fixity_in_params.carbon index 89e4ae2c981e..1218847e2aa4 100644 --- a/toolchain/parse/testdata/operators/fixity_in_params.carbon +++ b/toolchain/parse/testdata/operators/fixity_in_params.carbon @@ -12,23 +12,22 @@ fn F(p: i32*, n: i32) { } // CHECK:STDOUT: - filename: fixity_in_params.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'p'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'n'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 16}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'p' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─PostfixOperatorStar '*' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'n' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/fixity_in_var.carbon b/toolchain/parse/testdata/operators/fixity_in_var.carbon index f63bca4e2140..752166a6b74b 100644 --- a/toolchain/parse/testdata/operators/fixity_in_var.carbon +++ b/toolchain/parse/testdata/operators/fixity_in_var.carbon @@ -14,33 +14,32 @@ fn F() { } // CHECK:STDOUT: - filename: fixity_in_var.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'q'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'p'}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 't'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 26}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'q' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─PostfixOperatorStar '*' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'p' +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 't' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─TypeTypeLiteral 'type' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─PostfixOperatorStar '*' +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/fixity_with_assign.carbon b/toolchain/parse/testdata/operators/fixity_with_assign.carbon index 43827d79663d..191f8a9b6d51 100644 --- a/toolchain/parse/testdata/operators/fixity_with_assign.carbon +++ b/toolchain/parse/testdata/operators/fixity_with_assign.carbon @@ -16,38 +16,37 @@ fn F() { } // CHECK:STDOUT: - filename: fixity_with_assign.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 't'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 't'}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'InfixOperatorEqual', text: '=', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'InfixOperatorStar', text: '*', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'InfixOperatorEqual', text: '=', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'p'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorStar', text: '*', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InfixOperatorStar', text: '*', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'InfixOperatorEqual', text: '=', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'InfixOperatorStar', text: '*', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'InfixOperatorEqual', text: '=', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 31}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 't' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 't' +// CHECK:STDOUT: │ │ │ ╭─PostfixOperatorStar '*' +// CHECK:STDOUT: │ │ ├─PostfixOperatorStar '*' +// CHECK:STDOUT: │ │ ╭─InfixOperatorEqual '=' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ │ ├─InfixOperatorStar '*' +// CHECK:STDOUT: │ │ ╭─InfixOperatorEqual '=' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameExpr 'p' +// CHECK:STDOUT: │ │ │ ├─PrefixOperatorStar '*' +// CHECK:STDOUT: │ │ ├─InfixOperatorStar '*' +// CHECK:STDOUT: │ │ ╭─InfixOperatorEqual '=' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ │ ├─InfixOperatorStar '*' +// CHECK:STDOUT: │ │ ╭─InfixOperatorEqual '=' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/infix.carbon b/toolchain/parse/testdata/operators/infix.carbon index b24b83929bdc..8bc99cec0747 100644 --- a/toolchain/parse/testdata/operators/infix.carbon +++ b/toolchain/parse/testdata/operators/infix.carbon @@ -17,33 +17,32 @@ fn F() { } // CHECK:STDOUT: - filename: infix.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'InfixOperatorStar', text: '*', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'InfixOperatorCaret', text: '^', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'InfixOperatorGreaterEqual', text: '>=', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'InfixOperatorGreaterGreater', text: '>>', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'InfixOperatorSlash', text: '/', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 26}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ │ ╭─InfixOperatorStar '*' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ │ ╭─InfixOperatorCaret '^' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ │ ╭─InfixOperatorGreaterEqual '>=' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ │ ╭─InfixOperatorGreaterGreater '>>' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ │ ╭─InfixOperatorSlash '/' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/infix_no_space.carbon b/toolchain/parse/testdata/operators/infix_no_space.carbon index c58979b49e46..8279d1f8f15f 100644 --- a/toolchain/parse/testdata/operators/infix_no_space.carbon +++ b/toolchain/parse/testdata/operators/infix_no_space.carbon @@ -11,18 +11,17 @@ var n: i8 = n*n; // CHECK:STDOUT: - filename: infix_no_space.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'n'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i8'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'InfixOperatorStar', text: '*', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'n' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i8' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ ├─InfixOperatorStar '*' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/infix_with_paren_after.carbon b/toolchain/parse/testdata/operators/infix_with_paren_after.carbon index dd5516238e96..53d4bfad8988 100644 --- a/toolchain/parse/testdata/operators/infix_with_paren_after.carbon +++ b/toolchain/parse/testdata/operators/infix_with_paren_after.carbon @@ -11,20 +11,19 @@ var n: i8 = 3*(n); // CHECK:STDOUT: - filename: infix_with_paren_after.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'n'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i8'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '3'}, -// CHECK:STDOUT: {kind: 'ParenExprStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'ParenExpr', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'InfixOperatorStar', text: '*', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'n' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i8' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─IntLiteral '3' +// CHECK:STDOUT: │ │ │ ╭─ParenExprStart '(' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ │ ├─ParenExpr ')' +// CHECK:STDOUT: │ ├─InfixOperatorStar '*' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/infix_with_paren_before.carbon b/toolchain/parse/testdata/operators/infix_with_paren_before.carbon index eb84b7cd20df..88967e2606d5 100644 --- a/toolchain/parse/testdata/operators/infix_with_paren_before.carbon +++ b/toolchain/parse/testdata/operators/infix_with_paren_before.carbon @@ -11,20 +11,19 @@ var n: i8 = (n)*3; // CHECK:STDOUT: - filename: infix_with_paren_before.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'n'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i8'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'ParenExprStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'ParenExpr', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '3'}, -// CHECK:STDOUT: {kind: 'InfixOperatorStar', text: '*', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'n' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i8' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─ParenExprStart '(' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ │ ╭─ParenExpr ')' +// CHECK:STDOUT: │ │ ├─IntLiteral '3' +// CHECK:STDOUT: │ ├─InfixOperatorStar '*' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/modifier.carbon b/toolchain/parse/testdata/operators/modifier.carbon index 2e7837f91243..b40187905073 100644 --- a/toolchain/parse/testdata/operators/modifier.carbon +++ b/toolchain/parse/testdata/operators/modifier.carbon @@ -54,51 +54,49 @@ fn G() { } // CHECK:STDOUT: - filename: valid.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'UnsafeModifier', text: 'unsafe', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'InfixOperatorAs', text: 'as', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ╭─UnsafeModifier 'unsafe' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'b' +// CHECK:STDOUT: │ │ ╭─InfixOperatorAs 'as' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_invalid.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'G'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'ShortCircuitOperandOr', text: 'or', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'ShortCircuitOperatorOr', text: 'or', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'InfixOperatorStar', text: '*', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: 'unsafe', has_error: yes}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'InfixOperatorPlus', text: '+', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'UnsafeModifier', text: 'unsafe', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'c'}, -// CHECK:STDOUT: {kind: 'InfixOperatorAs', text: 'as', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'd'}, -// CHECK:STDOUT: {kind: 'InfixOperatorStar', text: '*', has_error: yes, subtree_size: 8}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 28}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'G' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ╭─ShortCircuitOperandOr 'or' has_error +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'b' +// CHECK:STDOUT: │ │ ╭─ShortCircuitOperatorOr 'or' has_error +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'b' +// CHECK:STDOUT: │ │ ╭─InfixOperatorStar '*' has_error +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ ├─ExprStatement ';' has_error +// CHECK:STDOUT: │ │ ╭─InvalidParse 'unsafe' has_error +// CHECK:STDOUT: │ ├─ExprStatement ';' has_error +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'b' +// CHECK:STDOUT: │ │ ╭─InfixOperatorPlus '+' +// CHECK:STDOUT: │ │ ╭─UnsafeModifier 'unsafe' has_error +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'c' +// CHECK:STDOUT: │ │ ╭─InfixOperatorAs 'as' has_error +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'd' +// CHECK:STDOUT: │ │ ╭─InfixOperatorStar '*' has_error +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/postfix.carbon b/toolchain/parse/testdata/operators/postfix.carbon index 42ffeeea2f2b..dd704a59ab9d 100644 --- a/toolchain/parse/testdata/operators/postfix.carbon +++ b/toolchain/parse/testdata/operators/postfix.carbon @@ -11,17 +11,16 @@ var v: type = i8*; // CHECK:STDOUT: - filename: postfix.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'v'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i8'}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'v' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─TypeTypeLiteral 'type' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─IntTypeLiteral 'i8' +// CHECK:STDOUT: │ ├─PostfixOperatorStar '*' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/postfix_repeat.carbon b/toolchain/parse/testdata/operators/postfix_repeat.carbon index 44c07c701d08..12ad822160fc 100644 --- a/toolchain/parse/testdata/operators/postfix_repeat.carbon +++ b/toolchain/parse/testdata/operators/postfix_repeat.carbon @@ -13,19 +13,18 @@ fn F() { } // CHECK:STDOUT: - filename: postfix_repeat.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ╭─PostfixOperatorStar '*' +// CHECK:STDOUT: │ │ ╭─PostfixOperatorStar '*' +// CHECK:STDOUT: │ │ ╭─PostfixOperatorStar '*' +// CHECK:STDOUT: │ │ ╭─PostfixOperatorStar '*' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/postfix_space_after_op.carbon b/toolchain/parse/testdata/operators/postfix_space_after_op.carbon index a2182a3a0060..6f5c530a3e44 100644 --- a/toolchain/parse/testdata/operators/postfix_space_after_op.carbon +++ b/toolchain/parse/testdata/operators/postfix_space_after_op.carbon @@ -11,17 +11,16 @@ var v: type = i8* ; // CHECK:STDOUT: - filename: postfix_space_after_op.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'v'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i8'}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'v' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─TypeTypeLiteral 'type' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─IntTypeLiteral 'i8' +// CHECK:STDOUT: │ ├─PostfixOperatorStar '*' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/precedence_as.carbon b/toolchain/parse/testdata/operators/precedence_as.carbon index 6c12d89c479d..3e8811e0967e 100644 --- a/toolchain/parse/testdata/operators/precedence_as.carbon +++ b/toolchain/parse/testdata/operators/precedence_as.carbon @@ -17,39 +17,38 @@ fn F(n: i32) { } // CHECK:STDOUT: - filename: precedence_as.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'n'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorMinus', text: '-', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorConst', text: 'const', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InfixOperatorAs', text: 'as', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorAmp', text: '&', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InfixOperatorAs', text: 'as', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorCaret', text: '^', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'InfixOperatorAs', text: 'as', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorStar', text: '*', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'InfixOperatorAs', text: 'as', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 32}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'n' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ │ ╭─PrefixOperatorMinus '-' +// CHECK:STDOUT: │ │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─PrefixOperatorConst 'const' +// CHECK:STDOUT: │ │ ╭─InfixOperatorAs 'as' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ │ ╭─PrefixOperatorAmp '&' +// CHECK:STDOUT: │ │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─PostfixOperatorStar '*' +// CHECK:STDOUT: │ │ ╭─InfixOperatorAs 'as' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ │ ╭─PrefixOperatorCaret '^' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ╭─InfixOperatorAs 'as' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ │ ╭─PrefixOperatorStar '*' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ╭─InfixOperatorAs 'as' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/precedence_assign.carbon b/toolchain/parse/testdata/operators/precedence_assign.carbon index 59cee9b9d6d8..5da449b79c54 100644 --- a/toolchain/parse/testdata/operators/precedence_assign.carbon +++ b/toolchain/parse/testdata/operators/precedence_assign.carbon @@ -18,65 +18,64 @@ fn F(c: bool) { } // CHECK:STDOUT: - filename: precedence_assign.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'c'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'BoolTypeLiteral', text: 'bool'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'p'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'p'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorStar', text: '*', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'c'}, -// CHECK:STDOUT: {kind: 'IfExprIf', text: 'if', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '1'}, -// CHECK:STDOUT: {kind: 'IfExprThen', text: 'then', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '2'}, -// CHECK:STDOUT: {kind: 'IfExprElse', text: 'else', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'InfixOperatorEqual', text: '=', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'ParenExprStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'c'}, -// CHECK:STDOUT: {kind: 'IfExprIf', text: 'if', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'IfExprThen', text: 'then', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'IfExprElse', text: 'else', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ParenExpr', text: ')', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'c'}, -// CHECK:STDOUT: {kind: 'IfExprIf', text: 'if', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '1'}, -// CHECK:STDOUT: {kind: 'IfExprThen', text: 'then', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '2'}, -// CHECK:STDOUT: {kind: 'IfExprElse', text: 'else', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'InfixOperatorPlusEqual', text: '+=', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 16}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 58}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'c' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─BoolTypeLiteral 'bool' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'p' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─PostfixOperatorStar '*' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'p' +// CHECK:STDOUT: │ │ ╭─PrefixOperatorStar '*' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'c' +// CHECK:STDOUT: │ │ │ ╭─IfExprIf 'if' +// CHECK:STDOUT: │ │ │ │ ╭─IntLiteral '1' +// CHECK:STDOUT: │ │ │ ├─IfExprThen 'then' +// CHECK:STDOUT: │ │ │ ├─IntLiteral '2' +// CHECK:STDOUT: │ │ ├─IfExprElse 'else' +// CHECK:STDOUT: │ │ ╭─InfixOperatorEqual '=' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─ParenExprStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'c' +// CHECK:STDOUT: │ │ │ ╭─IfExprIf 'if' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ │ ├─IfExprThen 'then' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'b' +// CHECK:STDOUT: │ │ ├─IfExprElse 'else' +// CHECK:STDOUT: │ │ ╭─ParenExpr ')' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'c' +// CHECK:STDOUT: │ │ │ ╭─IfExprIf 'if' +// CHECK:STDOUT: │ │ │ │ ╭─IntLiteral '1' +// CHECK:STDOUT: │ │ │ ├─IfExprThen 'then' +// CHECK:STDOUT: │ │ │ ├─IntLiteral '2' +// CHECK:STDOUT: │ │ ├─IfExprElse 'else' +// CHECK:STDOUT: │ │ ╭─InfixOperatorPlusEqual '+=' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/precedence_not.carbon b/toolchain/parse/testdata/operators/precedence_not.carbon index 5f1ea523689a..357b6a9064e9 100644 --- a/toolchain/parse/testdata/operators/precedence_not.carbon +++ b/toolchain/parse/testdata/operators/precedence_not.carbon @@ -13,24 +13,23 @@ fn F() { } // CHECK:STDOUT: - filename: precedence_not.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorNot', text: 'not', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ShortCircuitOperandAnd', text: 'and', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorNot', text: 'not', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ShortCircuitOperatorAnd', text: 'and', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ShortCircuitOperandAnd', text: 'and', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'c'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorNot', text: 'not', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ShortCircuitOperatorAnd', text: 'and', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 17}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ╭─PrefixOperatorNot 'not' +// CHECK:STDOUT: │ │ ╭─ShortCircuitOperandAnd 'and' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'b' +// CHECK:STDOUT: │ │ ├─PrefixOperatorNot 'not' +// CHECK:STDOUT: │ │ ╭─ShortCircuitOperatorAnd 'and' +// CHECK:STDOUT: │ │ ╭─ShortCircuitOperandAnd 'and' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'c' +// CHECK:STDOUT: │ │ ├─PrefixOperatorNot 'not' +// CHECK:STDOUT: │ │ ╭─ShortCircuitOperatorAnd 'and' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/precedence_unary.carbon b/toolchain/parse/testdata/operators/precedence_unary.carbon index 1be25b17cce8..a12c429118a5 100644 --- a/toolchain/parse/testdata/operators/precedence_unary.carbon +++ b/toolchain/parse/testdata/operators/precedence_unary.carbon @@ -18,42 +18,41 @@ fn F(p: i32*) { } // CHECK:STDOUT: - filename: precedence_unary.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'p'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'p'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorStar', text: '*', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'PrefixOperatorMinus', text: '-', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'p'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorStar', text: '*', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'PrefixOperatorCaret', text: '^', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'InfixOperatorPlus', text: '+', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'p'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorStar', text: '*', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'PrefixOperatorMinus', text: '-', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'p'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorStar', text: '*', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'PrefixOperatorCaret', text: '^', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'InfixOperatorPipe', text: '|', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'p'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorStar', text: '*', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'PrefixOperatorMinus', text: '-', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'p'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorStar', text: '*', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'PrefixOperatorCaret', text: '^', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'InfixOperatorLessLess', text: '<<', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 35}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'p' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─PostfixOperatorStar '*' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'p' +// CHECK:STDOUT: │ │ ╭─PrefixOperatorStar '*' +// CHECK:STDOUT: │ │ ╭─PrefixOperatorMinus '-' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'p' +// CHECK:STDOUT: │ │ │ ╭─PrefixOperatorStar '*' +// CHECK:STDOUT: │ │ ├─PrefixOperatorCaret '^' +// CHECK:STDOUT: │ │ ╭─InfixOperatorPlus '+' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'p' +// CHECK:STDOUT: │ │ ╭─PrefixOperatorStar '*' +// CHECK:STDOUT: │ │ ╭─PrefixOperatorMinus '-' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'p' +// CHECK:STDOUT: │ │ │ ╭─PrefixOperatorStar '*' +// CHECK:STDOUT: │ │ ├─PrefixOperatorCaret '^' +// CHECK:STDOUT: │ │ ╭─InfixOperatorPipe '|' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'p' +// CHECK:STDOUT: │ │ ╭─PrefixOperatorStar '*' +// CHECK:STDOUT: │ │ ╭─PrefixOperatorMinus '-' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'p' +// CHECK:STDOUT: │ │ │ ╭─PrefixOperatorStar '*' +// CHECK:STDOUT: │ │ ├─PrefixOperatorCaret '^' +// CHECK:STDOUT: │ │ ╭─InfixOperatorLessLess '<<' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/precedence_where.carbon b/toolchain/parse/testdata/operators/precedence_where.carbon index 80f9fa1f1db6..d961b5883b8b 100644 --- a/toolchain/parse/testdata/operators/precedence_where.carbon +++ b/toolchain/parse/testdata/operators/precedence_where.carbon @@ -17,83 +17,82 @@ fn BinaryPlus(generic V: L + M where G & H impls N & O); fn UnaryMinus(generic W: -P where -Q impls -R); // CHECK:STDOUT: - filename: precedence_where.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'PostfixStar'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'T'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'I'}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'A'}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'B'}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'RequirementEqualEqual', text: '==', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 16}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 19}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Ampersand'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'U'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'J'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'K'}, -// CHECK:STDOUT: {kind: 'InfixOperatorAmp', text: '&', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'C'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'D'}, -// CHECK:STDOUT: {kind: 'InfixOperatorAmp', text: '&', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'E'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'F'}, -// CHECK:STDOUT: {kind: 'InfixOperatorAmp', text: '&', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'RequirementImpls', text: 'impls', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 17}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 20}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'BinaryPlus'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'V'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'L'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'M'}, -// CHECK:STDOUT: {kind: 'InfixOperatorPlus', text: '+', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'G'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'H'}, -// CHECK:STDOUT: {kind: 'InfixOperatorAmp', text: '&', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'N'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'O'}, -// CHECK:STDOUT: {kind: 'InfixOperatorAmp', text: '&', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'RequirementImpls', text: 'impls', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 17}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 20}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'UnaryMinus'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'W'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'P'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorMinus', text: '-', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Q'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorMinus', text: '-', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'R'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorMinus', text: '-', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'RequirementImpls', text: 'impls', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 17}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'PostfixStar' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'T' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameExpr 'I' +// CHECK:STDOUT: │ │ │ │ ╭─PostfixOperatorStar '*' +// CHECK:STDOUT: │ │ │ │ ╭─WhereOperand 'where' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'A' +// CHECK:STDOUT: │ │ │ │ │ ╭─DesignatorExpr '.' +// CHECK:STDOUT: │ │ │ │ │ ╭─PostfixOperatorStar '*' +// CHECK:STDOUT: │ │ │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'B' +// CHECK:STDOUT: │ │ │ │ │ │ ╭─DesignatorExpr '.' +// CHECK:STDOUT: │ │ │ │ │ ├─PostfixOperatorStar '*' +// CHECK:STDOUT: │ │ │ │ ├─RequirementEqualEqual '==' +// CHECK:STDOUT: │ │ │ ├─WhereExpr 'where' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'Ampersand' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'U' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameExpr 'J' +// CHECK:STDOUT: │ │ │ │ ├─IdentifierNameExpr 'K' +// CHECK:STDOUT: │ │ │ │ ╭─InfixOperatorAmp '&' +// CHECK:STDOUT: │ │ │ │ ╭─WhereOperand 'where' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameExpr 'C' +// CHECK:STDOUT: │ │ │ │ │ ├─IdentifierNameExpr 'D' +// CHECK:STDOUT: │ │ │ │ │ ╭─InfixOperatorAmp '&' +// CHECK:STDOUT: │ │ │ │ │ │ ╭─IdentifierNameExpr 'E' +// CHECK:STDOUT: │ │ │ │ │ │ ├─IdentifierNameExpr 'F' +// CHECK:STDOUT: │ │ │ │ │ ├─InfixOperatorAmp '&' +// CHECK:STDOUT: │ │ │ │ ├─RequirementImpls 'impls' +// CHECK:STDOUT: │ │ │ ├─WhereExpr 'where' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'BinaryPlus' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'V' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameExpr 'L' +// CHECK:STDOUT: │ │ │ │ ├─IdentifierNameExpr 'M' +// CHECK:STDOUT: │ │ │ │ ╭─InfixOperatorPlus '+' +// CHECK:STDOUT: │ │ │ │ ╭─WhereOperand 'where' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameExpr 'G' +// CHECK:STDOUT: │ │ │ │ │ ├─IdentifierNameExpr 'H' +// CHECK:STDOUT: │ │ │ │ │ ╭─InfixOperatorAmp '&' +// CHECK:STDOUT: │ │ │ │ │ │ ╭─IdentifierNameExpr 'N' +// CHECK:STDOUT: │ │ │ │ │ │ ├─IdentifierNameExpr 'O' +// CHECK:STDOUT: │ │ │ │ │ ├─InfixOperatorAmp '&' +// CHECK:STDOUT: │ │ │ │ ├─RequirementImpls 'impls' +// CHECK:STDOUT: │ │ │ ├─WhereExpr 'where' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'UnaryMinus' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'W' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameExpr 'P' +// CHECK:STDOUT: │ │ │ │ ╭─PrefixOperatorMinus '-' +// CHECK:STDOUT: │ │ │ │ ╭─WhereOperand 'where' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameExpr 'Q' +// CHECK:STDOUT: │ │ │ │ │ ╭─PrefixOperatorMinus '-' +// CHECK:STDOUT: │ │ │ │ │ │ ╭─IdentifierNameExpr 'R' +// CHECK:STDOUT: │ │ │ │ │ ├─PrefixOperatorMinus '-' +// CHECK:STDOUT: │ │ │ │ ├─RequirementImpls 'impls' +// CHECK:STDOUT: │ │ │ ├─WhereExpr 'where' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/prefix.carbon b/toolchain/parse/testdata/operators/prefix.carbon index 7c60939dfc0e..8fe6fc5f5521 100644 --- a/toolchain/parse/testdata/operators/prefix.carbon +++ b/toolchain/parse/testdata/operators/prefix.carbon @@ -15,44 +15,43 @@ var c: const bool; var d: partial C*; // CHECK:STDOUT: - filename: prefix.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'n'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i8'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorMinus', text: '-', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'BoolTypeLiteral', text: 'bool'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'BoolLiteralTrue', text: 'true'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorNot', text: 'not', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'c'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'BoolTypeLiteral', text: 'bool'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorConst', text: 'const', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'd'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'C'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorPartial', text: 'partial', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'n' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i8' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ ├─PrefixOperatorMinus '-' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─BoolTypeLiteral 'bool' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─BoolLiteralTrue 'true' +// CHECK:STDOUT: │ ├─PrefixOperatorNot 'not' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'c' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ╭─BoolTypeLiteral 'bool' +// CHECK:STDOUT: │ │ ├─PrefixOperatorConst 'const' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'd' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'C' +// CHECK:STDOUT: │ │ │ ╭─PrefixOperatorPartial 'partial' +// CHECK:STDOUT: │ │ ├─PostfixOperatorStar '*' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/prefix_no_space.carbon b/toolchain/parse/testdata/operators/prefix_no_space.carbon index 76a54b5631dd..4cc6e7d7d80f 100644 --- a/toolchain/parse/testdata/operators/prefix_no_space.carbon +++ b/toolchain/parse/testdata/operators/prefix_no_space.carbon @@ -12,17 +12,16 @@ var n: i8 =-n; // Valid // CHECK:STDOUT: - filename: prefix_no_space.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'n'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i8'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorMinus', text: '-', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'n' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i8' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ ├─PrefixOperatorMinus '-' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/prefix_repeat.carbon b/toolchain/parse/testdata/operators/prefix_repeat.carbon index d0dc87cc8f62..0605950991c9 100644 --- a/toolchain/parse/testdata/operators/prefix_repeat.carbon +++ b/toolchain/parse/testdata/operators/prefix_repeat.carbon @@ -13,19 +13,18 @@ fn F() { } // CHECK:STDOUT: - filename: prefix_repeat.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorAmp', text: '&', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'PrefixOperatorStar', text: '*', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'PrefixOperatorStar', text: '*', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PrefixOperatorStar', text: '*', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ │ ╭─PrefixOperatorAmp '&' +// CHECK:STDOUT: │ │ ╭─PrefixOperatorStar '*' +// CHECK:STDOUT: │ │ ╭─PrefixOperatorStar '*' +// CHECK:STDOUT: │ │ ╭─PrefixOperatorStar '*' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/ref.carbon b/toolchain/parse/testdata/operators/ref.carbon index 95212f699624..40894a9e6346 100644 --- a/toolchain/parse/testdata/operators/ref.carbon +++ b/toolchain/parse/testdata/operators/ref.carbon @@ -23,72 +23,70 @@ var x: i32 = ref (if b then c else d); var x: i32 = if b then ref c else ref d; // CHECK:STDOUT: - filename: ref_precedence.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'y'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'InfixOperatorAs', text: 'as', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'PrefixOperatorRef', text: 'ref', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'y' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ╭─InfixOperatorAs 'as' +// CHECK:STDOUT: │ ├─PrefixOperatorRef 'ref' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_if_ref.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'IfExprIf', text: 'if', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'c'}, -// CHECK:STDOUT: {kind: 'IfExprThen', text: 'then', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'd'}, -// CHECK:STDOUT: {kind: 'IfExprElse', text: 'else', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'PrefixOperatorRef', text: 'ref', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'ParenExprStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'IfExprIf', text: 'if', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'c'}, -// CHECK:STDOUT: {kind: 'IfExprThen', text: 'then', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'd'}, -// CHECK:STDOUT: {kind: 'IfExprElse', text: 'else', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ParenExpr', text: ')', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'PrefixOperatorRef', text: 'ref', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 17}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'IfExprIf', text: 'if', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'c'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorRef', text: 'ref', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IfExprThen', text: 'then', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'd'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorRef', text: 'ref', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IfExprElse', text: 'else', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 16}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'b' +// CHECK:STDOUT: │ │ ╭─IfExprIf 'if' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'c' +// CHECK:STDOUT: │ │ ├─IfExprThen 'then' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'd' +// CHECK:STDOUT: │ │ ╭─IfExprElse 'else' +// CHECK:STDOUT: │ ├─PrefixOperatorRef 'ref' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─ParenExprStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'b' +// CHECK:STDOUT: │ │ │ ╭─IfExprIf 'if' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameExpr 'c' +// CHECK:STDOUT: │ │ │ ├─IfExprThen 'then' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'd' +// CHECK:STDOUT: │ │ ├─IfExprElse 'else' +// CHECK:STDOUT: │ │ ╭─ParenExpr ')' +// CHECK:STDOUT: │ ├─PrefixOperatorRef 'ref' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'b' +// CHECK:STDOUT: │ │ ╭─IfExprIf 'if' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'c' +// CHECK:STDOUT: │ │ │ ╭─PrefixOperatorRef 'ref' +// CHECK:STDOUT: │ │ ├─IfExprThen 'then' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'd' +// CHECK:STDOUT: │ │ ├─PrefixOperatorRef 'ref' +// CHECK:STDOUT: │ ├─IfExprElse 'else' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/spaceship.carbon b/toolchain/parse/testdata/operators/spaceship.carbon index 47a7ceca0a08..d2deff194e35 100644 --- a/toolchain/parse/testdata/operators/spaceship.carbon +++ b/toolchain/parse/testdata/operators/spaceship.carbon @@ -13,17 +13,16 @@ fn F() { } // CHECK:STDOUT: - filename: spaceship.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'InfixOperatorLessEqualGreater', text: '<=>', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'b' +// CHECK:STDOUT: │ │ ╭─InfixOperatorLessEqualGreater '<=>' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/three_stars.carbon b/toolchain/parse/testdata/operators/three_stars.carbon index a2ed7539ee63..106607443c13 100644 --- a/toolchain/parse/testdata/operators/three_stars.carbon +++ b/toolchain/parse/testdata/operators/three_stars.carbon @@ -13,20 +13,19 @@ fn F() { } // CHECK:STDOUT: - filename: three_stars.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'T'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorConst', text: 'const', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'p'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorStar', text: '*', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InfixOperatorStar', text: '*', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'T' +// CHECK:STDOUT: │ │ ╭─PrefixOperatorConst 'const' +// CHECK:STDOUT: │ │ ╭─PostfixOperatorStar '*' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'p' +// CHECK:STDOUT: │ │ ├─PrefixOperatorStar '*' +// CHECK:STDOUT: │ │ ╭─InfixOperatorStar '*' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/operators/unary.carbon b/toolchain/parse/testdata/operators/unary.carbon index 3c15f49e5620..26be4191d55a 100644 --- a/toolchain/parse/testdata/operators/unary.carbon +++ b/toolchain/parse/testdata/operators/unary.carbon @@ -25,42 +25,40 @@ fn F() { } // CHECK:STDOUT: - filename: fail_space_before.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IfConditionStart', text: '('}, -// CHECK:STDOUT: {kind: 'BoolLiteralFalse', text: 'false'}, -// CHECK:STDOUT: {kind: 'IfCondition', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: '{'}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IfStatement', text: 'if', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorMinusMinus', text: '--', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IfConditionStart '(' +// CHECK:STDOUT: │ │ ├─BoolLiteralFalse 'false' +// CHECK:STDOUT: │ │ ╭─IfCondition ')' +// CHECK:STDOUT: │ │ │ ╭─CodeBlockStart '{' +// CHECK:STDOUT: │ │ ├─CodeBlock '}' +// CHECK:STDOUT: │ ├─IfStatement 'if' +// CHECK:STDOUT: │ │ ╭─IntLiteral '0' +// CHECK:STDOUT: │ │ ╭─PrefixOperatorMinusMinus '--' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: todo_fail_space_before_op_with_keyword.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IfConditionStart', text: '('}, -// CHECK:STDOUT: {kind: 'BoolLiteralFalse', text: 'false'}, -// CHECK:STDOUT: {kind: 'IfCondition', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: '{'}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IfStatement', text: 'if', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'BoolLiteralFalse', text: 'false'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorMinusMinus', text: '--', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IfConditionStart '(' +// CHECK:STDOUT: │ │ ├─BoolLiteralFalse 'false' +// CHECK:STDOUT: │ │ ╭─IfCondition ')' +// CHECK:STDOUT: │ │ │ ╭─CodeBlockStart '{' +// CHECK:STDOUT: │ │ ├─CodeBlock '}' +// CHECK:STDOUT: │ ├─IfStatement 'if' +// CHECK:STDOUT: │ │ ╭─BoolLiteralFalse 'false' +// CHECK:STDOUT: │ │ ╭─PrefixOperatorMinusMinus '--' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/package_expr/basic.carbon b/toolchain/parse/testdata/package_expr/basic.carbon index dc6f472d5650..c431b48ba60c 100644 --- a/toolchain/parse/testdata/package_expr/basic.carbon +++ b/toolchain/parse/testdata/package_expr/basic.carbon @@ -11,20 +11,19 @@ var x: package.Foo = package.Bar; // CHECK:STDOUT: - filename: basic.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'PackageExpr', text: 'package'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'PackageExpr', text: 'package'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Bar'}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ╭─PackageExpr 'package' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameNotBeforeSignature 'Foo' +// CHECK:STDOUT: │ │ ├─MemberAccessExpr '.' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─PackageExpr 'package' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'Bar' +// CHECK:STDOUT: │ ├─MemberAccessExpr '.' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/package_expr/core.carbon b/toolchain/parse/testdata/package_expr/core.carbon index 10cae51e3361..e77ae899176f 100644 --- a/toolchain/parse/testdata/package_expr/core.carbon +++ b/toolchain/parse/testdata/package_expr/core.carbon @@ -11,20 +11,19 @@ var x: Core.Foo = Core.Bar; // CHECK:STDOUT: - filename: core.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'CoreNameExpr', text: 'Core'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'CoreNameExpr', text: 'Core'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Bar'}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ╭─CoreNameExpr 'Core' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameNotBeforeSignature 'Foo' +// CHECK:STDOUT: │ │ ├─MemberAccessExpr '.' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─CoreNameExpr 'Core' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'Bar' +// CHECK:STDOUT: │ ├─MemberAccessExpr '.' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/package_expr/fail_in_name.carbon b/toolchain/parse/testdata/package_expr/fail_in_name.carbon index e8efdcaac3e9..abcb3d3f0783 100644 --- a/toolchain/parse/testdata/package_expr/fail_in_name.carbon +++ b/toolchain/parse/testdata/package_expr/fail_in_name.carbon @@ -39,25 +39,24 @@ class package.C { } // CHECK:STDOUT: - filename: fail_in_name.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'PackageExpr', text: 'package'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'n'}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'PackageExpr', text: 'package'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'val'}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'NamespaceStart', text: 'namespace'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: 'package', has_error: yes}, -// CHECK:STDOUT: {kind: 'Namespace', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: 'package', has_error: yes}, -// CHECK:STDOUT: {kind: 'ClassDecl', text: '}', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─PackageExpr 'package' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'n' +// CHECK:STDOUT: │ │ ╭─MemberAccessExpr '.' +// CHECK:STDOUT: │ ├─VariablePattern 'var' has_error +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─PackageExpr 'package' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'val' +// CHECK:STDOUT: │ │ ╭─MemberAccessExpr '.' +// CHECK:STDOUT: │ ├─VariablePattern 'var' has_error +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: │ ╭─NamespaceStart 'namespace' +// CHECK:STDOUT: │ ├─InvalidParse 'package' has_error +// CHECK:STDOUT: ├─Namespace ';' has_error +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─InvalidParse 'package' has_error +// CHECK:STDOUT: ├─ClassDecl '}' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/package_expr/fail_standalone.carbon b/toolchain/parse/testdata/package_expr/fail_standalone.carbon index aadcb2d4dc3b..5f8d6762ec5f 100644 --- a/toolchain/parse/testdata/package_expr/fail_standalone.carbon +++ b/toolchain/parse/testdata/package_expr/fail_standalone.carbon @@ -17,15 +17,14 @@ fn F() { } // CHECK:STDOUT: - filename: fail_standalone.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'PackageExpr', text: 'package'}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─PackageExpr 'package' +// CHECK:STDOUT: │ ├─ExprStatement ';' has_error +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/export.carbon b/toolchain/parse/testdata/packages/export.carbon index a9a418a10717..5a1ae369e8f5 100644 --- a/toolchain/parse/testdata/packages/export.carbon +++ b/toolchain/parse/testdata/packages/export.carbon @@ -136,160 +136,146 @@ impl package Pkg; export Foo; // CHECK:STDOUT: - filename: lib.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LibraryIntroducer', text: 'library'}, -// CHECK:STDOUT: {kind: 'LibraryName', text: '"lib"'}, -// CHECK:STDOUT: {kind: 'LibraryDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LibraryIntroducer 'library' +// CHECK:STDOUT: │ ├─LibraryName '"lib"' +// CHECK:STDOUT: ├─LibraryDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: name.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'Pkg'}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExportIntroducer', text: 'export'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'ExportDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'Pkg' +// CHECK:STDOUT: ├─PackageDecl ';' +// CHECK:STDOUT: │ ╭─ExportIntroducer 'export' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Foo' +// CHECK:STDOUT: ├─ExportDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: qual_name.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'Pkg'}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExportIntroducer', text: 'export'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'IdentifierNameQualifierWithoutParams', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Bar'}, -// CHECK:STDOUT: {kind: 'ExportDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'Pkg' +// CHECK:STDOUT: ├─PackageDecl ';' +// CHECK:STDOUT: │ ╭─ExportIntroducer 'export' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'Foo' +// CHECK:STDOUT: │ ├─IdentifierNameQualifierWithoutParams '.' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Bar' +// CHECK:STDOUT: ├─ExportDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_expr.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'Pkg'}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExportIntroducer', text: 'export'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '(', has_error: yes}, -// CHECK:STDOUT: {kind: 'ExportDecl', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'Pkg' +// CHECK:STDOUT: ├─PackageDecl ';' +// CHECK:STDOUT: │ ╭─ExportIntroducer 'export' +// CHECK:STDOUT: │ ├─InvalidParse '(' has_error +// CHECK:STDOUT: ├─ExportDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_package_in_name.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'Pkg'}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExportIntroducer', text: 'export'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: 'package', has_error: yes}, -// CHECK:STDOUT: {kind: 'ExportDecl', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'Pkg' +// CHECK:STDOUT: ├─PackageDecl ';' +// CHECK:STDOUT: │ ╭─ExportIntroducer 'export' +// CHECK:STDOUT: │ ├─InvalidParse 'package' has_error +// CHECK:STDOUT: ├─ExportDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_keyword_only -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'Pkg'}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExportIntroducer', text: 'export'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '', has_error: yes}, -// CHECK:STDOUT: {kind: 'ExportDecl', text: 'export', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'Pkg' +// CHECK:STDOUT: ├─PackageDecl ';' +// CHECK:STDOUT: │ ╭─ExportIntroducer 'export' +// CHECK:STDOUT: │ ├─InvalidParse '' has_error +// CHECK:STDOUT: ├─ExportDecl 'export' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_no_name.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'Pkg'}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExportIntroducer', text: 'export'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ';', has_error: yes}, -// CHECK:STDOUT: {kind: 'ExportDecl', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'Pkg' +// CHECK:STDOUT: ├─PackageDecl ';' +// CHECK:STDOUT: │ ╭─ExportIntroducer 'export' +// CHECK:STDOUT: │ ├─InvalidParse ';' has_error +// CHECK:STDOUT: ├─ExportDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_no_semi.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'Pkg'}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExportIntroducer', text: 'export'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'ExportDecl', text: 'Foo', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'Pkg' +// CHECK:STDOUT: ├─PackageDecl ';' +// CHECK:STDOUT: │ ╭─ExportIntroducer 'export' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Foo' +// CHECK:STDOUT: ├─ExportDecl 'Foo' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_incomplete_qual_name.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'Pkg'}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExportIntroducer', text: 'export'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'IdentifierNameQualifierWithoutParams', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ';', has_error: yes}, -// CHECK:STDOUT: {kind: 'ExportDecl', text: ';', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'Pkg' +// CHECK:STDOUT: ├─PackageDecl ';' +// CHECK:STDOUT: │ ╭─ExportIntroducer 'export' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'Foo' +// CHECK:STDOUT: │ ├─IdentifierNameQualifierWithoutParams '.' +// CHECK:STDOUT: │ ├─InvalidParse ';' has_error +// CHECK:STDOUT: ├─ExportDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_incomplete_qual_name2.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'Pkg'}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExportIntroducer', text: 'export'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '.', has_error: yes}, -// CHECK:STDOUT: {kind: 'ExportDecl', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'Pkg' +// CHECK:STDOUT: ├─PackageDecl ';' +// CHECK:STDOUT: │ ╭─ExportIntroducer 'export' +// CHECK:STDOUT: │ ├─InvalidParse '.' has_error +// CHECK:STDOUT: ├─ExportDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: after_decl.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'Pkg'}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'C'}, -// CHECK:STDOUT: {kind: 'ClassDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExportIntroducer', text: 'export'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'ExportDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'Pkg' +// CHECK:STDOUT: ├─PackageDecl ';' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'C' +// CHECK:STDOUT: ├─ClassDecl ';' +// CHECK:STDOUT: │ ╭─ExportIntroducer 'export' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Foo' +// CHECK:STDOUT: ├─ExportDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_before_import.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'Pkg'}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExportIntroducer', text: 'export'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'ExportDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'Pkg' +// CHECK:STDOUT: ├─PackageDecl ';' +// CHECK:STDOUT: │ ╭─ExportIntroducer 'export' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Foo' +// CHECK:STDOUT: ├─ExportDecl ';' +// CHECK:STDOUT: │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: ├─ImportDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_in_default_library.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ExportIntroducer', text: 'export'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'ExportDecl', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ExportIntroducer 'export' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Foo' +// CHECK:STDOUT: ├─ExportDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_in_impl.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'ImplModifier', text: 'impl'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'Pkg'}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExportIntroducer', text: 'export'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'ExportDecl', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: │ ├─ImplModifier 'impl' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'Pkg' +// CHECK:STDOUT: ├─PackageDecl ';' +// CHECK:STDOUT: │ ╭─ExportIntroducer 'export' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Foo' +// CHECK:STDOUT: ├─ExportDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/import/after_import.carbon b/toolchain/parse/testdata/packages/import/after_import.carbon index 6a78be5fa57d..a69eaa02be07 100644 --- a/toolchain/parse/testdata/packages/import/after_import.carbon +++ b/toolchain/parse/testdata/packages/import/after_import.carbon @@ -12,13 +12,12 @@ import A; import B; // CHECK:STDOUT: - filename: after_import.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'A'}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'B'}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'A' +// CHECK:STDOUT: ├─ImportDecl ';' +// CHECK:STDOUT: │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'B' +// CHECK:STDOUT: ├─ImportDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/import/after_package.carbon b/toolchain/parse/testdata/packages/import/after_package.carbon index c88fba4e0ebf..a99133e6c807 100644 --- a/toolchain/parse/testdata/packages/import/after_package.carbon +++ b/toolchain/parse/testdata/packages/import/after_package.carbon @@ -13,13 +13,12 @@ package A; import B; // CHECK:STDOUT: - filename: after_package.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'A'}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'B'}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'A' +// CHECK:STDOUT: ├─PackageDecl ';' +// CHECK:STDOUT: │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'B' +// CHECK:STDOUT: ├─ImportDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/import/basic.carbon b/toolchain/parse/testdata/packages/import/basic.carbon index 552ed1f5f995..65d562707f98 100644 --- a/toolchain/parse/testdata/packages/import/basic.carbon +++ b/toolchain/parse/testdata/packages/import/basic.carbon @@ -11,10 +11,9 @@ import Geometry; // CHECK:STDOUT: - filename: basic.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'Geometry'}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'Geometry' +// CHECK:STDOUT: ├─ImportDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/import/core.carbon b/toolchain/parse/testdata/packages/import/core.carbon index 1927b4f8ef9f..f57727ab3758 100644 --- a/toolchain/parse/testdata/packages/import/core.carbon +++ b/toolchain/parse/testdata/packages/import/core.carbon @@ -13,15 +13,14 @@ import Core; import Core library "prelude"; // CHECK:STDOUT: - filename: core.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'CorePackageName', text: 'Core'}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'CorePackageName', text: 'Core'}, -// CHECK:STDOUT: {kind: 'LibraryName', text: '"prelude"'}, -// CHECK:STDOUT: {kind: 'LibrarySpecifier', text: 'library', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: │ ├─CorePackageName 'Core' +// CHECK:STDOUT: ├─ImportDecl ';' +// CHECK:STDOUT: │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: │ ├─CorePackageName 'Core' +// CHECK:STDOUT: │ │ ╭─LibraryName '"prelude"' +// CHECK:STDOUT: │ ├─LibrarySpecifier 'library' +// CHECK:STDOUT: ├─ImportDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/import/cpp_inline.carbon b/toolchain/parse/testdata/packages/import/cpp_inline.carbon index 90d1fd6ba7a3..197372ea8014 100644 --- a/toolchain/parse/testdata/packages/import/cpp_inline.carbon +++ b/toolchain/parse/testdata/packages/import/cpp_inline.carbon @@ -129,121 +129,112 @@ int n; // the last CHECK:STDOUT line below. // CHECK:STDOUT: - filename: fail_bad_syntax.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'CppPackageName', text: 'Cpp'}, -// CHECK:STDOUT: {kind: 'InlineImportBody', text: ';', has_error: yes}, -// CHECK:STDOUT: {kind: 'InlineImportSpecifier', text: 'inline', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: ';', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'CppPackageName', text: 'Cpp'}, -// CHECK:STDOUT: {kind: 'InlineImportBody', text: 'library', has_error: yes}, -// CHECK:STDOUT: {kind: 'InlineImportSpecifier', text: 'inline', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: ';', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'CppPackageName', text: 'Cpp'}, -// CHECK:STDOUT: {kind: 'LibraryName', text: '"foo.h"'}, -// CHECK:STDOUT: {kind: 'LibrarySpecifier', text: 'library', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: ';', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'LibraryName', text: '"foo.h"'}, -// CHECK:STDOUT: {kind: 'LibrarySpecifier', text: 'library', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: ';', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: │ ├─CppPackageName 'Cpp' +// CHECK:STDOUT: │ │ ╭─InlineImportBody ';' has_error +// CHECK:STDOUT: │ ├─InlineImportSpecifier 'inline' +// CHECK:STDOUT: ├─ImportDecl ';' has_error +// CHECK:STDOUT: │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: │ ├─CppPackageName 'Cpp' +// CHECK:STDOUT: │ │ ╭─InlineImportBody 'library' has_error +// CHECK:STDOUT: │ ├─InlineImportSpecifier 'inline' +// CHECK:STDOUT: ├─ImportDecl ';' has_error +// CHECK:STDOUT: │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: │ ├─CppPackageName 'Cpp' +// CHECK:STDOUT: │ │ ╭─LibraryName '"foo.h"' +// CHECK:STDOUT: │ ├─LibrarySpecifier 'library' +// CHECK:STDOUT: ├─ImportDecl ';' has_error +// CHECK:STDOUT: │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: │ │ ╭─LibraryName '"foo.h"' +// CHECK:STDOUT: │ ├─LibrarySpecifier 'library' +// CHECK:STDOUT: ├─ImportDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_no_semi_at_eof.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'CppPackageName', text: 'Cpp'}, -// CHECK:STDOUT: {kind: 'InlineImportBody', text: '', has_error: yes}, -// CHECK:STDOUT: {kind: 'InlineImportSpecifier', text: 'inline', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: 'inline', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: │ ├─CppPackageName 'Cpp' +// CHECK:STDOUT: │ │ ╭─InlineImportBody '' has_error +// CHECK:STDOUT: │ ├─InlineImportSpecifier 'inline' +// CHECK:STDOUT: ├─ImportDecl 'inline' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_package_inline.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'NotCpp'}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'NotCpp' +// CHECK:STDOUT: ├─PackageDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_library_inline.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LibraryIntroducer', text: 'library'}, -// CHECK:STDOUT: {kind: 'LibraryName', text: '"foo.h"'}, -// CHECK:STDOUT: {kind: 'LibraryDecl', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LibraryIntroducer 'library' +// CHECK:STDOUT: │ ├─LibraryName '"foo.h"' +// CHECK:STDOUT: ├─LibraryDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: wrong_package.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'NotCpp'}, -// CHECK:STDOUT: {kind: 'InlineImportBody', text: '"bar"'}, -// CHECK:STDOUT: {kind: 'InlineImportSpecifier', text: 'inline', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'NotCpp' +// CHECK:STDOUT: │ │ ╭─InlineImportBody '"bar"' +// CHECK:STDOUT: │ ├─InlineImportSpecifier 'inline' +// CHECK:STDOUT: ├─ImportDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: valid_syntax.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'CppPackageName', text: 'Cpp'}, -// CHECK:STDOUT: {kind: 'InlineImportBody', text: '"int m;"'}, -// CHECK:STDOUT: {kind: 'InlineImportSpecifier', text: 'inline', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'CppPackageName', text: 'Cpp'}, -// CHECK:STDOUT: {kind: 'InlineImportBody', text: '''' +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: │ ├─CppPackageName 'Cpp' +// CHECK:STDOUT: │ │ ╭─InlineImportBody '"int m;"' +// CHECK:STDOUT: │ ├─InlineImportSpecifier 'inline' +// CHECK:STDOUT: ├─ImportDecl ';' +// CHECK:STDOUT: │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: │ ├─CppPackageName 'Cpp' +// CHECK:STDOUT: │ │ ╭─InlineImportBody '''' // CHECK:STDOUT: // C++ comment. // CHECK:STDOUT: int n; -// CHECK:STDOUT: ''''}, -// CHECK:STDOUT: {kind: 'InlineImportSpecifier', text: 'inline', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: '''' +// CHECK:STDOUT: │ ├─InlineImportSpecifier 'inline' +// CHECK:STDOUT: ├─ImportDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: inline_cpp.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'InlineIntroducer', text: 'inline'}, -// CHECK:STDOUT: {kind: 'CppNameExpr', text: 'Cpp'}, -// CHECK:STDOUT: {kind: 'InlineImportBody', text: '''' +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─InlineIntroducer 'inline' +// CHECK:STDOUT: │ ├─CppNameExpr 'Cpp' +// CHECK:STDOUT: │ ├─InlineImportBody '''' // CHECK:STDOUT: int n; -// CHECK:STDOUT: ''''}, -// CHECK:STDOUT: {kind: 'InlineCppDecl', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: '''' +// CHECK:STDOUT: ├─InlineCppDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_inline_cpp_syntax_errors.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'InlineIntroducer', text: 'inline'}, -// CHECK:STDOUT: {kind: 'InlineCppDecl', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InlineIntroducer', text: 'inline'}, -// CHECK:STDOUT: {kind: 'InlineCppDecl', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InlineIntroducer', text: 'inline'}, -// CHECK:STDOUT: {kind: 'InlineCppDecl', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InlineIntroducer', text: 'inline'}, -// CHECK:STDOUT: {kind: 'CppNameExpr', text: 'Cpp'}, -// CHECK:STDOUT: {kind: 'InlineCppDecl', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'InlineIntroducer', text: 'inline'}, -// CHECK:STDOUT: {kind: 'CppNameExpr', text: 'Cpp'}, -// CHECK:STDOUT: {kind: 'InlineCppDecl', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'InlineIntroducer', text: 'inline'}, -// CHECK:STDOUT: {kind: 'CppNameExpr', text: 'Cpp'}, -// CHECK:STDOUT: {kind: 'InlineImportBody', text: '''' +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─InlineIntroducer 'inline' +// CHECK:STDOUT: ├─InlineCppDecl ';' has_error +// CHECK:STDOUT: │ ╭─InlineIntroducer 'inline' +// CHECK:STDOUT: ├─InlineCppDecl ';' has_error +// CHECK:STDOUT: │ ╭─InlineIntroducer 'inline' +// CHECK:STDOUT: ├─InlineCppDecl ';' has_error +// CHECK:STDOUT: │ ╭─InlineIntroducer 'inline' +// CHECK:STDOUT: │ ├─CppNameExpr 'Cpp' +// CHECK:STDOUT: ├─InlineCppDecl ';' has_error +// CHECK:STDOUT: │ ╭─InlineIntroducer 'inline' +// CHECK:STDOUT: │ ├─CppNameExpr 'Cpp' +// CHECK:STDOUT: ├─InlineCppDecl ';' has_error +// CHECK:STDOUT: │ ╭─InlineIntroducer 'inline' +// CHECK:STDOUT: │ ├─CppNameExpr 'Cpp' +// CHECK:STDOUT: │ ├─InlineImportBody '''' // CHECK:STDOUT: int n; -// CHECK:STDOUT: ''''}, -// CHECK:STDOUT: {kind: 'InlineCppDecl', text: '''' +// CHECK:STDOUT: '''' +// CHECK:STDOUT: ├─InlineCppDecl '''' // CHECK:STDOUT: int n; -// CHECK:STDOUT: '''', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: '''' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: eof.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/import/current_package_library.carbon b/toolchain/parse/testdata/packages/import/current_package_library.carbon index 319b80501a9b..39c900c4d39b 100644 --- a/toolchain/parse/testdata/packages/import/current_package_library.carbon +++ b/toolchain/parse/testdata/packages/import/current_package_library.carbon @@ -17,20 +17,18 @@ import library default; import library "Shapes"; // CHECK:STDOUT: - filename: default.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'DefaultLibrary', text: 'default'}, -// CHECK:STDOUT: {kind: 'LibrarySpecifier', text: 'library', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: │ │ ╭─DefaultLibrary 'default' +// CHECK:STDOUT: │ ├─LibrarySpecifier 'library' +// CHECK:STDOUT: ├─ImportDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: named.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'LibraryName', text: '"Shapes"'}, -// CHECK:STDOUT: {kind: 'LibrarySpecifier', text: 'library', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: │ │ ╭─LibraryName '"Shapes"' +// CHECK:STDOUT: │ ├─LibrarySpecifier 'library' +// CHECK:STDOUT: ├─ImportDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/import/export.carbon b/toolchain/parse/testdata/packages/import/export.carbon index 3d2d12d72294..765524e9eeff 100644 --- a/toolchain/parse/testdata/packages/import/export.carbon +++ b/toolchain/parse/testdata/packages/import/export.carbon @@ -66,83 +66,77 @@ impl package Pkg; export import library "lib"; // CHECK:STDOUT: - filename: fail_package.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'Pkg'}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'ExportModifier', text: 'export'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'Bar'}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: ';', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'Pkg' +// CHECK:STDOUT: ├─PackageDecl ';' +// CHECK:STDOUT: │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: │ ├─ExportModifier 'export' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'Bar' +// CHECK:STDOUT: ├─ImportDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: default.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'Pkg'}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'ExportModifier', text: 'export'}, -// CHECK:STDOUT: {kind: 'DefaultLibrary', text: 'default'}, -// CHECK:STDOUT: {kind: 'LibrarySpecifier', text: 'library', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'Pkg' +// CHECK:STDOUT: ├─PackageDecl ';' +// CHECK:STDOUT: │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: │ ├─ExportModifier 'export' +// CHECK:STDOUT: │ │ ╭─DefaultLibrary 'default' +// CHECK:STDOUT: │ ├─LibrarySpecifier 'library' +// CHECK:STDOUT: ├─ImportDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: named.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'Pkg'}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'ExportModifier', text: 'export'}, -// CHECK:STDOUT: {kind: 'LibraryName', text: '"lib"'}, -// CHECK:STDOUT: {kind: 'LibrarySpecifier', text: 'library', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'Pkg' +// CHECK:STDOUT: ├─PackageDecl ';' +// CHECK:STDOUT: │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: │ ├─ExportModifier 'export' +// CHECK:STDOUT: │ │ ╭─LibraryName '"lib"' +// CHECK:STDOUT: │ ├─LibrarySpecifier 'library' +// CHECK:STDOUT: ├─ImportDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_order.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'Pkg'}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'ExportModifier', text: 'export'}, -// CHECK:STDOUT: {kind: 'LibraryName', text: '"a"'}, -// CHECK:STDOUT: {kind: 'LibrarySpecifier', text: 'library', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'C'}, -// CHECK:STDOUT: {kind: 'ClassDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'ExportModifier', text: 'export'}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'Pkg' +// CHECK:STDOUT: ├─PackageDecl ';' +// CHECK:STDOUT: │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: │ ├─ExportModifier 'export' +// CHECK:STDOUT: │ │ ╭─LibraryName '"a"' +// CHECK:STDOUT: │ ├─LibrarySpecifier 'library' +// CHECK:STDOUT: ├─ImportDecl ';' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'C' +// CHECK:STDOUT: ├─ClassDecl ';' +// CHECK:STDOUT: │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: │ ├─ExportModifier 'export' +// CHECK:STDOUT: ├─ImportDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_in_default_library.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'ExportModifier', text: 'export'}, -// CHECK:STDOUT: {kind: 'LibraryName', text: '"lib"'}, -// CHECK:STDOUT: {kind: 'LibrarySpecifier', text: 'library', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: ';', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: │ ├─ExportModifier 'export' +// CHECK:STDOUT: │ │ ╭─LibraryName '"lib"' +// CHECK:STDOUT: │ ├─LibrarySpecifier 'library' +// CHECK:STDOUT: ├─ImportDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_in_impl.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'ImplModifier', text: 'impl'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'Pkg'}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'ExportModifier', text: 'export'}, -// CHECK:STDOUT: {kind: 'LibraryName', text: '"lib"'}, -// CHECK:STDOUT: {kind: 'LibrarySpecifier', text: 'library', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: ';', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: │ ├─ImplModifier 'impl' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'Pkg' +// CHECK:STDOUT: ├─PackageDecl ';' +// CHECK:STDOUT: │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: │ ├─ExportModifier 'export' +// CHECK:STDOUT: │ │ ╭─LibraryName '"lib"' +// CHECK:STDOUT: │ ├─LibrarySpecifier 'library' +// CHECK:STDOUT: ├─ImportDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/import/fail_after_decl.carbon b/toolchain/parse/testdata/packages/import/fail_after_decl.carbon index d2bbd085b4b0..dae4fa0433bf 100644 --- a/toolchain/parse/testdata/packages/import/fail_after_decl.carbon +++ b/toolchain/parse/testdata/packages/import/fail_after_decl.carbon @@ -20,14 +20,13 @@ fn A(); import B; // CHECK:STDOUT: - filename: fail_after_decl.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'A'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'A' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: ├─ImportDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/import/fail_after_decl_repeated.carbon b/toolchain/parse/testdata/packages/import/fail_after_decl_repeated.carbon index 786fd7a31e3e..c770f638f430 100644 --- a/toolchain/parse/testdata/packages/import/fail_after_decl_repeated.carbon +++ b/toolchain/parse/testdata/packages/import/fail_after_decl_repeated.carbon @@ -44,27 +44,26 @@ import F; import G; // CHECK:STDOUT: - filename: fail_after_decl_repeated.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'A'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'E'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'A' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: ├─ImportDecl ';' has_error +// CHECK:STDOUT: │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: ├─ImportDecl ';' has_error +// CHECK:STDOUT: │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: ├─PackageDecl ';' has_error +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'E' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: ├─ImportDecl ';' has_error +// CHECK:STDOUT: │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: ├─ImportDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/import/fail_extra_string.carbon b/toolchain/parse/testdata/packages/import/fail_extra_string.carbon index b4b8c6d2b129..1688af7e6cf2 100644 --- a/toolchain/parse/testdata/packages/import/fail_extra_string.carbon +++ b/toolchain/parse/testdata/packages/import/fail_extra_string.carbon @@ -15,12 +15,11 @@ import Foo library "bar" "baz"; // CHECK:STDOUT: - filename: fail_extra_string.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'LibraryName', text: '"bar"'}, -// CHECK:STDOUT: {kind: 'LibrarySpecifier', text: 'library', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: ';', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'Foo' +// CHECK:STDOUT: │ │ ╭─LibraryName '"bar"' +// CHECK:STDOUT: │ ├─LibrarySpecifier 'library' +// CHECK:STDOUT: ├─ImportDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/import/fail_in_nested_scope.carbon b/toolchain/parse/testdata/packages/import/fail_in_nested_scope.carbon index 1d6d3ef99ff9..597ae609e151 100644 --- a/toolchain/parse/testdata/packages/import/fail_in_nested_scope.carbon +++ b/toolchain/parse/testdata/packages/import/fail_in_nested_scope.carbon @@ -31,21 +31,20 @@ fn F() { } // CHECK:STDOUT: - filename: fail_in_nested_scope.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'A'}, -// CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'A' +// CHECK:STDOUT: │ ╭─ClassDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: │ ├─ImportDecl ';' has_error +// CHECK:STDOUT: ├─ClassDefinition '}' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: │ ├─ImportDecl ';' has_error +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/import/fail_library_is_identifier.carbon b/toolchain/parse/testdata/packages/import/fail_library_is_identifier.carbon index 84a78be82a89..519844b8c7a3 100644 --- a/toolchain/parse/testdata/packages/import/fail_library_is_identifier.carbon +++ b/toolchain/parse/testdata/packages/import/fail_library_is_identifier.carbon @@ -15,12 +15,11 @@ import Geometry library Shapes; // CHECK:STDOUT: - filename: fail_library_is_identifier.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'Geometry'}, -// CHECK:STDOUT: {kind: 'LibraryName', text: 'Shapes', has_error: yes}, -// CHECK:STDOUT: {kind: 'LibrarySpecifier', text: 'library', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: ';', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'Geometry' +// CHECK:STDOUT: │ │ ╭─LibraryName 'Shapes' has_error +// CHECK:STDOUT: │ ├─LibrarySpecifier 'library' +// CHECK:STDOUT: ├─ImportDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/import/fail_name_is_keyword.carbon b/toolchain/parse/testdata/packages/import/fail_name_is_keyword.carbon index 64191bc6ecb8..94ee1801dcef 100644 --- a/toolchain/parse/testdata/packages/import/fail_name_is_keyword.carbon +++ b/toolchain/parse/testdata/packages/import/fail_name_is_keyword.carbon @@ -15,9 +15,8 @@ import fn; // CHECK:STDOUT: - filename: fail_name_is_keyword.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: ├─ImportDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/import/fail_no_name.carbon b/toolchain/parse/testdata/packages/import/fail_no_name.carbon index 9a15b78449d1..f3f2c6239584 100644 --- a/toolchain/parse/testdata/packages/import/fail_no_name.carbon +++ b/toolchain/parse/testdata/packages/import/fail_no_name.carbon @@ -15,9 +15,8 @@ import; // CHECK:STDOUT: - filename: fail_no_name.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: ├─ImportDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/import/fail_no_semi.carbon b/toolchain/parse/testdata/packages/import/fail_no_semi.carbon index 9f554b7dd628..5aca6118dc68 100644 --- a/toolchain/parse/testdata/packages/import/fail_no_semi.carbon +++ b/toolchain/parse/testdata/packages/import/fail_no_semi.carbon @@ -10,15 +10,14 @@ import Geometry -// CHECK:STDERR: fail_no_semi.carbon:[[@LINE+11]]:21: error: `import` declarations must end with a `;` [ExpectedDeclSemi] -// CHECK:STDERR: // CHECK:STDOUT: ] -// CHECK:STDERR: ^ +// CHECK:STDERR: fail_no_semi.carbon:[[@LINE+10]]:26: error: `import` declarations must end with a `;` [ExpectedDeclSemi] +// CHECK:STDERR: // CHECK:STDOUT: (root) +// CHECK:STDERR: ^ // CHECK:STDERR: // CHECK:STDOUT: - filename: fail_no_semi.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'Geometry'}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: 'Geometry', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'Geometry' +// CHECK:STDOUT: ├─ImportDecl 'Geometry' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/import/fail_omit_library_keyword.carbon b/toolchain/parse/testdata/packages/import/fail_omit_library_keyword.carbon index ec0518fa90b4..e9b7d58b3d2a 100644 --- a/toolchain/parse/testdata/packages/import/fail_omit_library_keyword.carbon +++ b/toolchain/parse/testdata/packages/import/fail_omit_library_keyword.carbon @@ -15,10 +15,9 @@ import Geometry "Shapes"; // CHECK:STDOUT: - filename: fail_omit_library_keyword.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'Geometry'}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'Geometry' +// CHECK:STDOUT: ├─ImportDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/import/fail_type.carbon b/toolchain/parse/testdata/packages/import/fail_type.carbon index ac6929c3af95..67f77f13c331 100644 --- a/toolchain/parse/testdata/packages/import/fail_type.carbon +++ b/toolchain/parse/testdata/packages/import/fail_type.carbon @@ -15,10 +15,9 @@ import Geometry api; // CHECK:STDOUT: - filename: fail_type.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'Geometry'}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'Geometry' +// CHECK:STDOUT: ├─ImportDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/import/library.carbon b/toolchain/parse/testdata/packages/import/library.carbon index 1eda27166286..5255766588d0 100644 --- a/toolchain/parse/testdata/packages/import/library.carbon +++ b/toolchain/parse/testdata/packages/import/library.carbon @@ -11,12 +11,11 @@ import Geometry library "Shapes"; // CHECK:STDOUT: - filename: library.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'Geometry'}, -// CHECK:STDOUT: {kind: 'LibraryName', text: '"Shapes"'}, -// CHECK:STDOUT: {kind: 'LibrarySpecifier', text: 'library', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'Geometry' +// CHECK:STDOUT: │ │ ╭─LibraryName '"Shapes"' +// CHECK:STDOUT: │ ├─LibrarySpecifier 'library' +// CHECK:STDOUT: ├─ImportDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/import/ordering.carbon b/toolchain/parse/testdata/packages/import/ordering.carbon index 63ade14bb73c..3b404b8b44ec 100644 --- a/toolchain/parse/testdata/packages/import/ordering.carbon +++ b/toolchain/parse/testdata/packages/import/ordering.carbon @@ -26,35 +26,32 @@ package A; import B; // CHECK:STDOUT: - filename: after_import.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'A'}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'B'}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'A' +// CHECK:STDOUT: ├─ImportDecl ';' +// CHECK:STDOUT: │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'B' +// CHECK:STDOUT: ├─ImportDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: after_library.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LibraryIntroducer', text: 'library'}, -// CHECK:STDOUT: {kind: 'LibraryName', text: '"after_library"'}, -// CHECK:STDOUT: {kind: 'LibraryDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'B'}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LibraryIntroducer 'library' +// CHECK:STDOUT: │ ├─LibraryName '"after_library"' +// CHECK:STDOUT: ├─LibraryDecl ';' +// CHECK:STDOUT: │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'B' +// CHECK:STDOUT: ├─ImportDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: after_package.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'A'}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'B'}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'A' +// CHECK:STDOUT: ├─PackageDecl ';' +// CHECK:STDOUT: │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'B' +// CHECK:STDOUT: ├─ImportDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/import/semi_before.carbon b/toolchain/parse/testdata/packages/import/semi_before.carbon index 4a7bf64e83e7..25d507491810 100644 --- a/toolchain/parse/testdata/packages/import/semi_before.carbon +++ b/toolchain/parse/testdata/packages/import/semi_before.carbon @@ -20,17 +20,16 @@ import Bar; ; // CHECK:STDOUT: - filename: semi_before.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'EmptyDecl', text: ';'}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'LibraryName', text: '"foo"'}, -// CHECK:STDOUT: {kind: 'LibrarySpecifier', text: 'library', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'EmptyDecl', text: ';'}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'Bar'}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'EmptyDecl', text: ';'}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: ├─EmptyDecl ';' +// CHECK:STDOUT: │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: │ │ ╭─LibraryName '"foo"' +// CHECK:STDOUT: │ ├─LibrarySpecifier 'library' +// CHECK:STDOUT: ├─ImportDecl ';' +// CHECK:STDOUT: ├─EmptyDecl ';' +// CHECK:STDOUT: │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'Bar' +// CHECK:STDOUT: ├─ImportDecl ';' +// CHECK:STDOUT: ├─EmptyDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/keyword_names.carbon b/toolchain/parse/testdata/packages/keyword_names.carbon index 0e74e4887cef..be277c5f1d00 100644 --- a/toolchain/parse/testdata/packages/keyword_names.carbon +++ b/toolchain/parse/testdata/packages/keyword_names.carbon @@ -17,26 +17,24 @@ var x: Core; var x: Cpp; // CHECK:STDOUT: - filename: core.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'CoreNameExpr', text: 'Core'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─CoreNameExpr 'Core' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: cpp.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'CppNameExpr', text: 'Cpp'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─CppNameExpr 'Cpp' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/library/basic.carbon b/toolchain/parse/testdata/packages/library/basic.carbon index 2f7d9d489762..330014788f2c 100644 --- a/toolchain/parse/testdata/packages/library/basic.carbon +++ b/toolchain/parse/testdata/packages/library/basic.carbon @@ -17,19 +17,17 @@ library default; impl library "[[@TEST_NAME]]"; // CHECK:STDOUT: - filename: default.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LibraryIntroducer', text: 'library'}, -// CHECK:STDOUT: {kind: 'DefaultLibrary', text: 'default'}, -// CHECK:STDOUT: {kind: 'LibraryDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LibraryIntroducer 'library' +// CHECK:STDOUT: │ ├─DefaultLibrary 'default' +// CHECK:STDOUT: ├─LibraryDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: named.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LibraryIntroducer', text: 'library'}, -// CHECK:STDOUT: {kind: 'ImplModifier', text: 'impl'}, -// CHECK:STDOUT: {kind: 'LibraryName', text: '"named"'}, -// CHECK:STDOUT: {kind: 'LibraryDecl', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LibraryIntroducer 'library' +// CHECK:STDOUT: │ ├─ImplModifier 'impl' +// CHECK:STDOUT: │ ├─LibraryName '"named"' +// CHECK:STDOUT: ├─LibraryDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/library/fail_in_nested_scope.carbon b/toolchain/parse/testdata/packages/library/fail_in_nested_scope.carbon index 3e87379af723..6100f4add684 100644 --- a/toolchain/parse/testdata/packages/library/fail_in_nested_scope.carbon +++ b/toolchain/parse/testdata/packages/library/fail_in_nested_scope.carbon @@ -57,37 +57,36 @@ fn F() { } // CHECK:STDOUT: - filename: fail_in_nested_scope.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'C'}, -// CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'LibraryIntroducer', text: 'library'}, -// CHECK:STDOUT: {kind: 'LibraryDecl', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'LibraryIntroducer', text: 'library'}, -// CHECK:STDOUT: {kind: 'LibraryDecl', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'C'}, -// CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'LibraryIntroducer', text: 'library'}, -// CHECK:STDOUT: {kind: 'ImplModifier', text: 'impl'}, -// CHECK:STDOUT: {kind: 'LibraryDecl', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'LibraryIntroducer', text: 'library'}, -// CHECK:STDOUT: {kind: 'ImplModifier', text: 'impl'}, -// CHECK:STDOUT: {kind: 'LibraryDecl', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'C' +// CHECK:STDOUT: │ ╭─ClassDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─LibraryIntroducer 'library' +// CHECK:STDOUT: │ ├─LibraryDecl ';' has_error +// CHECK:STDOUT: ├─ClassDefinition '}' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─LibraryIntroducer 'library' +// CHECK:STDOUT: │ ├─LibraryDecl ';' has_error +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'C' +// CHECK:STDOUT: │ ╭─ClassDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─LibraryIntroducer 'library' +// CHECK:STDOUT: │ │ ├─ImplModifier 'impl' +// CHECK:STDOUT: │ ├─LibraryDecl ';' has_error +// CHECK:STDOUT: ├─ClassDefinition '}' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─LibraryIntroducer 'library' +// CHECK:STDOUT: │ │ ├─ImplModifier 'impl' +// CHECK:STDOUT: │ ├─LibraryDecl ';' has_error +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/library/fail_invalid_name.carbon b/toolchain/parse/testdata/packages/library/fail_invalid_name.carbon index 9d15fabc1384..63702b00c859 100644 --- a/toolchain/parse/testdata/packages/library/fail_invalid_name.carbon +++ b/toolchain/parse/testdata/packages/library/fail_invalid_name.carbon @@ -52,51 +52,45 @@ library "[[@TEST_NAME]]" impl library "[[@TEST_NAME]]" -// CHECK:STDERR: fail_no_semi.carbon:[[@LINE+47]]:21: error: `library` declarations must end with a `;` [ExpectedDeclSemi] -// CHECK:STDERR: // CHECK:STDOUT: ] -// CHECK:STDERR: ^ +// CHECK:STDERR: fail_no_semi.carbon:[[@LINE+41]]:26: error: `library` declarations must end with a `;` [ExpectedDeclSemi] +// CHECK:STDERR: // CHECK:STDOUT: (root) +// CHECK:STDERR: ^ // CHECK:STDERR: // CHECK:STDOUT: - filename: fail_identifier.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LibraryIntroducer', text: 'library'}, -// CHECK:STDOUT: {kind: 'LibraryDecl', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LibraryIntroducer 'library' +// CHECK:STDOUT: ├─LibraryDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_raw_identifier.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LibraryIntroducer', text: 'library'}, -// CHECK:STDOUT: {kind: 'LibraryDecl', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LibraryIntroducer 'library' +// CHECK:STDOUT: ├─LibraryDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_missing.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LibraryIntroducer', text: 'library'}, -// CHECK:STDOUT: {kind: 'LibraryDecl', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LibraryIntroducer 'library' +// CHECK:STDOUT: ├─LibraryDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_missing_with_api.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LibraryIntroducer', text: 'library'}, -// CHECK:STDOUT: {kind: 'LibraryDecl', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LibraryIntroducer 'library' +// CHECK:STDOUT: ├─LibraryDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_trailing_impl.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LibraryIntroducer', text: 'library'}, -// CHECK:STDOUT: {kind: 'LibraryName', text: '"trailing_impl"'}, -// CHECK:STDOUT: {kind: 'LibraryDecl', text: 'impl', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LibraryIntroducer 'library' +// CHECK:STDOUT: │ ├─LibraryName '"trailing_impl"' +// CHECK:STDOUT: ├─LibraryDecl 'impl' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_no_semi.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LibraryIntroducer', text: 'library'}, -// CHECK:STDOUT: {kind: 'LibraryName', text: '"no_semi"'}, -// CHECK:STDOUT: {kind: 'LibraryDecl', text: '"no_semi"', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LibraryIntroducer 'library' +// CHECK:STDOUT: │ ├─LibraryName '"no_semi"' +// CHECK:STDOUT: ├─LibraryDecl '"no_semi"' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/library/fail_semi_before.carbon b/toolchain/parse/testdata/packages/library/fail_semi_before.carbon index 00ec73b65c84..eff4e49da112 100644 --- a/toolchain/parse/testdata/packages/library/fail_semi_before.carbon +++ b/toolchain/parse/testdata/packages/library/fail_semi_before.carbon @@ -20,10 +20,9 @@ library "[[@TEST_NAME]]"; // CHECK:STDOUT: - filename: fail_semi_before.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'EmptyDecl', text: ';'}, -// CHECK:STDOUT: {kind: 'LibraryIntroducer', text: 'library'}, -// CHECK:STDOUT: {kind: 'LibraryDecl', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: ├─EmptyDecl ';' +// CHECK:STDOUT: │ ╭─LibraryIntroducer 'library' +// CHECK:STDOUT: ├─LibraryDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/library/fail_too_late.carbon b/toolchain/parse/testdata/packages/library/fail_too_late.carbon index 975cf4c32b19..9c1adbb38e5f 100644 --- a/toolchain/parse/testdata/packages/library/fail_too_late.carbon +++ b/toolchain/parse/testdata/packages/library/fail_too_late.carbon @@ -20,12 +20,11 @@ import Geometry; library "[[@TEST_NAME]]"; // CHECK:STDOUT: - filename: fail_too_late.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'Geometry'}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'LibraryIntroducer', text: 'library'}, -// CHECK:STDOUT: {kind: 'LibraryDecl', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'Geometry' +// CHECK:STDOUT: ├─ImportDecl ';' +// CHECK:STDOUT: │ ╭─LibraryIntroducer 'library' +// CHECK:STDOUT: ├─LibraryDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/package/api.carbon b/toolchain/parse/testdata/packages/package/api.carbon index b4b147bd2fd9..e3434c6ab1a4 100644 --- a/toolchain/parse/testdata/packages/package/api.carbon +++ b/toolchain/parse/testdata/packages/package/api.carbon @@ -11,10 +11,9 @@ package Geometry; // CHECK:STDOUT: - filename: api.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'Geometry'}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'Geometry' +// CHECK:STDOUT: ├─PackageDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/package/api_library.carbon b/toolchain/parse/testdata/packages/package/api_library.carbon index bb316eddc2e7..5463bdbabc4c 100644 --- a/toolchain/parse/testdata/packages/package/api_library.carbon +++ b/toolchain/parse/testdata/packages/package/api_library.carbon @@ -11,12 +11,11 @@ package Geometry library "[[@TEST_NAME]]"; // CHECK:STDOUT: - filename: api_library.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'Geometry'}, -// CHECK:STDOUT: {kind: 'LibraryName', text: '"api_library"'}, -// CHECK:STDOUT: {kind: 'LibrarySpecifier', text: 'library', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'Geometry' +// CHECK:STDOUT: │ │ ╭─LibraryName '"api_library"' +// CHECK:STDOUT: │ ├─LibrarySpecifier 'library' +// CHECK:STDOUT: ├─PackageDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/package/core.carbon b/toolchain/parse/testdata/packages/package/core.carbon index 86c5c7f3c117..a6416c3b4ea6 100644 --- a/toolchain/parse/testdata/packages/package/core.carbon +++ b/toolchain/parse/testdata/packages/package/core.carbon @@ -17,20 +17,18 @@ package Core; package Core library "prelude"; // CHECK:STDOUT: - filename: core.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'CorePackageName', text: 'Core'}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: │ ├─CorePackageName 'Core' +// CHECK:STDOUT: ├─PackageDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: core_with_library.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'CorePackageName', text: 'Core'}, -// CHECK:STDOUT: {kind: 'LibraryName', text: '"prelude"'}, -// CHECK:STDOUT: {kind: 'LibrarySpecifier', text: 'library', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: │ ├─CorePackageName 'Core' +// CHECK:STDOUT: │ │ ╭─LibraryName '"prelude"' +// CHECK:STDOUT: │ ├─LibrarySpecifier 'library' +// CHECK:STDOUT: ├─PackageDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/package/fail_after_decl.carbon b/toolchain/parse/testdata/packages/package/fail_after_decl.carbon index 21c6c34ae3ac..8f5057a105ad 100644 --- a/toolchain/parse/testdata/packages/package/fail_after_decl.carbon +++ b/toolchain/parse/testdata/packages/package/fail_after_decl.carbon @@ -20,14 +20,13 @@ fn A(); package B; // CHECK:STDOUT: - filename: fail_after_decl.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'A'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'A' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: ├─PackageDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/package/fail_after_import.carbon b/toolchain/parse/testdata/packages/package/fail_after_import.carbon index 664a586d9cac..aa7ab4680958 100644 --- a/toolchain/parse/testdata/packages/package/fail_after_import.carbon +++ b/toolchain/parse/testdata/packages/package/fail_after_import.carbon @@ -20,12 +20,11 @@ import A; package B; // CHECK:STDOUT: - filename: fail_after_import.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ImportIntroducer', text: 'import'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'A'}, -// CHECK:STDOUT: {kind: 'ImportDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ImportIntroducer 'import' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'A' +// CHECK:STDOUT: ├─ImportDecl ';' +// CHECK:STDOUT: │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: ├─PackageDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/package/fail_after_package.carbon b/toolchain/parse/testdata/packages/package/fail_after_package.carbon index 5818fe5425fa..d0804212d08b 100644 --- a/toolchain/parse/testdata/packages/package/fail_after_package.carbon +++ b/toolchain/parse/testdata/packages/package/fail_after_package.carbon @@ -19,12 +19,11 @@ package A; package B; // CHECK:STDOUT: - filename: fail_after_package.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'A'}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'A' +// CHECK:STDOUT: ├─PackageDecl ';' +// CHECK:STDOUT: │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: ├─PackageDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/package/fail_extra_string.carbon b/toolchain/parse/testdata/packages/package/fail_extra_string.carbon index 7cddc5feaf58..f82221d138b8 100644 --- a/toolchain/parse/testdata/packages/package/fail_extra_string.carbon +++ b/toolchain/parse/testdata/packages/package/fail_extra_string.carbon @@ -15,12 +15,11 @@ package Foo library "bar" "baz"; // CHECK:STDOUT: - filename: fail_extra_string.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'LibraryName', text: '"bar"'}, -// CHECK:STDOUT: {kind: 'LibrarySpecifier', text: 'library', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: ';', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'Foo' +// CHECK:STDOUT: │ │ ╭─LibraryName '"bar"' +// CHECK:STDOUT: │ ├─LibrarySpecifier 'library' +// CHECK:STDOUT: ├─PackageDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/package/fail_in_nested_scope.carbon b/toolchain/parse/testdata/packages/package/fail_in_nested_scope.carbon index 0ef1959891ec..08df389be83b 100644 --- a/toolchain/parse/testdata/packages/package/fail_in_nested_scope.carbon +++ b/toolchain/parse/testdata/packages/package/fail_in_nested_scope.carbon @@ -59,41 +59,40 @@ fn F() { } // CHECK:STDOUT: - filename: fail_in_nested_scope.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'C'}, -// CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'PackageExpr', text: 'package'}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'PackageExpr', text: 'package'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'P'}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'C'}, -// CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'ImplModifier', text: 'impl'}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'ImplModifier', text: 'impl'}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'C' +// CHECK:STDOUT: │ ╭─ClassDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: │ ├─PackageDecl ';' has_error +// CHECK:STDOUT: ├─ClassDefinition '}' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─PackageExpr 'package' +// CHECK:STDOUT: │ ├─ExprStatement ';' has_error +// CHECK:STDOUT: │ │ ╭─PackageExpr 'package' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'P' +// CHECK:STDOUT: │ │ ╭─MemberAccessExpr '.' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: │ ╭─ClassIntroducer 'class' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'C' +// CHECK:STDOUT: │ ╭─ClassDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: │ │ ├─ImplModifier 'impl' +// CHECK:STDOUT: │ ├─PackageDecl ';' has_error +// CHECK:STDOUT: ├─ClassDefinition '}' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: │ │ ├─ImplModifier 'impl' +// CHECK:STDOUT: │ ├─PackageDecl ';' has_error +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/package/fail_library_is_identifier.carbon b/toolchain/parse/testdata/packages/package/fail_library_is_identifier.carbon index f24f51f5ec8e..efef2403e007 100644 --- a/toolchain/parse/testdata/packages/package/fail_library_is_identifier.carbon +++ b/toolchain/parse/testdata/packages/package/fail_library_is_identifier.carbon @@ -15,12 +15,11 @@ package Geometry library Shapes; // CHECK:STDOUT: - filename: fail_library_is_identifier.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'Geometry'}, -// CHECK:STDOUT: {kind: 'LibraryName', text: 'Shapes', has_error: yes}, -// CHECK:STDOUT: {kind: 'LibrarySpecifier', text: 'library', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: ';', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'Geometry' +// CHECK:STDOUT: │ │ ╭─LibraryName 'Shapes' has_error +// CHECK:STDOUT: │ ├─LibrarySpecifier 'library' +// CHECK:STDOUT: ├─PackageDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/package/fail_library_skips_name.carbon b/toolchain/parse/testdata/packages/package/fail_library_skips_name.carbon index bf7a831b90c3..cb6542c5e245 100644 --- a/toolchain/parse/testdata/packages/package/fail_library_skips_name.carbon +++ b/toolchain/parse/testdata/packages/package/fail_library_skips_name.carbon @@ -15,9 +15,8 @@ package library "Shapes"; // CHECK:STDOUT: - filename: fail_library_skips_name.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: ├─PackageDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/package/fail_name_is_keyword.carbon b/toolchain/parse/testdata/packages/package/fail_name_is_keyword.carbon index e33629150eac..c1ead6a1c649 100644 --- a/toolchain/parse/testdata/packages/package/fail_name_is_keyword.carbon +++ b/toolchain/parse/testdata/packages/package/fail_name_is_keyword.carbon @@ -15,9 +15,8 @@ package fn; // CHECK:STDOUT: - filename: fail_name_is_keyword.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: ├─PackageDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/package/fail_no_name.carbon b/toolchain/parse/testdata/packages/package/fail_no_name.carbon index 0929534bff04..6c8107dee917 100644 --- a/toolchain/parse/testdata/packages/package/fail_no_name.carbon +++ b/toolchain/parse/testdata/packages/package/fail_no_name.carbon @@ -15,9 +15,8 @@ package; // CHECK:STDOUT: - filename: fail_no_name.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: ├─PackageDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/package/fail_no_semi.carbon b/toolchain/parse/testdata/packages/package/fail_no_semi.carbon index 30751a11b78a..fdb82ca4654b 100644 --- a/toolchain/parse/testdata/packages/package/fail_no_semi.carbon +++ b/toolchain/parse/testdata/packages/package/fail_no_semi.carbon @@ -10,15 +10,14 @@ package Geometry -// CHECK:STDERR: fail_no_semi.carbon:[[@LINE+11]]:21: error: `package` declarations must end with a `;` [ExpectedDeclSemi] -// CHECK:STDERR: // CHECK:STDOUT: ] -// CHECK:STDERR: ^ +// CHECK:STDERR: fail_no_semi.carbon:[[@LINE+10]]:26: error: `package` declarations must end with a `;` [ExpectedDeclSemi] +// CHECK:STDERR: // CHECK:STDOUT: (root) +// CHECK:STDERR: ^ // CHECK:STDERR: // CHECK:STDOUT: - filename: fail_no_semi.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'Geometry'}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: 'Geometry', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'Geometry' +// CHECK:STDOUT: ├─PackageDecl 'Geometry' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/package/fail_omit_library_keyword.carbon b/toolchain/parse/testdata/packages/package/fail_omit_library_keyword.carbon index 0bd109c75ac7..b9766b0ef4b7 100644 --- a/toolchain/parse/testdata/packages/package/fail_omit_library_keyword.carbon +++ b/toolchain/parse/testdata/packages/package/fail_omit_library_keyword.carbon @@ -15,10 +15,9 @@ package Geometry "Shapes"; // CHECK:STDOUT: - filename: fail_omit_library_keyword.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'Geometry'}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'Geometry' +// CHECK:STDOUT: ├─PackageDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/package/fail_semi_before.carbon b/toolchain/parse/testdata/packages/package/fail_semi_before.carbon index 8952c3e8d029..bb8d1a74e7ba 100644 --- a/toolchain/parse/testdata/packages/package/fail_semi_before.carbon +++ b/toolchain/parse/testdata/packages/package/fail_semi_before.carbon @@ -20,10 +20,9 @@ package Geometry; // CHECK:STDOUT: - filename: fail_semi_before.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'EmptyDecl', text: ';'}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: ├─EmptyDecl ';' +// CHECK:STDOUT: │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: ├─PackageDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/package/fail_trailing_impl.carbon b/toolchain/parse/testdata/packages/package/fail_trailing_impl.carbon index 7a15eb67d78a..454ad5a6c556 100644 --- a/toolchain/parse/testdata/packages/package/fail_trailing_impl.carbon +++ b/toolchain/parse/testdata/packages/package/fail_trailing_impl.carbon @@ -15,10 +15,9 @@ package Geometry impl; // CHECK:STDOUT: - filename: fail_trailing_impl.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'Geometry'}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'Geometry' +// CHECK:STDOUT: ├─PackageDecl ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/package/impl.carbon b/toolchain/parse/testdata/packages/package/impl.carbon index 94681df09ae6..adcf5c7d054f 100644 --- a/toolchain/parse/testdata/packages/package/impl.carbon +++ b/toolchain/parse/testdata/packages/package/impl.carbon @@ -25,45 +25,42 @@ impl package DisambiguateImplPackage; impl package.Name as package.Interface {} // CHECK:STDOUT: - filename: impl.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'ImplModifier', text: 'impl'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'Geometry'}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: │ ├─ImplModifier 'impl' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'Geometry' +// CHECK:STDOUT: ├─PackageDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: impl_disambiguate.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'ImplModifier', text: 'impl'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'DisambiguateImpl'}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ImplIntroducer', text: 'impl'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'ImplTypeAs', text: 'as', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Interface'}, -// CHECK:STDOUT: {kind: 'ImplDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ImplDefinition', text: '}', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: │ ├─ImplModifier 'impl' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'DisambiguateImpl' +// CHECK:STDOUT: ├─PackageDecl ';' +// CHECK:STDOUT: │ ╭─ImplIntroducer 'impl' +// CHECK:STDOUT: │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ ├─ImplTypeAs 'as' +// CHECK:STDOUT: │ ├─IdentifierNameExpr 'Interface' +// CHECK:STDOUT: │ ╭─ImplDefinitionStart '{' +// CHECK:STDOUT: ├─ImplDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: impl_package_disambiguate.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'ImplModifier', text: 'impl'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'DisambiguateImplPackage'}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ImplIntroducer', text: 'impl'}, -// CHECK:STDOUT: {kind: 'PackageExpr', text: 'package'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Name'}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ImplTypeAs', text: 'as', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PackageExpr', text: 'package'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Interface'}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ImplDefinitionStart', text: '{', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'ImplDefinition', text: '}', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: │ ├─ImplModifier 'impl' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'DisambiguateImplPackage' +// CHECK:STDOUT: ├─PackageDecl ';' +// CHECK:STDOUT: │ ╭─ImplIntroducer 'impl' +// CHECK:STDOUT: │ │ ╭─PackageExpr 'package' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'Name' +// CHECK:STDOUT: │ │ ╭─MemberAccessExpr '.' +// CHECK:STDOUT: │ ├─ImplTypeAs 'as' +// CHECK:STDOUT: │ │ ╭─PackageExpr 'package' +// CHECK:STDOUT: │ │ ├─IdentifierNameNotBeforeSignature 'Interface' +// CHECK:STDOUT: │ ├─MemberAccessExpr '.' +// CHECK:STDOUT: │ ╭─ImplDefinitionStart '{' +// CHECK:STDOUT: ├─ImplDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/package/impl_library.carbon b/toolchain/parse/testdata/packages/package/impl_library.carbon index d957155c2ee2..fd6a843170e3 100644 --- a/toolchain/parse/testdata/packages/package/impl_library.carbon +++ b/toolchain/parse/testdata/packages/package/impl_library.carbon @@ -11,13 +11,12 @@ impl package Geometry library "[[@TEST_NAME]]"; // CHECK:STDOUT: - filename: impl_library.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'ImplModifier', text: 'impl'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'Geometry'}, -// CHECK:STDOUT: {kind: 'LibraryName', text: '"impl_library"'}, -// CHECK:STDOUT: {kind: 'LibrarySpecifier', text: 'library', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: │ ├─ImplModifier 'impl' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'Geometry' +// CHECK:STDOUT: │ │ ╭─LibraryName '"impl_library"' +// CHECK:STDOUT: │ ├─LibrarySpecifier 'library' +// CHECK:STDOUT: ├─PackageDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/packages/package/modifiers.carbon b/toolchain/parse/testdata/packages/package/modifiers.carbon index 0efef1fc541e..aa22326ffe27 100644 --- a/toolchain/parse/testdata/packages/package/modifiers.carbon +++ b/toolchain/parse/testdata/packages/package/modifiers.carbon @@ -12,13 +12,12 @@ extend virtual base package Geometry; // CHECK:STDOUT: - filename: modifiers.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'PackageIntroducer', text: 'package'}, -// CHECK:STDOUT: {kind: 'ExtendModifier', text: 'extend'}, -// CHECK:STDOUT: {kind: 'VirtualModifier', text: 'virtual'}, -// CHECK:STDOUT: {kind: 'BaseModifier', text: 'base'}, -// CHECK:STDOUT: {kind: 'IdentifierPackageName', text: 'Geometry'}, -// CHECK:STDOUT: {kind: 'PackageDecl', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─PackageIntroducer 'package' +// CHECK:STDOUT: │ ├─ExtendModifier 'extend' +// CHECK:STDOUT: │ ├─VirtualModifier 'virtual' +// CHECK:STDOUT: │ ├─BaseModifier 'base' +// CHECK:STDOUT: │ ├─IdentifierPackageName 'Geometry' +// CHECK:STDOUT: ├─PackageDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/pointer/const_pointer.carbon b/toolchain/parse/testdata/pointer/const_pointer.carbon index e17aee16ae1b..6611ea15972b 100644 --- a/toolchain/parse/testdata/pointer/const_pointer.carbon +++ b/toolchain/parse/testdata/pointer/const_pointer.carbon @@ -13,56 +13,55 @@ fn B() -> (const i32)* { return B(); } fn C() -> const (i32*) { return C(); } // CHECK:STDOUT: - filename: const_pointer.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'A'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorConst', text: 'const', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'A'}, -// CHECK:STDOUT: {kind: 'CallExprStart', text: '(', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'CallExpr', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'B'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ParenExprStart', text: '('}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorConst', text: 'const', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ParenExpr', text: ')', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'B'}, -// CHECK:STDOUT: {kind: 'CallExprStart', text: '(', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'CallExpr', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 17}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'C'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ParenExprStart', text: '('}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ParenExpr', text: ')', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PrefixOperatorConst', text: 'const', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'C'}, -// CHECK:STDOUT: {kind: 'CallExprStart', text: '(', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'CallExpr', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 17}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'A' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ╭─PrefixOperatorConst 'const' +// CHECK:STDOUT: │ │ ╭─PostfixOperatorStar '*' +// CHECK:STDOUT: │ ├─ReturnType '->' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'A' +// CHECK:STDOUT: │ │ │ ╭─CallExprStart '(' +// CHECK:STDOUT: │ │ ├─CallExpr ')' +// CHECK:STDOUT: │ ├─ReturnStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'B' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ╭─ParenExprStart '(' +// CHECK:STDOUT: │ │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─PrefixOperatorConst 'const' +// CHECK:STDOUT: │ │ ╭─ParenExpr ')' +// CHECK:STDOUT: │ │ ╭─PostfixOperatorStar '*' +// CHECK:STDOUT: │ ├─ReturnType '->' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'B' +// CHECK:STDOUT: │ │ │ ╭─CallExprStart '(' +// CHECK:STDOUT: │ │ ├─CallExpr ')' +// CHECK:STDOUT: │ ├─ReturnStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'C' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ╭─ParenExprStart '(' +// CHECK:STDOUT: │ │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─PostfixOperatorStar '*' +// CHECK:STDOUT: │ │ ╭─ParenExpr ')' +// CHECK:STDOUT: │ │ ╭─PrefixOperatorConst 'const' +// CHECK:STDOUT: │ ├─ReturnType '->' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'C' +// CHECK:STDOUT: │ │ │ ╭─CallExprStart '(' +// CHECK:STDOUT: │ │ ├─CallExpr ')' +// CHECK:STDOUT: │ ├─ReturnStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/pointer/fail_pointer_type_in_expr.carbon b/toolchain/parse/testdata/pointer/fail_pointer_type_in_expr.carbon index d1472fcc868d..9945e1bfd5c7 100644 --- a/toolchain/parse/testdata/pointer/fail_pointer_type_in_expr.carbon +++ b/toolchain/parse/testdata/pointer/fail_pointer_type_in_expr.carbon @@ -17,20 +17,19 @@ fn F() -> i32 { } // CHECK:STDOUT: - filename: fail_pointer_type_in_expr.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', 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}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorStar', text: '*', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ ├─ReturnType '->' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─PrefixOperatorStar '*' +// CHECK:STDOUT: │ │ ├─PostfixOperatorStar '*' has_error +// CHECK:STDOUT: │ ├─ReturnStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/pointer/fail_tuple_instead_of_compound_member_access.carbon b/toolchain/parse/testdata/pointer/fail_tuple_instead_of_compound_member_access.carbon index e7f433886f70..7d42b6a9d317 100644 --- a/toolchain/parse/testdata/pointer/fail_tuple_instead_of_compound_member_access.carbon +++ b/toolchain/parse/testdata/pointer/fail_tuple_instead_of_compound_member_access.carbon @@ -59,61 +59,60 @@ fn F() { } // CHECK:STDOUT: - filename: fail_tuple_instead_of_compound_member_access.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'x'}, -// CHECK:STDOUT: {kind: 'ParenExprStart', text: '('}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ')', has_error: yes}, -// CHECK:STDOUT: {kind: 'ParenExpr', text: ')', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'y'}, -// CHECK:STDOUT: {kind: 'ParenExprStart', text: '('}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '1'}, -// CHECK:STDOUT: {kind: 'ParenExpr', text: ')', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'z'}, -// CHECK:STDOUT: {kind: 'ParenExprStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'ParenExpr', text: ')', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'w'}, -// CHECK:STDOUT: {kind: 'ParenExprStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'c'}, -// CHECK:STDOUT: {kind: 'ParenExpr', text: ')', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'v'}, -// CHECK:STDOUT: {kind: 'ParenExprStart', text: '('}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ')', has_error: yes}, -// CHECK:STDOUT: {kind: 'ParenExpr', text: ')', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'PointerMemberAccessExpr', text: '->', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'u'}, -// CHECK:STDOUT: {kind: 'ParenExprStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'f'}, -// CHECK:STDOUT: {kind: 'ParenExpr', text: ')', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'PointerMemberAccessExpr', text: '->', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 't'}, -// CHECK:STDOUT: {kind: 'ParenExprStart', text: '('}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '2'}, -// CHECK:STDOUT: {kind: 'ParenExpr', text: ')', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'PointerMemberAccessExpr', text: '->', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 's'}, -// CHECK:STDOUT: {kind: 'ParenExprStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'g'}, -// CHECK:STDOUT: {kind: 'ParenExpr', text: ')', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'PointerMemberAccessExpr', text: '->', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 54}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'x' +// CHECK:STDOUT: │ │ │ ╭─ParenExprStart '(' +// CHECK:STDOUT: │ │ │ ├─InvalidParse ')' has_error +// CHECK:STDOUT: │ │ ├─ParenExpr ')' has_error +// CHECK:STDOUT: │ │ ╭─MemberAccessExpr '.' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'y' +// CHECK:STDOUT: │ │ │ ╭─ParenExprStart '(' +// CHECK:STDOUT: │ │ │ ├─IntLiteral '1' +// CHECK:STDOUT: │ │ ├─ParenExpr ')' has_error +// CHECK:STDOUT: │ │ ╭─MemberAccessExpr '.' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'z' +// CHECK:STDOUT: │ │ │ ╭─ParenExprStart '(' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ├─ParenExpr ')' has_error +// CHECK:STDOUT: │ │ ╭─MemberAccessExpr '.' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'w' +// CHECK:STDOUT: │ │ │ ╭─ParenExprStart '(' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'c' +// CHECK:STDOUT: │ │ ├─ParenExpr ')' has_error +// CHECK:STDOUT: │ │ ╭─MemberAccessExpr '.' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'v' +// CHECK:STDOUT: │ │ │ ╭─ParenExprStart '(' +// CHECK:STDOUT: │ │ │ ├─InvalidParse ')' has_error +// CHECK:STDOUT: │ │ ├─ParenExpr ')' has_error +// CHECK:STDOUT: │ │ ╭─PointerMemberAccessExpr '->' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'u' +// CHECK:STDOUT: │ │ │ ╭─ParenExprStart '(' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'f' +// CHECK:STDOUT: │ │ ├─ParenExpr ')' has_error +// CHECK:STDOUT: │ │ ╭─PointerMemberAccessExpr '->' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 't' +// CHECK:STDOUT: │ │ │ ╭─ParenExprStart '(' +// CHECK:STDOUT: │ │ │ ├─IntLiteral '2' +// CHECK:STDOUT: │ │ ├─ParenExpr ')' has_error +// CHECK:STDOUT: │ │ ╭─PointerMemberAccessExpr '->' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 's' +// CHECK:STDOUT: │ │ │ ╭─ParenExprStart '(' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameExpr 'g' +// CHECK:STDOUT: │ │ ├─ParenExpr ')' has_error +// CHECK:STDOUT: │ │ ╭─PointerMemberAccessExpr '->' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/pointer/pointer_type.carbon b/toolchain/parse/testdata/pointer/pointer_type.carbon index 1561634513a4..c452e39771d5 100644 --- a/toolchain/parse/testdata/pointer/pointer_type.carbon +++ b/toolchain/parse/testdata/pointer/pointer_type.carbon @@ -17,58 +17,57 @@ fn F(p: i32*) -> i32* { var T: type = if true then i32* else f64*; // CHECK:STDOUT: - filename: pointer_type.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'p'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'FloatTypeLiteral', text: 'f32'}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'InfixOperatorPlus', text: '+', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '1'}, -// CHECK:STDOUT: {kind: 'BoolTypeLiteral', text: 'bool'}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InfixOperatorStar', text: '*', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '2'}, -// CHECK:STDOUT: {kind: 'InfixOperatorStar', text: '*', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '3'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InfixOperatorStar', text: '*', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'p'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorStar', text: '*', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InfixOperatorStar', text: '*', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 35}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'T'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'BoolLiteralTrue', text: 'true'}, -// CHECK:STDOUT: {kind: 'IfExprIf', text: 'if', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IfExprThen', text: 'then', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FloatTypeLiteral', text: 'f64'}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IfExprElse', text: 'else', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 16}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'p' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─PostfixOperatorStar '*' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ╭─PostfixOperatorStar '*' +// CHECK:STDOUT: │ ├─ReturnType '->' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─FloatTypeLiteral 'f32' +// CHECK:STDOUT: │ │ ╭─PostfixOperatorStar '*' +// CHECK:STDOUT: │ │ ├─IntLiteral '0' +// CHECK:STDOUT: │ │ ╭─InfixOperatorPlus '+' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─IntLiteral '1' +// CHECK:STDOUT: │ │ │ ╭─BoolTypeLiteral 'bool' +// CHECK:STDOUT: │ │ ├─PostfixOperatorStar '*' +// CHECK:STDOUT: │ │ ╭─InfixOperatorStar '*' +// CHECK:STDOUT: │ │ ├─IntLiteral '2' +// CHECK:STDOUT: │ │ ╭─InfixOperatorStar '*' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ │ ╭─IntLiteral '3' +// CHECK:STDOUT: │ │ │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─PostfixOperatorStar '*' +// CHECK:STDOUT: │ │ │ ╭─InfixOperatorStar '*' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameExpr 'p' +// CHECK:STDOUT: │ │ │ ├─PrefixOperatorStar '*' +// CHECK:STDOUT: │ │ ├─InfixOperatorStar '*' +// CHECK:STDOUT: │ ├─ReturnStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'T' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─TypeTypeLiteral 'type' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─BoolLiteralTrue 'true' +// CHECK:STDOUT: │ │ ╭─IfExprIf 'if' +// CHECK:STDOUT: │ │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─PostfixOperatorStar '*' +// CHECK:STDOUT: │ │ ├─IfExprThen 'then' +// CHECK:STDOUT: │ │ │ ╭─FloatTypeLiteral 'f64' +// CHECK:STDOUT: │ │ ├─PostfixOperatorStar '*' +// CHECK:STDOUT: │ ├─IfExprElse 'else' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/pointer/pointer_value.carbon b/toolchain/parse/testdata/pointer/pointer_value.carbon index 2df420af0bf5..32ba673bcfd3 100644 --- a/toolchain/parse/testdata/pointer/pointer_value.carbon +++ b/toolchain/parse/testdata/pointer/pointer_value.carbon @@ -16,52 +16,51 @@ fn F() -> i32 { } // CHECK:STDOUT: - filename: pointer_value.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', 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}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'n'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'p'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'n'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorAmp', text: '&', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'q'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'p'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorAmp', text: '&', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'q'}, -// CHECK:STDOUT: {kind: 'PrefixOperatorStar', text: '*', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'PrefixOperatorStar', text: '*', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 45}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ ├─ReturnType '->' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'n' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ├─IntLiteral '0' +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'p' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─PostfixOperatorStar '*' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'n' +// CHECK:STDOUT: │ │ ├─PrefixOperatorAmp '&' +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'q' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ │ ╭─PostfixOperatorStar '*' +// CHECK:STDOUT: │ │ │ ├─PostfixOperatorStar '*' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'p' +// CHECK:STDOUT: │ │ ├─PrefixOperatorAmp '&' +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'q' +// CHECK:STDOUT: │ │ │ ╭─PrefixOperatorStar '*' +// CHECK:STDOUT: │ │ ├─PrefixOperatorStar '*' +// CHECK:STDOUT: │ ├─ReturnStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/return/basic.carbon b/toolchain/parse/testdata/return/basic.carbon index a34c5ed2762a..e7b7ed07d88e 100644 --- a/toolchain/parse/testdata/return/basic.carbon +++ b/toolchain/parse/testdata/return/basic.carbon @@ -13,15 +13,14 @@ fn F() { } // CHECK:STDOUT: - filename: basic.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ ├─ReturnStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/return/expr.carbon b/toolchain/parse/testdata/return/expr.carbon index 8b01b775bfe3..a28d77ceb4ae 100644 --- a/toolchain/parse/testdata/return/expr.carbon +++ b/toolchain/parse/testdata/return/expr.carbon @@ -13,16 +13,15 @@ fn F() { } // CHECK:STDOUT: - filename: expr.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'x'}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'x' +// CHECK:STDOUT: │ ├─ReturnStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/return/fail_expr_no_semi.carbon b/toolchain/parse/testdata/return/fail_expr_no_semi.carbon index f52c759ec796..4136a60dc6db 100644 --- a/toolchain/parse/testdata/return/fail_expr_no_semi.carbon +++ b/toolchain/parse/testdata/return/fail_expr_no_semi.carbon @@ -17,16 +17,15 @@ fn F() { } // CHECK:STDOUT: - filename: fail_expr_no_semi.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'x'}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: 'x', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'x' +// CHECK:STDOUT: │ ├─ReturnStatement 'x' has_error +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/return/fail_no_semi.carbon b/toolchain/parse/testdata/return/fail_no_semi.carbon index d211be06986f..9bc0484b3f39 100644 --- a/toolchain/parse/testdata/return/fail_no_semi.carbon +++ b/toolchain/parse/testdata/return/fail_no_semi.carbon @@ -21,16 +21,15 @@ fn F() { } // CHECK:STDOUT: - filename: fail_no_semi.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '}', has_error: yes}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: 'return', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ ├─InvalidParse '}' has_error +// CHECK:STDOUT: │ ├─ReturnStatement 'return' has_error +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/return/fail_returned_no_var.carbon b/toolchain/parse/testdata/return/fail_returned_no_var.carbon index 4166e43545db..e3919020419b 100644 --- a/toolchain/parse/testdata/return/fail_returned_no_var.carbon +++ b/toolchain/parse/testdata/return/fail_returned_no_var.carbon @@ -17,16 +17,15 @@ fn F() -> str { } // CHECK:STDOUT: - filename: fail_returned_no_var.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'StringTypeLiteral', text: 'str'}, -// CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'EmptyDecl', text: ';', has_error: yes}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ╭─StringTypeLiteral 'str' +// CHECK:STDOUT: │ ├─ReturnType '->' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ ├─EmptyDecl ';' has_error +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/return/fail_var_no_semi.carbon b/toolchain/parse/testdata/return/fail_var_no_semi.carbon index a15a0e2e3782..7e976bae08cf 100644 --- a/toolchain/parse/testdata/return/fail_var_no_semi.carbon +++ b/toolchain/parse/testdata/return/fail_var_no_semi.carbon @@ -17,16 +17,15 @@ fn F() { } // CHECK:STDOUT: - filename: fail_var_no_semi.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'ReturnVarModifier', text: 'var'}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: 'var', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ ├─ReturnVarModifier 'var' +// CHECK:STDOUT: │ ├─ReturnStatement 'var' has_error +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/return/returned_var.carbon b/toolchain/parse/testdata/return/returned_var.carbon index 0a978799c69d..17bf5dcad8ea 100644 --- a/toolchain/parse/testdata/return/returned_var.carbon +++ b/toolchain/parse/testdata/return/returned_var.carbon @@ -14,28 +14,27 @@ fn F() -> str { } // CHECK:STDOUT: - filename: returned_var.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'StringTypeLiteral', text: 'str'}, -// CHECK:STDOUT: {kind: 'ReturnType', text: '->', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'ReturnedModifier', text: 'returned'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 's'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'StringTypeLiteral', text: 'str'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StringLiteral', text: '"hello"'}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'ReturnVarModifier', text: 'var'}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 21}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ╭─StringTypeLiteral 'str' +// CHECK:STDOUT: │ ├─ReturnType '->' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ├─ReturnedModifier 'returned' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 's' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─StringTypeLiteral 'str' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ├─StringLiteral '"hello"' +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ ├─ReturnVarModifier 'var' +// CHECK:STDOUT: │ ├─ReturnStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/struct/fail_comma_only.carbon b/toolchain/parse/testdata/struct/fail_comma_only.carbon index b33eb4dbff33..4c7d6f142d3f 100644 --- a/toolchain/parse/testdata/struct/fail_comma_only.carbon +++ b/toolchain/parse/testdata/struct/fail_comma_only.carbon @@ -15,20 +15,19 @@ var x: {,} = {}; // CHECK:STDOUT: - filename: fail_comma_only.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ',', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ',', has_error: yes}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ │ │ ├─InvalidParse ',' has_error +// CHECK:STDOUT: │ │ │ ├─InvalidParse ',' has_error +// CHECK:STDOUT: │ │ ├─StructLiteral '}' has_error +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/struct/fail_comma_repeat_in_type.carbon b/toolchain/parse/testdata/struct/fail_comma_repeat_in_type.carbon index 81b7da43256c..4a175fbaa1f9 100644 --- a/toolchain/parse/testdata/struct/fail_comma_repeat_in_type.carbon +++ b/toolchain/parse/testdata/struct/fail_comma_repeat_in_type.carbon @@ -15,25 +15,24 @@ var x: {.a: i32,,} = {}; // CHECK:STDOUT: - filename: fail_comma_repeat_in_type.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'StructTypeLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'StructTypeLiteralField', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructTypeLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ',', has_error: yes}, -// CHECK:STDOUT: {kind: 'StructTypeLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'StructTypeLiteral', text: '}', has_error: yes, subtree_size: 9}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 18}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ╭─StructTypeLiteralStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─StructTypeLiteralField ':' +// CHECK:STDOUT: │ │ │ ├─StructTypeLiteralComma ',' +// CHECK:STDOUT: │ │ │ ├─InvalidParse ',' has_error +// CHECK:STDOUT: │ │ │ ├─StructTypeLiteralComma ',' +// CHECK:STDOUT: │ │ ├─StructTypeLiteral '}' has_error +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/struct/fail_comma_repeat_in_value.carbon b/toolchain/parse/testdata/struct/fail_comma_repeat_in_value.carbon index 136b07a6eed3..a3f6a4ca51be 100644 --- a/toolchain/parse/testdata/struct/fail_comma_repeat_in_value.carbon +++ b/toolchain/parse/testdata/struct/fail_comma_repeat_in_value.carbon @@ -15,25 +15,24 @@ var x: {.a = 0,,} = {}; // CHECK:STDOUT: - filename: fail_comma_repeat_in_value.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'StructLiteralField', text: '=', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ',', has_error: yes}, -// CHECK:STDOUT: {kind: 'StructLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', has_error: yes, subtree_size: 9}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 18}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ├─IntLiteral '0' +// CHECK:STDOUT: │ │ │ ├─StructLiteralField '=' +// CHECK:STDOUT: │ │ │ ├─StructLiteralComma ',' +// CHECK:STDOUT: │ │ │ ├─InvalidParse ',' has_error +// CHECK:STDOUT: │ │ │ ├─StructLiteralComma ',' +// CHECK:STDOUT: │ │ ├─StructLiteral '}' has_error +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/struct/fail_extra_token_in_type.carbon b/toolchain/parse/testdata/struct/fail_extra_token_in_type.carbon index 131d30a17d2c..dd1eda8b66c3 100644 --- a/toolchain/parse/testdata/struct/fail_extra_token_in_type.carbon +++ b/toolchain/parse/testdata/struct/fail_extra_token_in_type.carbon @@ -15,26 +15,25 @@ var x: {.a: i32 banana} = {.a = 0}; // CHECK:STDOUT: - filename: fail_extra_token_in_type.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'StructTypeLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'StructTypeLiteralField', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructTypeLiteral', text: '}', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'StructLiteralField', text: '=', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 19}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ╭─StructTypeLiteralStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─StructTypeLiteralField ':' +// CHECK:STDOUT: │ │ ├─StructTypeLiteral '}' has_error +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ ├─IntLiteral '0' +// CHECK:STDOUT: │ │ ├─StructLiteralField '=' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/struct/fail_extra_token_in_value.carbon b/toolchain/parse/testdata/struct/fail_extra_token_in_value.carbon index a1f0dd2e7eea..26a9a3cbf211 100644 --- a/toolchain/parse/testdata/struct/fail_extra_token_in_value.carbon +++ b/toolchain/parse/testdata/struct/fail_extra_token_in_value.carbon @@ -15,26 +15,25 @@ var x: {.a: i32} = {.a = 0 banana}; // CHECK:STDOUT: - filename: fail_extra_token_in_value.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'StructTypeLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'StructTypeLiteralField', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructTypeLiteral', text: '}', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'StructLiteralField', text: '=', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 19}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ╭─StructTypeLiteralStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─StructTypeLiteralField ':' +// CHECK:STDOUT: │ │ ├─StructTypeLiteral '}' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ ├─IntLiteral '0' +// CHECK:STDOUT: │ │ ├─StructLiteralField '=' +// CHECK:STDOUT: │ ├─StructLiteral '}' has_error +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/struct/fail_identifier_colon.carbon b/toolchain/parse/testdata/struct/fail_identifier_colon.carbon index 287f70a63809..0e429b7c4853 100644 --- a/toolchain/parse/testdata/struct/fail_identifier_colon.carbon +++ b/toolchain/parse/testdata/struct/fail_identifier_colon.carbon @@ -15,19 +15,18 @@ var x: {a:} = {}; // CHECK:STDOUT: - filename: fail_identifier_colon.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: 'a', has_error: yes}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ │ │ ├─InvalidParse 'a' has_error +// CHECK:STDOUT: │ │ ├─StructLiteral '}' has_error +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/struct/fail_identifier_equals.carbon b/toolchain/parse/testdata/struct/fail_identifier_equals.carbon index 262e9d2d1380..c1469fbe2fcc 100644 --- a/toolchain/parse/testdata/struct/fail_identifier_equals.carbon +++ b/toolchain/parse/testdata/struct/fail_identifier_equals.carbon @@ -15,19 +15,18 @@ var x: {a=} = {}; // CHECK:STDOUT: - filename: fail_identifier_equals.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: 'a', has_error: yes}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ │ │ ├─InvalidParse 'a' has_error +// CHECK:STDOUT: │ │ ├─StructLiteral '}' has_error +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/struct/fail_identifier_only.carbon b/toolchain/parse/testdata/struct/fail_identifier_only.carbon index e8e19ec25590..d5b084628482 100644 --- a/toolchain/parse/testdata/struct/fail_identifier_only.carbon +++ b/toolchain/parse/testdata/struct/fail_identifier_only.carbon @@ -15,19 +15,18 @@ var x: {a} = {}; // CHECK:STDOUT: - filename: fail_identifier_only.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: 'a', has_error: yes}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ │ │ ├─InvalidParse 'a' has_error +// CHECK:STDOUT: │ │ ├─StructLiteral '}' has_error +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/struct/fail_invalid_struct_designator.carbon b/toolchain/parse/testdata/struct/fail_invalid_struct_designator.carbon index 7c149524e898..81c1913deea7 100644 --- a/toolchain/parse/testdata/struct/fail_invalid_struct_designator.carbon +++ b/toolchain/parse/testdata/struct/fail_invalid_struct_designator.carbon @@ -15,21 +15,20 @@ var x: i32 = {.7 = 8}; // CHECK:STDOUT: - filename: fail_invalid_struct_designator.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: '7', has_error: yes}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '8'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '=', has_error: yes}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature '7' has_error +// CHECK:STDOUT: │ │ ├─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ ├─IntLiteral '8' +// CHECK:STDOUT: │ │ ├─InvalidParse '=' has_error +// CHECK:STDOUT: │ ├─StructLiteral '}' has_error +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/struct/fail_missing_type.carbon b/toolchain/parse/testdata/struct/fail_missing_type.carbon index 4fa83fda1dda..301f6588f8b3 100644 --- a/toolchain/parse/testdata/struct/fail_missing_type.carbon +++ b/toolchain/parse/testdata/struct/fail_missing_type.carbon @@ -15,22 +15,21 @@ var x: {.a:} = {}; // CHECK:STDOUT: - filename: fail_missing_type.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'StructTypeLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '}', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ':', has_error: yes}, -// CHECK:STDOUT: {kind: 'StructTypeLiteral', text: '}', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ╭─StructTypeLiteralStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ ├─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ ├─InvalidParse '}' has_error +// CHECK:STDOUT: │ │ │ ├─InvalidParse ':' has_error +// CHECK:STDOUT: │ │ ├─StructTypeLiteral '}' has_error +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/struct/fail_missing_value.carbon b/toolchain/parse/testdata/struct/fail_missing_value.carbon index bf1f751ea4e8..07656028076e 100644 --- a/toolchain/parse/testdata/struct/fail_missing_value.carbon +++ b/toolchain/parse/testdata/struct/fail_missing_value.carbon @@ -15,22 +15,21 @@ var x: {.a=} = {}; // CHECK:STDOUT: - filename: fail_missing_value.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '}', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '=', has_error: yes}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ ├─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ ├─InvalidParse '}' has_error +// CHECK:STDOUT: │ │ │ ├─InvalidParse '=' has_error +// CHECK:STDOUT: │ │ ├─StructLiteral '}' has_error +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/struct/fail_mix_type_and_value.carbon b/toolchain/parse/testdata/struct/fail_mix_type_and_value.carbon index d1beb20f1d45..6d8f37b597fd 100644 --- a/toolchain/parse/testdata/struct/fail_mix_type_and_value.carbon +++ b/toolchain/parse/testdata/struct/fail_mix_type_and_value.carbon @@ -15,26 +15,25 @@ var x: {.a: i32, .b = 0} = {}; // CHECK:STDOUT: - filename: fail_mix_type_and_value.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'StructTypeLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'StructTypeLiteralField', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructTypeLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '.', has_error: yes}, -// CHECK:STDOUT: {kind: 'StructTypeLiteral', text: '}', has_error: yes, subtree_size: 10}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 19}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ╭─StructTypeLiteralStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─StructTypeLiteralField ':' +// CHECK:STDOUT: │ │ │ ├─StructTypeLiteralComma ',' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ │ ├─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ ├─InvalidParse '.' has_error +// CHECK:STDOUT: │ │ ├─StructTypeLiteral '}' has_error +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/struct/fail_mix_value_and_type.carbon b/toolchain/parse/testdata/struct/fail_mix_value_and_type.carbon index 1d579e5d4911..a8082d89db04 100644 --- a/toolchain/parse/testdata/struct/fail_mix_value_and_type.carbon +++ b/toolchain/parse/testdata/struct/fail_mix_value_and_type.carbon @@ -15,24 +15,23 @@ var x: {.a = 0, b: i32} = {}; // CHECK:STDOUT: - filename: fail_mix_value_and_type.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'StructLiteralField', text: '=', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: 'b', has_error: yes}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', has_error: yes, subtree_size: 8}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 17}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ├─IntLiteral '0' +// CHECK:STDOUT: │ │ │ ├─StructLiteralField '=' +// CHECK:STDOUT: │ │ │ ├─StructLiteralComma ',' +// CHECK:STDOUT: │ │ │ ├─InvalidParse 'b' has_error +// CHECK:STDOUT: │ │ ├─StructLiteral '}' has_error +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/struct/fail_mix_with_unknown.carbon b/toolchain/parse/testdata/struct/fail_mix_with_unknown.carbon index c63990696939..8b449319a2eb 100644 --- a/toolchain/parse/testdata/struct/fail_mix_with_unknown.carbon +++ b/toolchain/parse/testdata/struct/fail_mix_with_unknown.carbon @@ -29,51 +29,50 @@ var x: i32 = {.a = 1, .b, .c: i32}; var x: i32 = {.a: i32, .b, .c = 1}; // CHECK:STDOUT: - filename: fail_mix_with_unknown.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '1'}, -// CHECK:STDOUT: {kind: 'StructLiteralField', text: '=', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '.', has_error: yes}, -// CHECK:STDOUT: {kind: 'StructLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'c'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '.', has_error: yes}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', has_error: yes, subtree_size: 14}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 22}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructTypeLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'StructTypeLiteralField', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructTypeLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '.', has_error: yes}, -// CHECK:STDOUT: {kind: 'StructTypeLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'c'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '.', has_error: yes}, -// CHECK:STDOUT: {kind: 'StructTypeLiteral', text: '}', has_error: yes, subtree_size: 14}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 22}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ ├─IntLiteral '1' +// CHECK:STDOUT: │ │ ├─StructLiteralField '=' +// CHECK:STDOUT: │ │ ├─StructLiteralComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ ├─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ ├─InvalidParse '.' has_error +// CHECK:STDOUT: │ │ ├─StructLiteralComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'c' +// CHECK:STDOUT: │ │ ├─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ ├─InvalidParse '.' has_error +// CHECK:STDOUT: │ ├─StructLiteral '}' has_error +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructTypeLiteralStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─StructTypeLiteralField ':' +// CHECK:STDOUT: │ │ ├─StructTypeLiteralComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ ├─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ ├─InvalidParse '.' has_error +// CHECK:STDOUT: │ │ ├─StructTypeLiteralComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'c' +// CHECK:STDOUT: │ │ ├─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ ├─InvalidParse '.' has_error +// CHECK:STDOUT: │ ├─StructTypeLiteral '}' has_error +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/struct/fail_no_colon_or_equals.carbon b/toolchain/parse/testdata/struct/fail_no_colon_or_equals.carbon index 1afcb9f96ced..21cf61f2a64c 100644 --- a/toolchain/parse/testdata/struct/fail_no_colon_or_equals.carbon +++ b/toolchain/parse/testdata/struct/fail_no_colon_or_equals.carbon @@ -15,21 +15,20 @@ var x: {.a} = {}; // CHECK:STDOUT: - filename: fail_no_colon_or_equals.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '.', has_error: yes}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ ├─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ ├─InvalidParse '.' has_error +// CHECK:STDOUT: │ │ ├─StructLiteral '}' has_error +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/struct/fail_period_only.carbon b/toolchain/parse/testdata/struct/fail_period_only.carbon index ab1347db8f2e..fe5f52727113 100644 --- a/toolchain/parse/testdata/struct/fail_period_only.carbon +++ b/toolchain/parse/testdata/struct/fail_period_only.carbon @@ -15,21 +15,20 @@ var x: {.} = {}; // CHECK:STDOUT: - filename: fail_period_only.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: '}', has_error: yes}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '.', has_error: yes}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature '}' has_error +// CHECK:STDOUT: │ │ │ ├─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ ├─InvalidParse '.' has_error +// CHECK:STDOUT: │ │ ├─StructLiteral '}' has_error +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/struct/fail_period_paren.carbon b/toolchain/parse/testdata/struct/fail_period_paren.carbon index 3fdde3d3bdf4..7796bdd5f96a 100644 --- a/toolchain/parse/testdata/struct/fail_period_paren.carbon +++ b/toolchain/parse/testdata/struct/fail_period_paren.carbon @@ -15,19 +15,18 @@ var x: {.(a) = 1}; // CHECK:STDOUT: - filename: fail_period_paren.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: '(', has_error: yes}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '1'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '=', has_error: yes}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature '(' has_error +// CHECK:STDOUT: │ │ │ ├─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ ├─IntLiteral '1' +// CHECK:STDOUT: │ │ │ ├─InvalidParse '=' has_error +// CHECK:STDOUT: │ │ ├─StructLiteral '}' has_error +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/struct/fail_period_string_colon.carbon b/toolchain/parse/testdata/struct/fail_period_string_colon.carbon index c4504b0f8331..ba51f33ce137 100644 --- a/toolchain/parse/testdata/struct/fail_period_string_colon.carbon +++ b/toolchain/parse/testdata/struct/fail_period_string_colon.carbon @@ -15,27 +15,26 @@ var x: {."hello": i32, .y: i32} = {}; // CHECK:STDOUT: - filename: fail_period_string_colon.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'StructTypeLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: '"hello"', has_error: yes}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ':', has_error: yes}, -// CHECK:STDOUT: {kind: 'StructTypeLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'StructTypeLiteralField', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructTypeLiteral', text: '}', has_error: yes, subtree_size: 11}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 20}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ╭─StructTypeLiteralStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature '"hello"' has_error +// CHECK:STDOUT: │ │ │ ├─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─InvalidParse ':' has_error +// CHECK:STDOUT: │ │ │ ├─StructTypeLiteralComma ',' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─StructTypeLiteralField ':' +// CHECK:STDOUT: │ │ ├─StructTypeLiteral '}' has_error +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/struct/fail_period_string_equals.carbon b/toolchain/parse/testdata/struct/fail_period_string_equals.carbon index b36edd90ef52..6e715853cd17 100644 --- a/toolchain/parse/testdata/struct/fail_period_string_equals.carbon +++ b/toolchain/parse/testdata/struct/fail_period_string_equals.carbon @@ -15,27 +15,26 @@ var x: {."hello" = 0, .y = 4} = {}; // CHECK:STDOUT: - filename: fail_period_string_equals.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: '"hello"', has_error: yes}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '=', has_error: yes}, -// CHECK:STDOUT: {kind: 'StructLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '4'}, -// CHECK:STDOUT: {kind: 'StructLiteralField', text: '=', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', has_error: yes, subtree_size: 11}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 20}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature '"hello"' has_error +// CHECK:STDOUT: │ │ │ ├─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ ├─IntLiteral '0' +// CHECK:STDOUT: │ │ │ ├─InvalidParse '=' has_error +// CHECK:STDOUT: │ │ │ ├─StructLiteralComma ',' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ├─IntLiteral '4' +// CHECK:STDOUT: │ │ │ ├─StructLiteralField '=' +// CHECK:STDOUT: │ │ ├─StructLiteral '}' has_error +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/struct/fail_type_no_designator.carbon b/toolchain/parse/testdata/struct/fail_type_no_designator.carbon index c2c93d98df02..fd2510fbf155 100644 --- a/toolchain/parse/testdata/struct/fail_type_no_designator.carbon +++ b/toolchain/parse/testdata/struct/fail_type_no_designator.carbon @@ -15,19 +15,18 @@ var x: {i32} = {}; // CHECK:STDOUT: - filename: fail_type_no_designator.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: 'i32', has_error: yes}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ │ │ ├─InvalidParse 'i32' has_error +// CHECK:STDOUT: │ │ ├─StructLiteral '}' has_error +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/struct/no_entries.carbon b/toolchain/parse/testdata/struct/no_entries.carbon index 19d0e5861c05..251a4fe71462 100644 --- a/toolchain/parse/testdata/struct/no_entries.carbon +++ b/toolchain/parse/testdata/struct/no_entries.carbon @@ -11,18 +11,17 @@ var y: {} = {}; // CHECK:STDOUT: - filename: no_entries.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ │ ├─StructLiteral '}' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/struct/one_entry_no_comma.carbon b/toolchain/parse/testdata/struct/one_entry_no_comma.carbon index a699ce5254d6..536cbcc8bf25 100644 --- a/toolchain/parse/testdata/struct/one_entry_no_comma.carbon +++ b/toolchain/parse/testdata/struct/one_entry_no_comma.carbon @@ -11,26 +11,25 @@ var z: {.n: i32} = {.n = 4}; // CHECK:STDOUT: - filename: one_entry_no_comma.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'z'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'StructTypeLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'n'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'StructTypeLiteralField', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructTypeLiteral', text: '}', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'n'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '4'}, -// CHECK:STDOUT: {kind: 'StructLiteralField', text: '=', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 19}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'z' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ╭─StructTypeLiteralStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'n' +// CHECK:STDOUT: │ │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─StructTypeLiteralField ':' +// CHECK:STDOUT: │ │ ├─StructTypeLiteral '}' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'n' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ ├─IntLiteral '4' +// CHECK:STDOUT: │ │ ├─StructLiteralField '=' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/struct/one_entry_with_comma.carbon b/toolchain/parse/testdata/struct/one_entry_with_comma.carbon index ac97852f5121..d4712a49c4c0 100644 --- a/toolchain/parse/testdata/struct/one_entry_with_comma.carbon +++ b/toolchain/parse/testdata/struct/one_entry_with_comma.carbon @@ -11,28 +11,27 @@ var z: {.n: i32,} = {.n = 4,}; // CHECK:STDOUT: - filename: one_entry_with_comma.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'z'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'StructTypeLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'n'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'StructTypeLiteralField', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructTypeLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'StructTypeLiteral', text: '}', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'n'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '4'}, -// CHECK:STDOUT: {kind: 'StructLiteralField', text: '=', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 21}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'z' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ╭─StructTypeLiteralStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'n' +// CHECK:STDOUT: │ │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─StructTypeLiteralField ':' +// CHECK:STDOUT: │ │ │ ├─StructTypeLiteralComma ',' +// CHECK:STDOUT: │ │ ├─StructTypeLiteral '}' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'n' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ ├─IntLiteral '4' +// CHECK:STDOUT: │ │ ├─StructLiteralField '=' +// CHECK:STDOUT: │ │ ├─StructLiteralComma ',' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/struct/struct_pattern.carbon b/toolchain/parse/testdata/struct/struct_pattern.carbon index e771673cf24b..a7bf593777e2 100644 --- a/toolchain/parse/testdata/struct/struct_pattern.carbon +++ b/toolchain/parse/testdata/struct/struct_pattern.carbon @@ -297,838 +297,800 @@ let {ref _: i32} = {}; let {var _: i32} = {}; // CHECK:STDOUT: - filename: struct_pattern_empty.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ ├─StructPattern '}' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: struct_pattern_one_entry.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─StructPatternDesignatedField '=' +// CHECK:STDOUT: │ ├─StructPattern '}' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: struct_pattern_trailing_comma.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─StructPatternDesignatedField '=' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ ├─StructPattern '}' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: struct_pattern_two_entries.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'm'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'n'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 17}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 22}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─StructPatternDesignatedField '=' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'm' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'n' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─StructPatternDesignatedField '=' +// CHECK:STDOUT: │ ├─StructPattern '}' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: struct_value_literal_as_pattern.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '1'}, -// CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '2'}, -// CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ ├─IntLiteral '1' +// CHECK:STDOUT: │ │ ├─StructPatternDesignatedField '=' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ ├─IntLiteral '2' +// CHECK:STDOUT: │ │ ├─StructPatternDesignatedField '=' +// CHECK:STDOUT: │ ├─StructPattern '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: struct_pattern_discard.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'UnderscoreName', text: '_'}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 16}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─StructPatternDesignatedField '=' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ ├─UnderscoreName '_' +// CHECK:STDOUT: │ ├─StructPattern '}' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: struct_pattern_unnamed.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'UnderscoreName', text: '_'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ╭─UnderscoreName '_' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─StructPatternDesignatedField '=' +// CHECK:STDOUT: │ ├─StructPattern '}' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: struct_pattern_shorthand.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 16}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ ├─StructPattern '}' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: struct_pattern_shorthand_ref.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'RefBindingName', text: 'ref', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 17}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ╭─RefBindingName 'ref' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ ├─StructPattern '}' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: struct_pattern_shorthand_mixed.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'm'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 19}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─StructPatternDesignatedField '=' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'm' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ ├─StructPattern '}' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: struct_pattern_designated_tuple.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 21}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 26}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ╭─TuplePatternStart '(' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ │ ├─TuplePattern ')' +// CHECK:STDOUT: │ │ ├─StructPatternDesignatedField '=' +// CHECK:STDOUT: │ ├─StructPattern '}' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: struct_pattern_designated_struct.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 21}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 26}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ │ ├─StructPattern '}' +// CHECK:STDOUT: │ │ ├─StructPatternDesignatedField '=' +// CHECK:STDOUT: │ ├─StructPattern '}' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_struct_pattern_comma_only.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ',', has_error: yes}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ ├─InvalidParse ',' has_error +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ ├─StructPattern '}' has_error +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_struct_pattern_missing_designator.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '=', has_error: yes}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ ├─InvalidParse '=' has_error +// CHECK:STDOUT: │ ├─StructPattern '}' has_error +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_struct_pattern_invalid_designator.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: '7', has_error: yes}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', has_error: yes, subtree_size: 7}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature '7' has_error +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─StructPatternDesignatedField '=' has_error +// CHECK:STDOUT: │ ├─StructPattern '}' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_struct_pattern_designator_only.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '}', has_error: yes}, -// CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '.', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ ├─InvalidParse '}' has_error +// CHECK:STDOUT: │ │ ├─StructPatternDesignatedField '.' has_error +// CHECK:STDOUT: │ ├─StructPattern '}' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_struct_type_literal_as_pattern.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ':', has_error: yes}, -// CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '.', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ ├─InvalidParse ':' has_error +// CHECK:STDOUT: │ │ ├─StructPatternDesignatedField '.' has_error +// CHECK:STDOUT: │ ├─StructPattern '}' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_struct_pattern_period_only.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: '}', has_error: yes}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '}', has_error: yes}, -// CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '.', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature '}' has_error +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ ├─InvalidParse '}' has_error +// CHECK:STDOUT: │ │ ├─StructPatternDesignatedField '.' has_error +// CHECK:STDOUT: │ ├─StructPattern '}' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_struct_pattern_repeated_comma.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ',', has_error: yes}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', has_error: yes, subtree_size: 12}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 17}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─StructPatternDesignatedField '=' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ ├─InvalidParse ',' has_error +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ ├─StructPattern '}' has_error +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_struct_pattern_missing_comma.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', has_error: yes, subtree_size: 11}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 16}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ │ │ ├─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ │ ├─MemberAccessExpr '.' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─StructPatternDesignatedField '=' +// CHECK:STDOUT: │ ├─StructPattern '}' has_error +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_struct_pattern_missing_pattern.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '}', has_error: yes}, -// CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ ├─InvalidParse '}' has_error +// CHECK:STDOUT: │ │ ├─StructPatternDesignatedField '=' has_error +// CHECK:STDOUT: │ ├─StructPattern '}' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_struct_pattern_shorthand_missing_identifier.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ':', has_error: yes}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ ├─InvalidParse ':' has_error +// CHECK:STDOUT: │ ├─StructPattern '}' has_error +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_struct_pattern_shorthand_missing_expression.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '}', has_error: yes}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─InvalidParse '}' has_error +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' has_error +// CHECK:STDOUT: │ ├─StructPattern '}' has_error +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_struct_pattern_shorthand_missing_comma.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ ├─StructPattern '}' has_error +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_struct_pattern_missing_equals.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: 'x', has_error: yes}, -// CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '.', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ ├─InvalidParse 'x' has_error +// CHECK:STDOUT: │ │ ├─StructPatternDesignatedField '.' has_error +// CHECK:STDOUT: │ ├─StructPattern '}' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_struct_pattern_token_after_underscore.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'UnderscoreName', text: '_', has_error: yes}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', has_error: yes, subtree_size: 12}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 17}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─StructPatternDesignatedField '=' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ ├─UnderscoreName '_' has_error +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ ├─StructPattern '}' has_error +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_struct_pattern_underscore_not_last.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'UnderscoreName', text: '_', has_error: yes}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', has_error: yes, subtree_size: 11}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 16}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ ├─UnderscoreName '_' has_error +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─StructPatternDesignatedField '=' +// CHECK:STDOUT: │ ├─StructPattern '}' has_error +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_struct_pattern_extra_token_end.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', has_error: yes, subtree_size: 17}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 22}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─StructPatternDesignatedField '=' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─StructPatternDesignatedField '=' +// CHECK:STDOUT: │ ├─StructPattern '}' has_error +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_struct_pattern_extra_token_start.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'foo'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', has_error: yes, subtree_size: 13}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 18}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─StructPatternDesignatedField '=' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'foo' +// CHECK:STDOUT: │ │ │ ├─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ ├─MemberAccessExpr '.' +// CHECK:STDOUT: │ ├─StructPattern '}' has_error +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_struct_pattern_shorthand_extra_token_end.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', has_error: yes, subtree_size: 11}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 16}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ ├─StructPattern '}' has_error +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_struct_pattern_shorthand_extra_token_start.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'foo'}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', has_error: yes, subtree_size: 8}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'foo' +// CHECK:STDOUT: │ ├─StructPattern '}' has_error +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_struct_pattern_invalid_introducer.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '!', has_error: yes}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ ├─InvalidParse '!' has_error +// CHECK:STDOUT: │ ├─StructPattern '}' has_error +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_struct_pattern_extra_token_middle.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', has_error: yes, subtree_size: 8}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: 'foo', has_error: yes}, -// CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '.', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: 'foo', has_error: yes}, -// CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '.', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: 'foo', has_error: yes}, -// CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '.', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 20}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─StructPatternDesignatedField '=' has_error +// CHECK:STDOUT: │ ├─StructPattern '}' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ ├─InvalidParse 'foo' has_error +// CHECK:STDOUT: │ │ ├─StructPatternDesignatedField '.' has_error +// CHECK:STDOUT: │ ├─StructPattern '}' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ ├─InvalidParse 'foo' has_error +// CHECK:STDOUT: │ │ ├─StructPatternDesignatedField '.' has_error +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ ├─StructPattern '}' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ ├─InvalidParse 'foo' has_error +// CHECK:STDOUT: │ │ ├─StructPatternDesignatedField '.' has_error +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─StructPatternDesignatedField '=' +// CHECK:STDOUT: │ ├─StructPattern '}' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_struct_pattern_invalid_field.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StringLiteral', text: '"foo"'}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', has_error: yes, subtree_size: 12}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 17}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ ├─StringLiteral '"foo"' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─StructPatternDesignatedField '=' +// CHECK:STDOUT: │ ├─StructPattern '}' has_error +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_struct_pattern_nested_tuple_pattern.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'z'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', has_error: yes, subtree_size: 18}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 19}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 24}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─TuplePatternStart '(' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─VarBindingPattern ':' +// CHECK:STDOUT: │ │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'z' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─TuplePattern ')' +// CHECK:STDOUT: │ │ ╭─StructPattern '}' has_error +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_struct_pattern_nested_var_tuple_pattern.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'z'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', has_error: yes, subtree_size: 12}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', has_error: yes, subtree_size: 19}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 24}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─TuplePatternStart '(' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─VarBindingPattern ':' +// CHECK:STDOUT: │ │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'z' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─VarBindingPattern ':' +// CHECK:STDOUT: │ │ │ ╭─TuplePattern ')' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' has_error +// CHECK:STDOUT: │ ├─StructPattern '}' has_error +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_struct_pattern_nested_struct_pattern.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'z'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', has_error: yes, subtree_size: 18}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 23}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'z' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─StructPattern '}' +// CHECK:STDOUT: │ ├─StructPattern '}' has_error +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_struct_pattern_unused_shorthand.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'UnderscoreName', text: '_'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':', has_error: yes}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'UnderscoreName', text: '_'}, -// CHECK:STDOUT: {kind: 'RefBindingName', text: 'ref', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':', has_error: yes}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', has_error: yes, subtree_size: 7}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'UnderscoreName', text: '_'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':', has_error: yes}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', has_error: yes, subtree_size: 7}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─UnderscoreName '_' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' has_error +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─VarBindingPattern ':' has_error +// CHECK:STDOUT: │ │ ╭─StructPattern '}' has_error +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─UnderscoreName '_' +// CHECK:STDOUT: │ │ │ ╭─RefBindingName 'ref' has_error +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' has_error +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' has_error +// CHECK:STDOUT: │ ├─StructPattern '}' has_error +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─UnderscoreName '_' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' has_error +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' has_error +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' has_error +// CHECK:STDOUT: │ ├─StructPattern '}' has_error +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/struct/two_entries.carbon b/toolchain/parse/testdata/struct/two_entries.carbon index f48007b82630..767204e78e67 100644 --- a/toolchain/parse/testdata/struct/two_entries.carbon +++ b/toolchain/parse/testdata/struct/two_entries.carbon @@ -11,36 +11,35 @@ var x: {.a: i32, .b: i32} = {.a = 1, .b = 2}; // CHECK:STDOUT: - filename: two_entries.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'StructTypeLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'StructTypeLiteralField', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructTypeLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'StructTypeLiteralField', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructTypeLiteral', text: '}', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '1'}, -// CHECK:STDOUT: {kind: 'StructLiteralField', text: '=', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '2'}, -// CHECK:STDOUT: {kind: 'StructLiteralField', text: '=', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 29}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ╭─StructTypeLiteralStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─StructTypeLiteralField ':' +// CHECK:STDOUT: │ │ │ ├─StructTypeLiteralComma ',' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─StructTypeLiteralField ':' +// CHECK:STDOUT: │ │ ├─StructTypeLiteral '}' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ ├─IntLiteral '1' +// CHECK:STDOUT: │ │ ├─StructLiteralField '=' +// CHECK:STDOUT: │ │ ├─StructLiteralComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ ├─IntLiteral '2' +// CHECK:STDOUT: │ │ ├─StructLiteralField '=' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/tuple/access/repeated.carbon b/toolchain/parse/testdata/tuple/access/repeated.carbon index 9c04830a403b..fdb4336fa9e4 100644 --- a/toolchain/parse/testdata/tuple/access/repeated.carbon +++ b/toolchain/parse/testdata/tuple/access/repeated.carbon @@ -11,21 +11,20 @@ let x: i32 = tuple.0.1.2; // CHECK:STDOUT: - filename: repeated.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'tuple'}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '1'}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '2'}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'tuple' +// CHECK:STDOUT: │ │ ├─IntLiteral '0' +// CHECK:STDOUT: │ │ ╭─MemberAccessExpr '.' +// CHECK:STDOUT: │ │ ├─IntLiteral '1' +// CHECK:STDOUT: │ │ ╭─MemberAccessExpr '.' +// CHECK:STDOUT: │ │ ├─IntLiteral '2' +// CHECK:STDOUT: │ ├─MemberAccessExpr '.' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/tuple/access/value_access.carbon b/toolchain/parse/testdata/tuple/access/value_access.carbon index 1753e77c010f..367f3e7ffd50 100644 --- a/toolchain/parse/testdata/tuple/access/value_access.carbon +++ b/toolchain/parse/testdata/tuple/access/value_access.carbon @@ -11,17 +11,16 @@ let x: i32 = tuple.0; // CHECK:STDOUT: - filename: value_access.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'tuple'}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'MemberAccessExpr', text: '.', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'tuple' +// CHECK:STDOUT: │ │ ├─IntLiteral '0' +// CHECK:STDOUT: │ ├─MemberAccessExpr '.' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/tuple/nested.carbon b/toolchain/parse/testdata/tuple/nested.carbon index cd7ac285d37a..7f94a8dd67f7 100644 --- a/toolchain/parse/testdata/tuple/nested.carbon +++ b/toolchain/parse/testdata/tuple/nested.carbon @@ -13,47 +13,46 @@ var y: ((), (), ()); var (a: (), (b: (), c: ())); // CHECK:STDOUT: - filename: nested.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'TupleLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'TupleLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 16}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'c'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 21}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 22}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 24}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ │ ├─TupleLiteralComma ',' +// CHECK:STDOUT: │ │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ │ ├─TupleLiteralComma ',' +// CHECK:STDOUT: │ │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─TuplePatternStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ ├─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─TuplePatternStart '(' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ │ ├─VarBindingPattern ':' +// CHECK:STDOUT: │ │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'c' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ │ ├─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─TuplePattern ')' +// CHECK:STDOUT: │ │ ╭─TuplePattern ')' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/tuple/two_entries.carbon b/toolchain/parse/testdata/tuple/two_entries.carbon index f3f7cce7a03c..84179e3677e0 100644 --- a/toolchain/parse/testdata/tuple/two_entries.carbon +++ b/toolchain/parse/testdata/tuple/two_entries.carbon @@ -11,24 +11,23 @@ var x: (i32, i32) = (1, 2); // CHECK:STDOUT: - filename: two_entries.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'TupleLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '1'}, -// CHECK:STDOUT: {kind: 'TupleLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '2'}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 17}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─TupleLiteralComma ',' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ ├─IntLiteral '1' +// CHECK:STDOUT: │ │ ├─TupleLiteralComma ',' +// CHECK:STDOUT: │ │ ├─IntLiteral '2' +// CHECK:STDOUT: │ ├─TupleLiteral ')' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/var/fail_bad_name.carbon b/toolchain/parse/testdata/var/fail_bad_name.carbon index 72a713847aad..5d4863172c1f 100644 --- a/toolchain/parse/testdata/var/fail_bad_name.carbon +++ b/toolchain/parse/testdata/var/fail_bad_name.carbon @@ -27,26 +27,25 @@ var choice: i32; var f2: f32; // CHECK:STDOUT: - filename: fail_bad_name.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ';', has_error: yes}, -// CHECK:STDOUT: {kind: 'PrefixOperatorStar', text: '*', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'choice'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'f2'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'FloatTypeLiteral', text: 'f32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─InvalidParse ';' has_error +// CHECK:STDOUT: │ │ ╭─PrefixOperatorStar '*' has_error +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'choice' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'f2' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─FloatTypeLiteral 'f32' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/var/fail_empty.carbon b/toolchain/parse/testdata/var/fail_empty.carbon index f74b8b038fba..9ca4137edf5d 100644 --- a/toolchain/parse/testdata/var/fail_empty.carbon +++ b/toolchain/parse/testdata/var/fail_empty.carbon @@ -15,11 +15,10 @@ var; // CHECK:STDOUT: - filename: fail_empty.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ';', has_error: yes}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─InvalidParse ';' has_error +// CHECK:STDOUT: │ ├─VariablePattern 'var' has_error +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/var/fail_in_interface.carbon b/toolchain/parse/testdata/var/fail_in_interface.carbon index 512e92a34865..6c80296e8193 100644 --- a/toolchain/parse/testdata/var/fail_in_interface.carbon +++ b/toolchain/parse/testdata/var/fail_in_interface.carbon @@ -35,19 +35,18 @@ interface I { } // CHECK:STDOUT: - filename: fail_in_interface.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'I'}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'AssociatedConstantIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'AssociatedConstantDecl', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InvalidParseStart', text: 'var', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParseSubtree', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'AssociatedConstantIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'AssociatedConstantDecl', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InvalidParseStart', text: 'var', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParseSubtree', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'I' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─AssociatedConstantIntroducer 'let' +// CHECK:STDOUT: │ ├─AssociatedConstantDecl ';' has_error +// CHECK:STDOUT: │ │ ╭─InvalidParseStart 'var' has_error +// CHECK:STDOUT: │ ├─InvalidParseSubtree ';' has_error +// CHECK:STDOUT: │ │ ╭─AssociatedConstantIntroducer 'let' +// CHECK:STDOUT: │ ├─AssociatedConstantDecl ';' has_error +// CHECK:STDOUT: │ │ ╭─InvalidParseStart 'var' has_error +// CHECK:STDOUT: │ ├─InvalidParseSubtree ';' has_error +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/var/fail_no_semi.carbon b/toolchain/parse/testdata/var/fail_no_semi.carbon index 13dbdaaaf165..b8734d7f98b8 100644 --- a/toolchain/parse/testdata/var/fail_no_semi.carbon +++ b/toolchain/parse/testdata/var/fail_no_semi.carbon @@ -10,20 +10,19 @@ var -// CHECK:STDERR: fail_no_semi.carbon:[[@LINE+16]]:21: error: expected pattern [ExpectedPattern] -// CHECK:STDERR: // CHECK:STDOUT: ] -// CHECK:STDERR: ^ +// CHECK:STDERR: fail_no_semi.carbon:[[@LINE+15]]:26: error: expected pattern [ExpectedPattern] +// CHECK:STDERR: // CHECK:STDOUT: (root) +// CHECK:STDERR: ^ // CHECK:STDERR: -// CHECK:STDERR: fail_no_semi.carbon:[[@LINE+12]]:21: error: `var` declarations must end with a `;` [ExpectedDeclSemi] -// CHECK:STDERR: // CHECK:STDOUT: ] -// CHECK:STDERR: ^ +// CHECK:STDERR: fail_no_semi.carbon:[[@LINE+11]]:26: error: `var` declarations must end with a `;` [ExpectedDeclSemi] +// CHECK:STDERR: // CHECK:STDOUT: (root) +// CHECK:STDERR: ^ // CHECK:STDERR: // CHECK:STDOUT: - filename: fail_no_semi.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '', has_error: yes}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: 'var', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─InvalidParse '' has_error +// CHECK:STDOUT: │ ├─VariablePattern 'var' has_error +// CHECK:STDOUT: ├─VariableDecl 'var' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/var/fail_ref.carbon b/toolchain/parse/testdata/var/fail_ref.carbon index 32ba74e79553..7e7c8ed9e546 100644 --- a/toolchain/parse/testdata/var/fail_ref.carbon +++ b/toolchain/parse/testdata/var/fail_ref.carbon @@ -15,17 +15,16 @@ var ref x: i32 = 0; // CHECK:STDOUT: - filename: fail_ref.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'RefBindingName', text: 'ref', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':', has_error: yes}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ╭─RefBindingName 'ref' has_error +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' has_error +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' has_error +// CHECK:STDOUT: │ ├─VariablePattern 'var' has_error +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ ├─IntLiteral '0' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/var/unused.carbon b/toolchain/parse/testdata/var/unused.carbon index a5e5efe9e4b1..8dfcd469d541 100644 --- a/toolchain/parse/testdata/var/unused.carbon +++ b/toolchain/parse/testdata/var/unused.carbon @@ -87,526 +87,516 @@ var unused unused x: i32 = 0; var unused (unused y: i32) = (0,); // CHECK:STDOUT: - filename: fail_unused_does_not_start_declaration.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'InvalidParseStart', text: 'unused', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParseSubtree', text: ';', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─InvalidParseStart 'unused' has_error +// CHECK:STDOUT: ├─InvalidParseSubtree ';' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: let_var_unused.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'UnusedPattern', text: 'unused', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'UnusedPattern', text: 'unused', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'w'}, -// CHECK:STDOUT: {kind: 'RefBindingName', text: 'ref', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'UnusedPattern', text: 'unused', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'UnusedPattern', text: 'unused', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'UnusedPattern', text: 'unused', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'c'}, -// CHECK:STDOUT: {kind: 'RefBindingName', text: 'ref', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'UnusedPattern', text: 'unused', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 21}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 24}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'UnusedPattern', text: 'unused', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'z'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'UnusedPattern', text: 'unused', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'w'}, -// CHECK:STDOUT: {kind: 'RefBindingName', text: 'ref', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'UnusedPattern', text: 'unused', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 't'}, -// CHECK:STDOUT: {kind: 'RefBindingName', text: 'ref', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'StringTypeLiteral', text: 'str'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'UnusedPattern', text: 'unused', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StringLiteral', text: '"hello"'}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 60}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ╭─UnusedPattern 'unused' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ╭─LetBindingPattern ':' +// CHECK:STDOUT: │ ├─UnusedPattern 'unused' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'w' +// CHECK:STDOUT: │ │ ╭─RefBindingName 'ref' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ╭─LetBindingPattern ':' +// CHECK:STDOUT: │ ├─UnusedPattern 'unused' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ ├─IntLiteral '0' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─UnusedPattern 'unused' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ │ ╭─UnusedPattern 'unused' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'c' +// CHECK:STDOUT: │ │ │ ╭─RefBindingName 'ref' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─UnusedPattern 'unused' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ │ ╭─UnusedPattern 'unused' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: │ │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'z' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─UnusedPattern 'unused' +// CHECK:STDOUT: │ ├─LetDecl ';' +// CHECK:STDOUT: │ │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'w' +// CHECK:STDOUT: │ │ │ ╭─RefBindingName 'ref' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─UnusedPattern 'unused' +// CHECK:STDOUT: │ │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ├─IntLiteral '0' +// CHECK:STDOUT: │ ├─LetDecl ';' +// CHECK:STDOUT: │ │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 't' +// CHECK:STDOUT: │ │ │ ╭─RefBindingName 'ref' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─StringTypeLiteral 'str' +// CHECK:STDOUT: │ │ │ ╭─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─UnusedPattern 'unused' +// CHECK:STDOUT: │ │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ├─StringLiteral '"hello"' +// CHECK:STDOUT: │ ├─LetDecl ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: unused_tuple.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'UnusedPattern', text: 'unused', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'TupleLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 25}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'UnusedPattern', text: 'unused', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'TupleLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 25}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'UnusedPattern', text: 'unused', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'TupleLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 24}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'UnusedPattern', text: 'unused', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'TupleLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 25}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'UnusedPattern', text: 'unused', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'TupleLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 25}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─TuplePatternStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ │ ╭─UnusedPattern 'unused' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─TuplePattern ')' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ ├─TupleLiteralComma ',' +// CHECK:STDOUT: │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ ├─TupleLiteral ')' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─TuplePatternStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ │ ╭─VariablePattern 'var' +// CHECK:STDOUT: │ │ ├─UnusedPattern 'unused' +// CHECK:STDOUT: │ ├─TuplePattern ')' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ ├─TupleLiteralComma ',' +// CHECK:STDOUT: │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ ├─TupleLiteral ')' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─TuplePatternStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ╭─TuplePattern ')' +// CHECK:STDOUT: │ ├─UnusedPattern 'unused' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ ├─TupleLiteralComma ',' +// CHECK:STDOUT: │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ ├─TupleLiteral ')' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─TuplePatternStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ ├─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─UnusedPattern 'unused' +// CHECK:STDOUT: │ │ ╭─TuplePattern ')' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ ├─TupleLiteralComma ',' +// CHECK:STDOUT: │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ ├─TupleLiteral ')' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─TuplePatternStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ ├─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ ├─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ╭─TuplePattern ')' +// CHECK:STDOUT: │ │ ╭─UnusedPattern 'unused' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ ├─TupleLiteralComma ',' +// CHECK:STDOUT: │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ ├─TupleLiteral ')' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: unused_struct.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'UnusedPattern', text: 'unused', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 16}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 21}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'UnusedPattern', text: 'unused', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 16}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 21}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'UnusedPattern', text: 'unused', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 17}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'UnusedPattern', text: 'unused', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 18}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'UnusedPattern', text: 'unused', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 18}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─StructPatternDesignatedField '=' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ │ ╭─UnusedPattern 'unused' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─StructPattern '}' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─StructPatternDesignatedField '=' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ │ ╭─VariablePattern 'var' +// CHECK:STDOUT: │ │ ├─UnusedPattern 'unused' +// CHECK:STDOUT: │ ├─StructPattern '}' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ╭─StructPattern '}' +// CHECK:STDOUT: │ ├─UnusedPattern 'unused' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─UnusedPattern 'unused' +// CHECK:STDOUT: │ │ ╭─StructPattern '}' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ╭─StructPattern '}' +// CHECK:STDOUT: │ │ ╭─UnusedPattern 'unused' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: var_unused_function.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'UnusedPattern', text: 'unused', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 18}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ │ ╭─UnusedPattern 'unused' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: var_unused_match.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', 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}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '3'}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'MatchIntroducer', text: 'match'}, -// CHECK:STDOUT: {kind: 'MatchConditionStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'f'}, -// CHECK:STDOUT: {kind: 'CallExprStart', text: '(', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'x'}, -// CHECK:STDOUT: {kind: 'CallExpr', text: ')', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'MatchCondition', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'MatchStatementStart', text: '{', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'MatchCaseIntroducer', text: 'case'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'b'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'UnusedPattern', text: 'unused', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'MatchCase', text: '=>', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'MatchHandlerStart', text: '{', subtree_size: 16}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MatchHandler', text: '}', subtree_size: 20}, -// CHECK:STDOUT: {kind: 'MatchCaseIntroducer', text: 'case'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'ParenPattern', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'MatchCaseGuardIntroducer', text: 'if'}, -// CHECK:STDOUT: {kind: 'MatchCaseGuardStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'InfixOperatorLess', text: '<', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MatchCaseGuard', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'MatchCase', text: '=>', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'MatchHandlerStart', text: '{', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '2'}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MatchHandler', text: '}', subtree_size: 19}, -// CHECK:STDOUT: {kind: 'MatchCaseIntroducer', text: 'case'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'a'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'UnusedPattern', text: 'unused', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'MatchCaseGuardIntroducer', text: 'if'}, -// CHECK:STDOUT: {kind: 'MatchCaseGuardStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'x'}, -// CHECK:STDOUT: {kind: 'InfixOperatorExclaimEqual', text: '!=', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MatchCaseGuard', text: ')', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'MatchCase', text: '=>', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'MatchHandlerStart', text: '{', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '3'}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MatchHandler', text: '}', subtree_size: 19}, -// CHECK:STDOUT: {kind: 'MatchDefaultIntroducer', text: 'default'}, -// CHECK:STDOUT: {kind: 'MatchDefault', text: '=>', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'MatchHandlerStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '4'}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'MatchHandler', text: '}', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'MatchStatement', text: '}', subtree_size: 74}, -// CHECK:STDOUT: {kind: 'ReturnStatementStart', text: 'return'}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'ReturnStatement', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 94}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ ├─ReturnType '->' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ├─IntLiteral '3' +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: │ │ ╭─MatchIntroducer 'match' +// CHECK:STDOUT: │ │ │ ╭─MatchConditionStart '(' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameExpr 'f' +// CHECK:STDOUT: │ │ │ │ ╭─CallExprStart '(' +// CHECK:STDOUT: │ │ │ │ ├─IdentifierNameExpr 'x' +// CHECK:STDOUT: │ │ │ ├─CallExpr ')' +// CHECK:STDOUT: │ │ ├─MatchCondition ')' +// CHECK:STDOUT: │ │ ╭─MatchStatementStart '{' +// CHECK:STDOUT: │ │ │ ╭─MatchCaseIntroducer 'case' +// CHECK:STDOUT: │ │ │ │ ╭─TuplePatternStart '(' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ │ ├─VarBindingPattern ':' +// CHECK:STDOUT: │ │ │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'b' +// CHECK:STDOUT: │ │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ │ ├─VarBindingPattern ':' +// CHECK:STDOUT: │ │ │ │ ╭─TuplePattern ')' +// CHECK:STDOUT: │ │ │ │ ╭─VariablePattern 'var' +// CHECK:STDOUT: │ │ │ ├─UnusedPattern 'unused' +// CHECK:STDOUT: │ │ │ ╭─MatchCase '=>' +// CHECK:STDOUT: │ │ │ ╭─MatchHandlerStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ │ │ ├─IntLiteral '0' +// CHECK:STDOUT: │ │ │ ├─ReturnStatement ';' +// CHECK:STDOUT: │ │ ├─MatchHandler '}' +// CHECK:STDOUT: │ │ │ ╭─MatchCaseIntroducer 'case' +// CHECK:STDOUT: │ │ │ │ ╭─TuplePatternStart '(' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ │ ├─ParenPattern ')' +// CHECK:STDOUT: │ │ │ │ ╭─MatchCaseGuardIntroducer 'if' +// CHECK:STDOUT: │ │ │ │ ├─MatchCaseGuardStart '(' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ │ │ │ ├─IntLiteral '0' +// CHECK:STDOUT: │ │ │ │ ├─InfixOperatorLess '<' +// CHECK:STDOUT: │ │ │ ├─MatchCaseGuard ')' +// CHECK:STDOUT: │ │ │ ╭─MatchCase '=>' +// CHECK:STDOUT: │ │ │ ╭─MatchHandlerStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ │ │ ├─IntLiteral '2' +// CHECK:STDOUT: │ │ │ ├─ReturnStatement ';' +// CHECK:STDOUT: │ │ ├─MatchHandler '}' +// CHECK:STDOUT: │ │ │ ╭─MatchCaseIntroducer 'case' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'a' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ │ │ ╭─UnusedPattern 'unused' +// CHECK:STDOUT: │ │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ │ │ │ ╭─MatchCaseGuardIntroducer 'if' +// CHECK:STDOUT: │ │ │ │ ├─MatchCaseGuardStart '(' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ │ │ │ ├─IdentifierNameExpr 'x' +// CHECK:STDOUT: │ │ │ │ ├─InfixOperatorExclaimEqual '!=' +// CHECK:STDOUT: │ │ │ ├─MatchCaseGuard ')' +// CHECK:STDOUT: │ │ │ ╭─MatchCase '=>' +// CHECK:STDOUT: │ │ │ ╭─MatchHandlerStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ │ │ ├─IntLiteral '3' +// CHECK:STDOUT: │ │ │ ├─ReturnStatement ';' +// CHECK:STDOUT: │ │ ├─MatchHandler '}' +// CHECK:STDOUT: │ │ │ ╭─MatchDefaultIntroducer 'default' +// CHECK:STDOUT: │ │ │ ╭─MatchDefault '=>' +// CHECK:STDOUT: │ │ │ ╭─MatchHandlerStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ │ │ ├─IntLiteral '4' +// CHECK:STDOUT: │ │ │ ├─ReturnStatement ';' +// CHECK:STDOUT: │ │ ├─MatchHandler '}' +// CHECK:STDOUT: │ ├─MatchStatement '}' +// CHECK:STDOUT: │ │ ╭─ReturnStatementStart 'return' +// CHECK:STDOUT: │ │ ├─IntLiteral '0' +// CHECK:STDOUT: │ ├─ReturnStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: unused_var_function.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'UnusedPattern', text: 'unused', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 18}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ │ ╭─VariablePattern 'var' +// CHECK:STDOUT: │ │ ├─UnusedPattern 'unused' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_ref_unused.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'RefBindingName', text: 'ref', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':', has_error: yes}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'UnusedPattern', text: 'unused', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', has_error: yes, subtree_size: 8}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ ╭─RefBindingName 'ref' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' has_error +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─LetBindingPattern ':' has_error +// CHECK:STDOUT: │ │ ├─UnusedPattern 'unused' has_error +// CHECK:STDOUT: │ ├─ExplicitParamList ')' has_error +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_nested.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'UnusedPattern', text: 'unused', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'UnusedPattern', text: 'unused', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ╭─UnusedPattern 'unused' +// CHECK:STDOUT: │ │ ╭─UnusedPattern 'unused' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ ├─IntLiteral '0' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_nested_parens.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'UnusedPattern', text: 'unused', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'ParenPattern', text: ')', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'UnusedPattern', text: 'unused', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'TupleLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 16}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─TuplePatternStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─UnusedPattern 'unused' +// CHECK:STDOUT: │ │ ╭─ParenPattern ')' +// CHECK:STDOUT: │ │ ╭─UnusedPattern 'unused' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ ├─IntLiteral '0' +// CHECK:STDOUT: │ │ ├─TupleLiteralComma ',' +// CHECK:STDOUT: │ ├─TupleLiteral ')' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/var/var.carbon b/toolchain/parse/testdata/var/var.carbon index 74bbb6b4c83e..560b8e339af0 100644 --- a/toolchain/parse/testdata/var/var.carbon +++ b/toolchain/parse/testdata/var/var.carbon @@ -17,56 +17,55 @@ fn F() { } // CHECK:STDOUT: - filename: var.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'v'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'UnderscoreName', text: '_'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'w'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 's'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'StringTypeLiteral', text: 'str'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StringLiteral', text: '"hello"'}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'UnderscoreName', text: '_'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'StringTypeLiteral', text: 'str'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StringLiteral', text: '"anonymous"'}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 24}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'v' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ ├─IntLiteral '0' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─UnderscoreName '_' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ ├─IntLiteral '0' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'w' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 's' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─StringTypeLiteral 'str' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ├─StringLiteral '"hello"' +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─UnderscoreName '_' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─StringTypeLiteral 'str' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ├─StringLiteral '"anonymous"' +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/var/var_pattern.carbon b/toolchain/parse/testdata/var/var_pattern.carbon index b7ffd7becdb3..4044adafcc83 100644 --- a/toolchain/parse/testdata/var/var_pattern.carbon +++ b/toolchain/parse/testdata/var/var_pattern.carbon @@ -37,161 +37,155 @@ let {var y: ()} = {.y = ()}; let (x: (), var (y: (), var z: ())) = ((), ((), ())); // CHECK:STDOUT: - filename: basic.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ ├─TupleLiteral ')' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: tuple.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'TupleLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 24}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─TuplePatternStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─TuplePattern ')' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ ├─TupleLiteralComma ',' +// CHECK:STDOUT: │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ ├─TupleLiteral ')' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: function.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 17}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: struct.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'StructLiteralField', text: '=', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 21}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ │ ├─StructPatternDesignatedField '=' +// CHECK:STDOUT: │ ├─StructPattern '}' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ ├─StructLiteralField '=' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: struct_shorthand.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'StructLiteralField', text: '=', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 18}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─StructPattern '}' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ ├─StructLiteralField '=' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_nested.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'y'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'z'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', has_error: yes, subtree_size: 14}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 23}, -// CHECK:STDOUT: {kind: 'LetInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'TupleLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'TupleLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 38}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─TuplePatternStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─TuplePatternStart '(' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'y' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ │ ├─VarBindingPattern ':' +// CHECK:STDOUT: │ │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'z' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ │ │ ├─VariablePattern 'var' has_error +// CHECK:STDOUT: │ │ │ ╭─TuplePattern ')' has_error +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─TuplePattern ')' +// CHECK:STDOUT: │ ├─LetInitializer '=' +// CHECK:STDOUT: │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ ├─TupleLiteralComma ',' +// CHECK:STDOUT: │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ │ ├─TupleLiteralComma ',' +// CHECK:STDOUT: │ │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ ├─TupleLiteral ')' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/var/var_struct.carbon b/toolchain/parse/testdata/var/var_struct.carbon index 91e944c51f85..afcd5ba268d9 100644 --- a/toolchain/parse/testdata/var/var_struct.carbon +++ b/toolchain/parse/testdata/var/var_struct.carbon @@ -21,104 +21,101 @@ var {s: str, i: 32} = {.s = "hello shorthand", .i = 1}; var {.s = s: str, i: 32} = {.s = "hello mixed", .i = 1}; // CHECK:STDOUT: - filename: var_struct.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 's'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 's'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'StringTypeLiteral', text: 'str'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'i'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'i'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 17}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 18}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 's'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'StringLiteral', text: '"hello"'}, -// CHECK:STDOUT: {kind: 'StructLiteralField', text: '=', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'i'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'StructLiteralField', text: '=', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 32}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 's' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 's' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─StringTypeLiteral 'str' +// CHECK:STDOUT: │ │ │ ├─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─StructPatternDesignatedField '=' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'i' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'i' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IntLiteral '32' +// CHECK:STDOUT: │ │ │ ├─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─StructPatternDesignatedField '=' +// CHECK:STDOUT: │ │ ╭─StructPattern '}' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 's' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ ├─StringLiteral '"hello"' +// CHECK:STDOUT: │ │ ├─StructLiteralField '=' +// CHECK:STDOUT: │ │ ├─StructLiteralComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'i' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ ├─IntLiteral '0' +// CHECK:STDOUT: │ │ ├─StructLiteralField '=' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: var_struct_shorthand.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 's'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'StringTypeLiteral', text: 'str'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'i'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 's'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'StringLiteral', text: '"hello shorthand"'}, -// CHECK:STDOUT: {kind: 'StructLiteralField', text: '=', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'i'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '1'}, -// CHECK:STDOUT: {kind: 'StructLiteralField', text: '=', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 26}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 's' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─StringTypeLiteral 'str' +// CHECK:STDOUT: │ │ ├─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'i' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntLiteral '32' +// CHECK:STDOUT: │ │ ├─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ╭─StructPattern '}' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 's' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ ├─StringLiteral '"hello shorthand"' +// CHECK:STDOUT: │ │ ├─StructLiteralField '=' +// CHECK:STDOUT: │ │ ├─StructLiteralComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'i' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ ├─IntLiteral '1' +// CHECK:STDOUT: │ │ ├─StructLiteralField '=' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: var_struct_mixed.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'StructPatternStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 's'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 's'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'StringTypeLiteral', text: 'str'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPatternDesignatedField', text: '=', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'i'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructPattern', text: '}', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 's'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'StringLiteral', text: '"hello mixed"'}, -// CHECK:STDOUT: {kind: 'StructLiteralField', text: '=', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'i'}, -// CHECK:STDOUT: {kind: 'StructFieldDesignator', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '1'}, -// CHECK:STDOUT: {kind: 'StructLiteralField', text: '=', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 29}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─StructPatternStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 's' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 's' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─StringTypeLiteral 'str' +// CHECK:STDOUT: │ │ │ ├─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ├─StructPatternDesignatedField '=' +// CHECK:STDOUT: │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'i' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ├─IntLiteral '32' +// CHECK:STDOUT: │ │ ├─VarBindingPattern ':' +// CHECK:STDOUT: │ │ ╭─StructPattern '}' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 's' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ ├─StringLiteral '"hello mixed"' +// CHECK:STDOUT: │ │ ├─StructLiteralField '=' +// CHECK:STDOUT: │ │ ├─StructLiteralComma ',' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'i' +// CHECK:STDOUT: │ │ │ ╭─StructFieldDesignator '.' +// CHECK:STDOUT: │ │ │ ├─IntLiteral '1' +// CHECK:STDOUT: │ │ ├─StructLiteralField '=' +// CHECK:STDOUT: │ ├─StructLiteral '}' +// CHECK:STDOUT: ├─VariableDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/var/var_tuple.carbon b/toolchain/parse/testdata/var/var_tuple.carbon index f2ea9bfaedc7..6d1fb10ed167 100644 --- a/toolchain/parse/testdata/var/var_tuple.carbon +++ b/toolchain/parse/testdata/var/var_tuple.carbon @@ -13,33 +13,32 @@ fn F() { } // CHECK:STDOUT: - filename: var_tuple.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'TuplePatternStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 's'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'StringTypeLiteral', text: 'str'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'PatternListComma', text: ','}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'i'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'TuplePattern', text: ')', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'StringLiteral', text: '"hello"'}, -// CHECK:STDOUT: {kind: 'TupleLiteralComma', text: ','}, -// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 20}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 26}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ │ ╭─TuplePatternStart '(' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 's' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─StringTypeLiteral 'str' +// CHECK:STDOUT: │ │ │ ├─VarBindingPattern ':' +// CHECK:STDOUT: │ │ │ ├─PatternListComma ',' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'i' +// CHECK:STDOUT: │ │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ├─IntLiteral '32' +// CHECK:STDOUT: │ │ │ ├─VarBindingPattern ':' +// CHECK:STDOUT: │ │ │ ╭─TuplePattern ')' +// CHECK:STDOUT: │ │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ ├─StringLiteral '"hello"' +// CHECK:STDOUT: │ │ │ ├─TupleLiteralComma ',' +// CHECK:STDOUT: │ │ │ ├─IntLiteral '0' +// CHECK:STDOUT: │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ ├─VariableDecl ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/where_expr/basic.carbon b/toolchain/parse/testdata/where_expr/basic.carbon index d66bd46edee3..cfc56f551b1c 100644 --- a/toolchain/parse/testdata/where_expr/basic.carbon +++ b/toolchain/parse/testdata/where_expr/basic.carbon @@ -21,69 +21,68 @@ fn F() { } // CHECK:STDOUT: - filename: basic.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'T'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, -// CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'SelfTypeName', text: 'Self'}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'RequirementEqualEqual', text: '==', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'LetBindingPattern', text: ':', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'I'}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'AssociatedConstantIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'T'}, -// CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, -// CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Foo'}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Bar'}, -// CHECK:STDOUT: {kind: 'RequirementImpls', text: 'impls', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'AssociatedConstantNameAndType', text: ':', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'AssociatedConstantDecl', text: ';', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'T'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, -// CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'U'}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'V'}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'RequirementEqual', text: '=', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'LetIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'U'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, -// CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'W'}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'X'}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'RequirementEqualEqual', text: '==', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'LetDecl', text: ';', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 19}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'Foo' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'T' +// CHECK:STDOUT: │ │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─TypeTypeLiteral 'type' +// CHECK:STDOUT: │ │ │ │ ╭─WhereOperand 'where' +// CHECK:STDOUT: │ │ │ │ │ ╭─SelfTypeName 'Self' +// CHECK:STDOUT: │ │ │ │ │ ╭─DesignatorExpr '.' +// CHECK:STDOUT: │ │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ │ ├─RequirementEqualEqual '==' +// CHECK:STDOUT: │ │ │ ├─WhereExpr 'where' +// CHECK:STDOUT: │ │ ├─LetBindingPattern ':' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'I' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─AssociatedConstantIntroducer 'let' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'T' +// CHECK:STDOUT: │ │ │ │ ╭─TypeTypeLiteral 'type' +// CHECK:STDOUT: │ │ │ │ ╭─WhereOperand 'where' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'Foo' +// CHECK:STDOUT: │ │ │ │ │ ╭─DesignatorExpr '.' +// CHECK:STDOUT: │ │ │ │ │ ├─IdentifierNameExpr 'Bar' +// CHECK:STDOUT: │ │ │ │ ├─RequirementImpls 'impls' +// CHECK:STDOUT: │ │ │ ├─WhereExpr 'where' +// CHECK:STDOUT: │ │ ├─AssociatedConstantNameAndType ':' +// CHECK:STDOUT: │ ├─AssociatedConstantDecl ';' +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'T' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ ╭─TypeTypeLiteral 'type' +// CHECK:STDOUT: │ │ │ ╭─WhereOperand 'where' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'U' +// CHECK:STDOUT: │ │ │ │ ╭─DesignatorExpr '.' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'V' +// CHECK:STDOUT: │ │ │ │ ├─DesignatorExpr '.' +// CHECK:STDOUT: │ │ │ ├─RequirementEqual '=' +// CHECK:STDOUT: │ │ ├─WhereExpr 'where' +// CHECK:STDOUT: │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: ├─LetDecl ';' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─LetIntroducer 'let' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'U' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─TypeTypeLiteral 'type' +// CHECK:STDOUT: │ │ │ │ ╭─WhereOperand 'where' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'W' +// CHECK:STDOUT: │ │ │ │ │ ╭─DesignatorExpr '.' +// CHECK:STDOUT: │ │ │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'X' +// CHECK:STDOUT: │ │ │ │ │ ├─DesignatorExpr '.' +// CHECK:STDOUT: │ │ │ │ ├─RequirementEqualEqual '==' +// CHECK:STDOUT: │ │ │ ├─WhereExpr 'where' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ ├─LetDecl ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/where_expr/designators.carbon b/toolchain/parse/testdata/where_expr/designators.carbon index 9fd162fd4762..8aa7ce972d09 100644 --- a/toolchain/parse/testdata/where_expr/designators.carbon +++ b/toolchain/parse/testdata/where_expr/designators.carbon @@ -59,100 +59,94 @@ fn FailStar() { var x: i32 = . -// CHECK:STDERR: fail_designator_eof.carbon:[[@LINE+96]]:21: error: expected identifier or `Self` after `.` [ExpectedIdentifierOrSelfAfterPeriod] -// CHECK:STDERR: // CHECK:STDOUT: ] -// CHECK:STDERR: ^ +// CHECK:STDERR: fail_designator_eof.carbon:[[@LINE+90]]:26: error: expected identifier or `Self` after `.` [ExpectedIdentifierOrSelfAfterPeriod] +// CHECK:STDERR: // CHECK:STDOUT: (root) +// CHECK:STDERR: ^ // CHECK:STDERR: -// CHECK:STDERR: fail_designator_eof.carbon:[[@LINE+92]]:21: error: `var` declarations must end with a `;` [ExpectedDeclSemi] -// CHECK:STDERR: // CHECK:STDOUT: ] -// CHECK:STDERR: ^ +// CHECK:STDERR: fail_designator_eof.carbon:[[@LINE+86]]:26: error: `var` declarations must end with a `;` [ExpectedDeclSemi] +// CHECK:STDERR: // CHECK:STDOUT: (root) +// CHECK:STDERR: ^ // CHECK:STDERR: // CHECK:STDOUT: - filename: designator.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'Success'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'SelfTypeName', text: 'Self'}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'Success' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ╭─DesignatorExpr '.' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: │ │ ╭─SelfTypeName 'Self' +// CHECK:STDOUT: │ │ ╭─DesignatorExpr '.' +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_numeric_designator.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'FailNumeric'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '1', has_error: yes}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'FailNumeric' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─InvalidParse '1' has_error +// CHECK:STDOUT: │ │ ╭─DesignatorExpr '.' has_error +// CHECK:STDOUT: │ ├─ExprStatement ';' has_error +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_keyword_designator.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'FailKeyword'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'base', has_error: yes}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'FailKeyword' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'base' has_error +// CHECK:STDOUT: │ │ ╭─DesignatorExpr '.' has_error +// CHECK:STDOUT: │ ├─ExprStatement ';' has_error +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_empty_designator.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'FailEmpty'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ';', has_error: yes}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'FailEmpty' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─InvalidParse ';' has_error +// CHECK:STDOUT: │ │ ╭─DesignatorExpr '.' has_error +// CHECK:STDOUT: │ ├─ExprStatement ';' has_error +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_star_designator.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'FailStar'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '*', has_error: yes}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ExprStatement', text: ';', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'FailStar' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─InvalidParse '*' has_error +// CHECK:STDOUT: │ │ ╭─DesignatorExpr '.' has_error +// CHECK:STDOUT: │ │ ╭─PostfixOperatorStar '*' has_error +// CHECK:STDOUT: │ ├─ExprStatement ';' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_designator_eof.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'x'}, -// CHECK:STDOUT: {kind: 'BindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '', has_error: yes}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: '.', has_error: yes, subtree_size: 10}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─VariableIntroducer 'var' +// CHECK:STDOUT: │ │ ╭─IdentifierNameNotBeforeSignature 'x' +// CHECK:STDOUT: │ │ ├─BindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ╭─VarBindingPattern ':' +// CHECK:STDOUT: │ ├─VariablePattern 'var' +// CHECK:STDOUT: │ ├─VariableInitializer '=' +// CHECK:STDOUT: │ │ ╭─InvalidParse '' has_error +// CHECK:STDOUT: │ ├─DesignatorExpr '.' has_error +// CHECK:STDOUT: ├─VariableDecl '.' has_error +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/where_expr/fail_rewrite.carbon b/toolchain/parse/testdata/where_expr/fail_rewrite.carbon index fd850eefe49d..0d57f9eff8c8 100644 --- a/toolchain/parse/testdata/where_expr/fail_rewrite.carbon +++ b/toolchain/parse/testdata/where_expr/fail_rewrite.carbon @@ -68,138 +68,131 @@ fn BinaryOpAfterDesignator(generic Y: N where .O + .P = {}); fn AfterAnd(generic Z: Q where .R impls S and () = .A); // CHECK:STDOUT: - filename: fail_not_designator.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'NotDesignator'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'T'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, -// CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', has_error: yes, subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', has_error: yes, subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'NotDesignator' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'T' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─TypeTypeLiteral 'type' +// CHECK:STDOUT: │ │ │ │ ╭─WhereOperand 'where' +// CHECK:STDOUT: │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ ├─WhereExpr 'where' has_error +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' has_error +// CHECK:STDOUT: │ ├─ExplicitParamList ')' has_error +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_designator_in_parens.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'DesignatorInParens'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'V'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'I'}, -// CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ParenExprStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'J'}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ParenExpr', text: ')', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', has_error: yes, subtree_size: 7}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', has_error: yes, subtree_size: 10}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', has_error: yes, subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'DesignatorInParens' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'V' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameExpr 'I' +// CHECK:STDOUT: │ │ │ │ ╭─WhereOperand 'where' +// CHECK:STDOUT: │ │ │ │ │ ╭─ParenExprStart '(' +// CHECK:STDOUT: │ │ │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'J' +// CHECK:STDOUT: │ │ │ │ │ ├─DesignatorExpr '.' +// CHECK:STDOUT: │ │ │ │ ├─ParenExpr ')' +// CHECK:STDOUT: │ │ │ ├─WhereExpr 'where' has_error +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' has_error +// CHECK:STDOUT: │ ├─ExplicitParamList ')' has_error +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_dot_self.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'DotSelf'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'W'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'K'}, -// CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'SelfTypeName', text: 'Self'}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', has_error: yes, subtree_size: 8}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', has_error: yes, subtree_size: 10}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'DotSelf' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'W' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameExpr 'K' +// CHECK:STDOUT: │ │ │ │ ╭─WhereOperand 'where' +// CHECK:STDOUT: │ │ │ │ │ ╭─SelfTypeName 'Self' +// CHECK:STDOUT: │ │ │ │ ├─DesignatorExpr '.' +// CHECK:STDOUT: │ │ │ ├─WhereExpr 'where' has_error +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' has_error +// CHECK:STDOUT: │ ├─ExplicitParamList ')' has_error +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_dot_keyword.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'DotKeyword'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'W'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'K'}, -// CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'and', has_error: yes}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', has_error: yes, subtree_size: 8}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', has_error: yes, subtree_size: 10}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'DotKeyword' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'W' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameExpr 'K' +// CHECK:STDOUT: │ │ │ │ ╭─WhereOperand 'where' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'and' has_error +// CHECK:STDOUT: │ │ │ │ ├─DesignatorExpr '.' has_error +// CHECK:STDOUT: │ │ │ ├─WhereExpr 'where' has_error +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' has_error +// CHECK:STDOUT: │ ├─ExplicitParamList ')' has_error +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_postfix_after_designator.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'PostfixAfterDesignator'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'X'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'L'}, -// CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'M'}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'PostfixOperatorStar', text: '*', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', has_error: yes, subtree_size: 6}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', has_error: yes, subtree_size: 9}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', has_error: yes, subtree_size: 11}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'PostfixAfterDesignator' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'X' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameExpr 'L' +// CHECK:STDOUT: │ │ │ │ ╭─WhereOperand 'where' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'M' +// CHECK:STDOUT: │ │ │ │ │ ╭─DesignatorExpr '.' +// CHECK:STDOUT: │ │ │ │ ├─PostfixOperatorStar '*' +// CHECK:STDOUT: │ │ │ ├─WhereExpr 'where' has_error +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' has_error +// CHECK:STDOUT: │ ├─ExplicitParamList ')' has_error +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_binary_op_after_designator.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'BinaryOpAfterDesignator'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Y'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'N'}, -// CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'O'}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'P'}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InfixOperatorPlus', text: '+', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', has_error: yes, subtree_size: 8}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', has_error: yes, subtree_size: 11}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', has_error: yes, subtree_size: 13}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 16}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'BinaryOpAfterDesignator' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'Y' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameExpr 'N' +// CHECK:STDOUT: │ │ │ │ ╭─WhereOperand 'where' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'O' +// CHECK:STDOUT: │ │ │ │ │ ╭─DesignatorExpr '.' +// CHECK:STDOUT: │ │ │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'P' +// CHECK:STDOUT: │ │ │ │ │ ├─DesignatorExpr '.' +// CHECK:STDOUT: │ │ │ │ ├─InfixOperatorPlus '+' +// CHECK:STDOUT: │ │ │ ├─WhereExpr 'where' has_error +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' has_error +// CHECK:STDOUT: │ ├─ExplicitParamList ')' has_error +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_after_and.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'AfterAnd'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Z'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Q'}, -// CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'R'}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'S'}, -// CHECK:STDOUT: {kind: 'RequirementImpls', text: 'impls', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'RequirementAnd', text: 'and'}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', has_error: yes, subtree_size: 10}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', has_error: yes, subtree_size: 13}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', has_error: yes, subtree_size: 15}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 18}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'AfterAnd' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'Z' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameExpr 'Q' +// CHECK:STDOUT: │ │ │ │ ╭─WhereOperand 'where' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'R' +// CHECK:STDOUT: │ │ │ │ │ ╭─DesignatorExpr '.' +// CHECK:STDOUT: │ │ │ │ │ ├─IdentifierNameExpr 'S' +// CHECK:STDOUT: │ │ │ │ ├─RequirementImpls 'impls' +// CHECK:STDOUT: │ │ │ │ ├─RequirementAnd 'and' +// CHECK:STDOUT: │ │ │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ │ ├─WhereExpr 'where' has_error +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' has_error +// CHECK:STDOUT: │ ├─ExplicitParamList ')' has_error +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/where_expr/impl_where.carbon b/toolchain/parse/testdata/where_expr/impl_where.carbon index 3c2769d69fd1..f5ee97e904ca 100644 --- a/toolchain/parse/testdata/where_expr/impl_where.carbon +++ b/toolchain/parse/testdata/where_expr/impl_where.carbon @@ -25,98 +25,97 @@ impl f64 as Interface where .T = (type where .Self impls type) { } // CHECK:STDOUT: - filename: impl_where.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'InterfaceIntroducer', text: 'interface'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Interface'}, -// CHECK:STDOUT: {kind: 'InterfaceDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'AssociatedConstantIntroducer', text: 'let'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'T'}, -// CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, -// CHECK:STDOUT: {kind: 'AssociatedConstantNameAndType', text: ':', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'AssociatedConstantDecl', text: ';', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'InterfaceDefinition', text: '}', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'ImplIntroducer', text: 'impl'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'ImplTypeAs', text: 'as', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Interface'}, -// CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'T'}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'RequirementEqual', text: '=', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'ImplDefinitionStart', text: '{', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'ImplDefinition', text: '}', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'ImplIntroducer', text: 'impl'}, -// CHECK:STDOUT: {kind: 'BoolTypeLiteral', text: 'bool'}, -// CHECK:STDOUT: {kind: 'ImplTypeAs', text: 'as', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Interface'}, -// CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'T'}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'RequirementEqual', text: '=', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ImplDecl', text: ';', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'ImplIntroducer', text: 'impl'}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ImplTypeAs', text: 'as', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ParenExprStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Interface'}, -// CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'T'}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'RequirementEqual', text: '=', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'ParenExpr', text: ')', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'ImplDefinitionStart', text: '{', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'ImplDefinition', text: '}', subtree_size: 16}, -// CHECK:STDOUT: {kind: 'ImplIntroducer', text: 'impl'}, -// CHECK:STDOUT: {kind: 'StructLiteralStart', text: '{'}, -// CHECK:STDOUT: {kind: 'StructLiteral', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ImplTypeAs', text: 'as', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'ParenExprStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Interface'}, -// CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'T'}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'RequirementEqual', text: '=', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'ParenExpr', text: ')', subtree_size: 10}, -// CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 11}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'T'}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'TupleLiteralStart', text: '('}, -// CHECK:STDOUT: {kind: 'TupleLiteral', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'RequirementEqual', text: '=', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', subtree_size: 17}, -// CHECK:STDOUT: {kind: 'ImplDecl', text: ';', subtree_size: 22}, -// CHECK:STDOUT: {kind: 'ImplIntroducer', text: 'impl'}, -// CHECK:STDOUT: {kind: 'FloatTypeLiteral', text: 'f64'}, -// CHECK:STDOUT: {kind: 'ImplTypeAs', text: 'as', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'Interface'}, -// CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'T'}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'ParenExprStart', text: '('}, -// CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, -// CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'SelfTypeName', text: 'Self'}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, -// CHECK:STDOUT: {kind: 'RequirementImpls', text: 'impls', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ParenExpr', text: ')', subtree_size: 9}, -// CHECK:STDOUT: {kind: 'RequirementEqual', text: '=', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', subtree_size: 15}, -// CHECK:STDOUT: {kind: 'ImplDefinitionStart', text: '{', subtree_size: 19}, -// CHECK:STDOUT: {kind: 'ImplDefinition', text: '}', subtree_size: 20}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─InterfaceIntroducer 'interface' +// CHECK:STDOUT: │ ├─IdentifierNameNotBeforeSignature 'Interface' +// CHECK:STDOUT: │ ╭─InterfaceDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─AssociatedConstantIntroducer 'let' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'T' +// CHECK:STDOUT: │ │ │ ├─TypeTypeLiteral 'type' +// CHECK:STDOUT: │ │ ├─AssociatedConstantNameAndType ':' +// CHECK:STDOUT: │ ├─AssociatedConstantDecl ';' +// CHECK:STDOUT: ├─InterfaceDefinition '}' +// CHECK:STDOUT: │ ╭─ImplIntroducer 'impl' +// CHECK:STDOUT: │ │ ╭─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ ├─ImplTypeAs 'as' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'Interface' +// CHECK:STDOUT: │ │ ╭─WhereOperand 'where' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'T' +// CHECK:STDOUT: │ │ │ ╭─DesignatorExpr '.' +// CHECK:STDOUT: │ │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ ├─RequirementEqual '=' +// CHECK:STDOUT: │ ├─WhereExpr 'where' +// CHECK:STDOUT: │ ╭─ImplDefinitionStart '{' +// CHECK:STDOUT: ├─ImplDefinition '}' +// CHECK:STDOUT: │ ╭─ImplIntroducer 'impl' +// CHECK:STDOUT: │ │ ╭─BoolTypeLiteral 'bool' +// CHECK:STDOUT: │ ├─ImplTypeAs 'as' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'Interface' +// CHECK:STDOUT: │ │ ╭─WhereOperand 'where' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'T' +// CHECK:STDOUT: │ │ │ ╭─DesignatorExpr '.' +// CHECK:STDOUT: │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ ├─RequirementEqual '=' +// CHECK:STDOUT: │ ├─WhereExpr 'where' +// CHECK:STDOUT: ├─ImplDecl ';' +// CHECK:STDOUT: │ ╭─ImplIntroducer 'impl' +// CHECK:STDOUT: │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ ╭─TupleLiteral ')' +// CHECK:STDOUT: │ ├─ImplTypeAs 'as' +// CHECK:STDOUT: │ │ ╭─ParenExprStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'Interface' +// CHECK:STDOUT: │ │ │ ╭─WhereOperand 'where' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'T' +// CHECK:STDOUT: │ │ │ │ ╭─DesignatorExpr '.' +// CHECK:STDOUT: │ │ │ │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ │ │ │ ├─StructLiteral '}' +// CHECK:STDOUT: │ │ │ ├─RequirementEqual '=' +// CHECK:STDOUT: │ │ ├─WhereExpr 'where' +// CHECK:STDOUT: │ ├─ParenExpr ')' +// CHECK:STDOUT: │ ╭─ImplDefinitionStart '{' +// CHECK:STDOUT: ├─ImplDefinition '}' +// CHECK:STDOUT: │ ╭─ImplIntroducer 'impl' +// CHECK:STDOUT: │ │ ╭─StructLiteralStart '{' +// CHECK:STDOUT: │ │ ╭─StructLiteral '}' +// CHECK:STDOUT: │ ├─ImplTypeAs 'as' +// CHECK:STDOUT: │ │ ╭─ParenExprStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameExpr 'Interface' +// CHECK:STDOUT: │ │ │ ╭─WhereOperand 'where' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'T' +// CHECK:STDOUT: │ │ │ │ ╭─DesignatorExpr '.' +// CHECK:STDOUT: │ │ │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ │ ├─RequirementEqual '=' +// CHECK:STDOUT: │ │ ├─WhereExpr 'where' +// CHECK:STDOUT: │ │ ╭─ParenExpr ')' +// CHECK:STDOUT: │ │ ╭─WhereOperand 'where' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'T' +// CHECK:STDOUT: │ │ │ ╭─DesignatorExpr '.' +// CHECK:STDOUT: │ │ │ │ ╭─TupleLiteralStart '(' +// CHECK:STDOUT: │ │ │ ├─TupleLiteral ')' +// CHECK:STDOUT: │ │ ├─RequirementEqual '=' +// CHECK:STDOUT: │ ├─WhereExpr 'where' +// CHECK:STDOUT: ├─ImplDecl ';' +// CHECK:STDOUT: │ ╭─ImplIntroducer 'impl' +// CHECK:STDOUT: │ │ ╭─FloatTypeLiteral 'f64' +// CHECK:STDOUT: │ ├─ImplTypeAs 'as' +// CHECK:STDOUT: │ │ ╭─IdentifierNameExpr 'Interface' +// CHECK:STDOUT: │ │ ╭─WhereOperand 'where' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'T' +// CHECK:STDOUT: │ │ │ ╭─DesignatorExpr '.' +// CHECK:STDOUT: │ │ │ │ ╭─ParenExprStart '(' +// CHECK:STDOUT: │ │ │ │ │ ╭─TypeTypeLiteral 'type' +// CHECK:STDOUT: │ │ │ │ │ ╭─WhereOperand 'where' +// CHECK:STDOUT: │ │ │ │ │ │ ╭─SelfTypeName 'Self' +// CHECK:STDOUT: │ │ │ │ │ │ ╭─DesignatorExpr '.' +// CHECK:STDOUT: │ │ │ │ │ │ ├─TypeTypeLiteral 'type' +// CHECK:STDOUT: │ │ │ │ │ ├─RequirementImpls 'impls' +// CHECK:STDOUT: │ │ │ │ ├─WhereExpr 'where' +// CHECK:STDOUT: │ │ │ ├─ParenExpr ')' +// CHECK:STDOUT: │ │ ├─RequirementEqual '=' +// CHECK:STDOUT: │ ├─WhereExpr 'where' +// CHECK:STDOUT: │ ╭─ImplDefinitionStart '{' +// CHECK:STDOUT: ├─ImplDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/where_expr/where_and.carbon b/toolchain/parse/testdata/where_expr/where_and.carbon index 97550be46394..d9509b655b62 100644 --- a/toolchain/parse/testdata/where_expr/where_and.carbon +++ b/toolchain/parse/testdata/where_expr/where_and.carbon @@ -39,111 +39,107 @@ fn AndSuffix(generic Y: I where .J impls K and); fn AndEarly(generic Z: L where .M and N); // CHECK:STDOUT: - filename: success.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'OneAnd'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'T'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, -// CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'U'}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'RequirementEqual', text: '=', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'RequirementAnd', text: 'and'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'V'}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'W'}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'RequirementEqualEqual', text: '==', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 16}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 18}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 21}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'TwoAnd'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Y'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'I'}, -// CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'J'}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'K'}, -// CHECK:STDOUT: {kind: 'RequirementImpls', text: 'impls', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'RequirementAnd', text: 'and'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'L'}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'M'}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'RequirementEqualEqual', text: '==', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'RequirementAnd', text: 'and'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'N'}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'BoolTypeLiteral', text: 'bool'}, -// CHECK:STDOUT: {kind: 'RequirementEqual', text: '=', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', subtree_size: 18}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', subtree_size: 21}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 23}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 26}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'OneAnd' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'T' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─TypeTypeLiteral 'type' +// CHECK:STDOUT: │ │ │ │ ╭─WhereOperand 'where' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'U' +// CHECK:STDOUT: │ │ │ │ │ ╭─DesignatorExpr '.' +// CHECK:STDOUT: │ │ │ │ │ ├─IntTypeLiteral 'i32' +// CHECK:STDOUT: │ │ │ │ ├─RequirementEqual '=' +// CHECK:STDOUT: │ │ │ │ ├─RequirementAnd 'and' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'V' +// CHECK:STDOUT: │ │ │ │ │ ╭─DesignatorExpr '.' +// CHECK:STDOUT: │ │ │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'W' +// CHECK:STDOUT: │ │ │ │ │ ├─DesignatorExpr '.' +// CHECK:STDOUT: │ │ │ │ ├─RequirementEqualEqual '==' +// CHECK:STDOUT: │ │ │ ├─WhereExpr 'where' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'TwoAnd' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'Y' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameExpr 'I' +// CHECK:STDOUT: │ │ │ │ ╭─WhereOperand 'where' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'J' +// CHECK:STDOUT: │ │ │ │ │ ╭─DesignatorExpr '.' +// CHECK:STDOUT: │ │ │ │ │ ├─IdentifierNameExpr 'K' +// CHECK:STDOUT: │ │ │ │ ├─RequirementImpls 'impls' +// CHECK:STDOUT: │ │ │ │ ├─RequirementAnd 'and' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'L' +// CHECK:STDOUT: │ │ │ │ │ ╭─DesignatorExpr '.' +// CHECK:STDOUT: │ │ │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'M' +// CHECK:STDOUT: │ │ │ │ │ ├─DesignatorExpr '.' +// CHECK:STDOUT: │ │ │ │ ├─RequirementEqualEqual '==' +// CHECK:STDOUT: │ │ │ │ ├─RequirementAnd 'and' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'N' +// CHECK:STDOUT: │ │ │ │ │ ╭─DesignatorExpr '.' +// CHECK:STDOUT: │ │ │ │ │ ├─BoolTypeLiteral 'bool' +// CHECK:STDOUT: │ │ │ │ ├─RequirementEqual '=' +// CHECK:STDOUT: │ │ │ ├─WhereExpr 'where' +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_and_prefix.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'AndPrefix'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'T'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'TypeTypeLiteral', text: 'type'}, -// CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: 'and', has_error: yes}, -// CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', has_error: yes, subtree_size: 7}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', has_error: yes, subtree_size: 9}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'AndPrefix' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'T' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─TypeTypeLiteral 'type' +// CHECK:STDOUT: │ │ │ │ ╭─WhereOperand 'where' +// CHECK:STDOUT: │ │ │ │ ├─InvalidParse 'and' has_error +// CHECK:STDOUT: │ │ │ ├─WhereExpr 'where' has_error +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' has_error +// CHECK:STDOUT: │ ├─ExplicitParamList ')' has_error +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_and_suffix.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'AndSuffix'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Y'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'I'}, -// CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'J'}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'K'}, -// CHECK:STDOUT: {kind: 'RequirementImpls', text: 'impls', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'RequirementAnd', text: 'and'}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: ')', has_error: yes}, -// CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', has_error: yes, subtree_size: 9}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', has_error: yes, subtree_size: 12}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', has_error: yes, subtree_size: 14}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 17}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'AndSuffix' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'Y' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameExpr 'I' +// CHECK:STDOUT: │ │ │ │ ╭─WhereOperand 'where' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'J' +// CHECK:STDOUT: │ │ │ │ │ ╭─DesignatorExpr '.' +// CHECK:STDOUT: │ │ │ │ │ ├─IdentifierNameExpr 'K' +// CHECK:STDOUT: │ │ │ │ ├─RequirementImpls 'impls' +// CHECK:STDOUT: │ │ │ │ ├─RequirementAnd 'and' +// CHECK:STDOUT: │ │ │ │ ├─InvalidParse ')' has_error +// CHECK:STDOUT: │ │ │ ├─WhereExpr 'where' has_error +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' has_error +// CHECK:STDOUT: │ ├─ExplicitParamList ')' has_error +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) // CHECK:STDOUT: - filename: fail_and_early.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'AndEarly'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'Z'}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPatternTypeStart', text: ':'}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'L'}, -// CHECK:STDOUT: {kind: 'WhereOperand', text: 'where', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeSignature', text: 'M'}, -// CHECK:STDOUT: {kind: 'DesignatorExpr', text: '.', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'WhereExpr', text: 'where', has_error: yes, subtree_size: 5}, -// CHECK:STDOUT: {kind: 'CompileTimeBindingPattern', text: ':', has_error: yes, subtree_size: 8}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', has_error: yes, subtree_size: 10}, -// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 13}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'AndEarly' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ │ │ ╭─IdentifierNameNotBeforeSignature 'Z' +// CHECK:STDOUT: │ │ │ ├─CompileTimeBindingPatternTypeStart ':' +// CHECK:STDOUT: │ │ │ │ ╭─IdentifierNameExpr 'L' +// CHECK:STDOUT: │ │ │ │ ╭─WhereOperand 'where' +// CHECK:STDOUT: │ │ │ │ │ ╭─IdentifierNameNotBeforeSignature 'M' +// CHECK:STDOUT: │ │ │ │ ├─DesignatorExpr '.' +// CHECK:STDOUT: │ │ │ ├─WhereExpr 'where' has_error +// CHECK:STDOUT: │ │ ├─CompileTimeBindingPattern ':' has_error +// CHECK:STDOUT: │ ├─ExplicitParamList ')' has_error +// CHECK:STDOUT: ├─FunctionDecl ';' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/while/basic.carbon b/toolchain/parse/testdata/while/basic.carbon index 27b97465b3e4..988faadb8570 100644 --- a/toolchain/parse/testdata/while/basic.carbon +++ b/toolchain/parse/testdata/while/basic.carbon @@ -20,35 +20,34 @@ fn F() { } // CHECK:STDOUT: - filename: basic.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'WhileConditionStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'WhileCondition', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IfConditionStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'IfCondition', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: '{'}, -// CHECK:STDOUT: {kind: 'BreakStatementStart', text: 'break'}, -// CHECK:STDOUT: {kind: 'BreakStatement', text: ';', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: '}', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IfStatement', text: 'if', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'IfConditionStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'c'}, -// CHECK:STDOUT: {kind: 'IfCondition', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: '{'}, -// CHECK:STDOUT: {kind: 'ContinueStatementStart', text: 'continue'}, -// CHECK:STDOUT: {kind: 'ContinueStatement', text: ';', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: '}', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IfStatement', text: 'if', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: '}', subtree_size: 18}, -// CHECK:STDOUT: {kind: 'WhileStatement', text: 'while', subtree_size: 22}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 28}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─WhileConditionStart '(' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ╭─WhileCondition ')' +// CHECK:STDOUT: │ │ │ ╭─CodeBlockStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─IfConditionStart '(' +// CHECK:STDOUT: │ │ │ │ ├─IdentifierNameExpr 'b' +// CHECK:STDOUT: │ │ │ │ ╭─IfCondition ')' +// CHECK:STDOUT: │ │ │ │ │ ╭─CodeBlockStart '{' +// CHECK:STDOUT: │ │ │ │ │ │ ╭─BreakStatementStart 'break' +// CHECK:STDOUT: │ │ │ │ │ ├─BreakStatement ';' +// CHECK:STDOUT: │ │ │ │ ├─CodeBlock '}' +// CHECK:STDOUT: │ │ │ ├─IfStatement 'if' +// CHECK:STDOUT: │ │ │ │ ╭─IfConditionStart '(' +// CHECK:STDOUT: │ │ │ │ ├─IdentifierNameExpr 'c' +// CHECK:STDOUT: │ │ │ │ ╭─IfCondition ')' +// CHECK:STDOUT: │ │ │ │ │ ╭─CodeBlockStart '{' +// CHECK:STDOUT: │ │ │ │ │ │ ╭─ContinueStatementStart 'continue' +// CHECK:STDOUT: │ │ │ │ │ ├─ContinueStatement ';' +// CHECK:STDOUT: │ │ │ │ ├─CodeBlock '}' +// CHECK:STDOUT: │ │ │ ├─IfStatement 'if' +// CHECK:STDOUT: │ │ ├─CodeBlock '}' +// CHECK:STDOUT: │ ├─WhileStatement 'while' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/while/fail_missing_cond.carbon b/toolchain/parse/testdata/while/fail_missing_cond.carbon index 497a2806c3b6..5a197d0760cf 100644 --- a/toolchain/parse/testdata/while/fail_missing_cond.carbon +++ b/toolchain/parse/testdata/while/fail_missing_cond.carbon @@ -18,19 +18,18 @@ fn F() { } // CHECK:STDOUT: - filename: fail_missing_cond.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'WhileConditionStart', text: 'while', has_error: yes}, -// CHECK:STDOUT: {kind: 'InvalidParse', text: '{', has_error: yes}, -// CHECK:STDOUT: {kind: 'WhileCondition', text: 'while', has_error: yes, subtree_size: 3}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: '{'}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: '}', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'WhileStatement', text: 'while', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 12}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─WhileConditionStart 'while' has_error +// CHECK:STDOUT: │ │ ├─InvalidParse '{' has_error +// CHECK:STDOUT: │ │ ╭─WhileCondition 'while' has_error +// CHECK:STDOUT: │ │ │ ╭─CodeBlockStart '{' +// CHECK:STDOUT: │ │ ├─CodeBlock '}' +// CHECK:STDOUT: │ ├─WhileStatement 'while' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/while/fail_no_semi.carbon b/toolchain/parse/testdata/while/fail_no_semi.carbon index 8ed9979f8a1a..c9dffa1fc7ee 100644 --- a/toolchain/parse/testdata/while/fail_no_semi.carbon +++ b/toolchain/parse/testdata/while/fail_no_semi.carbon @@ -28,35 +28,34 @@ fn F() { } // CHECK:STDOUT: - filename: fail_no_semi.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'WhileConditionStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'WhileCondition', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: '{'}, -// CHECK:STDOUT: {kind: 'IfConditionStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'b'}, -// CHECK:STDOUT: {kind: 'IfCondition', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: '{'}, -// CHECK:STDOUT: {kind: 'BreakStatementStart', text: 'break'}, -// CHECK:STDOUT: {kind: 'BreakStatement', text: 'break', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: '}', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IfStatement', text: 'if', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'IfConditionStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'c'}, -// CHECK:STDOUT: {kind: 'IfCondition', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: '{'}, -// CHECK:STDOUT: {kind: 'ContinueStatementStart', text: 'continue'}, -// CHECK:STDOUT: {kind: 'ContinueStatement', text: 'continue', has_error: yes, subtree_size: 2}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: '}', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'IfStatement', text: 'if', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: '}', subtree_size: 18}, -// CHECK:STDOUT: {kind: 'WhileStatement', text: 'while', subtree_size: 22}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 28}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─WhileConditionStart '(' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ╭─WhileCondition ')' +// CHECK:STDOUT: │ │ │ ╭─CodeBlockStart '{' +// CHECK:STDOUT: │ │ │ │ ╭─IfConditionStart '(' +// CHECK:STDOUT: │ │ │ │ ├─IdentifierNameExpr 'b' +// CHECK:STDOUT: │ │ │ │ ╭─IfCondition ')' +// CHECK:STDOUT: │ │ │ │ │ ╭─CodeBlockStart '{' +// CHECK:STDOUT: │ │ │ │ │ │ ╭─BreakStatementStart 'break' +// CHECK:STDOUT: │ │ │ │ │ ├─BreakStatement 'break' has_error +// CHECK:STDOUT: │ │ │ │ ├─CodeBlock '}' +// CHECK:STDOUT: │ │ │ ├─IfStatement 'if' +// CHECK:STDOUT: │ │ │ │ ╭─IfConditionStart '(' +// CHECK:STDOUT: │ │ │ │ ├─IdentifierNameExpr 'c' +// CHECK:STDOUT: │ │ │ │ ╭─IfCondition ')' +// CHECK:STDOUT: │ │ │ │ │ ╭─CodeBlockStart '{' +// CHECK:STDOUT: │ │ │ │ │ │ ╭─ContinueStatementStart 'continue' +// CHECK:STDOUT: │ │ │ │ │ ├─ContinueStatement 'continue' has_error +// CHECK:STDOUT: │ │ │ │ ├─CodeBlock '}' +// CHECK:STDOUT: │ │ │ ├─IfStatement 'if' +// CHECK:STDOUT: │ │ ├─CodeBlock '}' +// CHECK:STDOUT: │ ├─WhileStatement 'while' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/testdata/while/fail_unbraced.carbon b/toolchain/parse/testdata/while/fail_unbraced.carbon index 4a4f8e7ed9fb..211e55ea36d1 100644 --- a/toolchain/parse/testdata/while/fail_unbraced.carbon +++ b/toolchain/parse/testdata/while/fail_unbraced.carbon @@ -19,21 +19,20 @@ fn F() { } // CHECK:STDOUT: - filename: fail_unbraced.carbon -// CHECK:STDOUT: parse_tree: [ -// CHECK:STDOUT: {kind: 'FileStart', text: ''}, -// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'}, -// CHECK:STDOUT: {kind: 'IdentifierNameMaybeBeforeSignature', text: 'F'}, -// CHECK:STDOUT: {kind: 'ExplicitParamListStart', text: '('}, -// CHECK:STDOUT: {kind: 'ExplicitParamList', text: ')', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, -// CHECK:STDOUT: {kind: 'WhileConditionStart', text: '('}, -// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'a'}, -// CHECK:STDOUT: {kind: 'WhileCondition', text: ')', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'CodeBlockStart', text: 'break', has_error: yes}, -// CHECK:STDOUT: {kind: 'BreakStatementStart', text: 'break'}, -// CHECK:STDOUT: {kind: 'BreakStatement', text: ';', subtree_size: 2}, -// CHECK:STDOUT: {kind: 'CodeBlock', text: 'break', has_error: yes, subtree_size: 4}, -// CHECK:STDOUT: {kind: 'WhileStatement', text: 'while', subtree_size: 8}, -// CHECK:STDOUT: {kind: 'FunctionDefinition', text: '}', subtree_size: 14}, -// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, -// CHECK:STDOUT: ] +// CHECK:STDOUT: ╭─FileStart '' +// CHECK:STDOUT: │ ╭─FunctionIntroducer 'fn' +// CHECK:STDOUT: │ ├─IdentifierNameMaybeBeforeSignature 'F' +// CHECK:STDOUT: │ │ ╭─ExplicitParamListStart '(' +// CHECK:STDOUT: │ ├─ExplicitParamList ')' +// CHECK:STDOUT: │ ╭─FunctionDefinitionStart '{' +// CHECK:STDOUT: │ │ ╭─WhileConditionStart '(' +// CHECK:STDOUT: │ │ ├─IdentifierNameExpr 'a' +// CHECK:STDOUT: │ │ ╭─WhileCondition ')' +// CHECK:STDOUT: │ │ │ ╭─CodeBlockStart 'break' has_error +// CHECK:STDOUT: │ │ │ │ ╭─BreakStatementStart 'break' +// CHECK:STDOUT: │ │ │ ├─BreakStatement ';' +// CHECK:STDOUT: │ │ ├─CodeBlock 'break' has_error +// CHECK:STDOUT: │ ├─WhileStatement 'while' +// CHECK:STDOUT: ├─FunctionDefinition '}' +// CHECK:STDOUT: ├─FileEnd '' +// CHECK:STDOUT: (root) diff --git a/toolchain/parse/tree.cpp b/toolchain/parse/tree.cpp index 06495c87a8e2..f148f0cf5030 100644 --- a/toolchain/parse/tree.cpp +++ b/toolchain/parse/tree.cpp @@ -28,7 +28,7 @@ auto Tree::node_token(NodeId n) const -> Lex::TokenIndex { } auto Tree::Print(llvm::raw_ostream& output) const -> void { - TreeAndSubtrees(*tokens_, *this).Print(output); + TreeAndSubtrees(*tokens_, *this).PrintYamlPostorder(output); } auto Tree::Verify() const -> ErrorOr { diff --git a/toolchain/parse/tree_and_subtrees.cpp b/toolchain/parse/tree_and_subtrees.cpp index cbb2e8b2ab34..d7ff2390a73d 100644 --- a/toolchain/parse/tree_and_subtrees.cpp +++ b/toolchain/parse/tree_and_subtrees.cpp @@ -140,8 +140,8 @@ auto TreeAndSubtrees::roots() const -> llvm::iterator_range { SiblingIterator(*this, NodeId(-1))); } -auto TreeAndSubtrees::PrintNode(llvm::raw_ostream& output, NodeId n, int depth, - bool preorder) const -> bool { +auto TreeAndSubtrees::YamlPrintNode(llvm::raw_ostream& output, NodeId n, + int depth, bool preorder) const -> bool { output.indent(2 * (depth + 2)); output << "{"; // If children are being added, include node_index in order to disambiguate @@ -167,9 +167,56 @@ auto TreeAndSubtrees::PrintNode(llvm::raw_ostream& output, NodeId n, int depth, return false; } -auto TreeAndSubtrees::Print(llvm::raw_ostream& output) const -> void { - output << "- filename: " << tokens_->source().filename() << "\n" - << " parse_tree: [\n"; +auto TreeAndSubtrees::PrettyPrintNode(llvm::raw_ostream& output, NodeId n, + int depth, + llvm::BitVector& pending_parents) const + -> void { + output.indent(2); + // In this mode we treat all nodes as nested under the parse tree root. + ++depth; + CARBON_CHECK(pending_parents.find_last() <= depth, + "Node interleaved between a non-ancestor and its child"); + pending_parents.resize(depth); + + for (int i = 0; i < depth; ++i) { + if (i == depth - 1) { + if (pending_parents.test(i)) { + output << "├─"; + } else { + output << "╭─"; + pending_parents.set(i); + } + } else { + if (pending_parents.test(i)) { + output << "│ "; + } else { + output << " "; + } + } + } + output << tree_->node_kind(n) << " '" + << tokens_->GetTokenText(tree_->node_token(n)) << "'"; + + if (tree_->node_has_error(n)) { + output << " has_error"; + } +} + +auto TreeAndSubtrees::PrintYamlPostorder(llvm::raw_ostream& output) const + -> void { + PrintPostorder(output, /*yaml=*/true); +} + +auto TreeAndSubtrees::PrettyPrint(llvm::raw_ostream& output) const -> void { + PrintPostorder(output, /*yaml=*/false); +} + +auto TreeAndSubtrees::PrintPostorder(llvm::raw_ostream& output, bool yaml) const + -> void { + output << "- filename: " << tokens_->source().filename() << "\n"; + if (yaml) { + output << " parse_tree: [\n"; + } // Walk the tree in reverse, just to calculate depths for each node. llvm::SmallVector depths(tree_->size(), 0); @@ -180,14 +227,25 @@ auto TreeAndSubtrees::Print(llvm::raw_ostream& output) const -> void { } } + llvm::BitVector pending_parents; for (auto [n, depth] : llvm::zip_equal(tree_->postorder(), depths)) { - PrintNode(output, n, depth, /*preorder=*/false); - output << ",\n"; + if (yaml) { + YamlPrintNode(output, n, depth, /*preorder=*/false); + output << ",\n"; + } else { + PrettyPrintNode(output, n, depth, pending_parents); + output << "\n"; + } + } + if (yaml) { + output << " ]\n"; + } else { + output << " (root)\n"; } - output << " ]\n"; } -auto TreeAndSubtrees::PrintPreorder(llvm::raw_ostream& output) const -> void { +auto TreeAndSubtrees::PrintYamlPreorder(llvm::raw_ostream& output) const + -> void { output << "- filename: " << tokens_->source().filename() << "\n" << " parse_tree: [\n"; @@ -208,7 +266,7 @@ auto TreeAndSubtrees::PrintPreorder(llvm::raw_ostream& output) const -> void { int depth; std::tie(n, depth) = node_stack.pop_back_val(); - if (PrintNode(output, n, depth, /*preorder=*/true)) { + if (YamlPrintNode(output, n, depth, /*preorder=*/true)) { // Has children, so we descend. We append the children in order here as // well because they will get reversed when popped off the stack. for (NodeId sibling_n : children(n)) { diff --git a/toolchain/parse/tree_and_subtrees.h b/toolchain/parse/tree_and_subtrees.h index 9322e2032251..3754ef0a7f61 100644 --- a/toolchain/parse/tree_and_subtrees.h +++ b/toolchain/parse/tree_and_subtrees.h @@ -98,7 +98,11 @@ class TreeAndSubtrees { // This can be parsed as YAML using tools like `python-yq` combined with `jq` // on the command line. The format is also reasonably amenable to other // line-oriented shell tools from `grep` to `awk`. - auto Print(llvm::raw_ostream& output) const -> void; + auto PrintYamlPostorder(llvm::raw_ostream& output) const -> void; + + // Prints the parse tree in postorder, in a human-readable format that uses + // box-drawing characters to visualize the tree structure. + auto PrettyPrint(llvm::raw_ostream& output) const -> void; // Prints the parse tree in preorder. The format is YAML, and similar to // Print. However, nodes are marked as children with postorder (storage) @@ -108,7 +112,7 @@ class TreeAndSubtrees { // {node_index: 0, kind: 'bar', text: '...', has_error: yes}, // {node_index: 1, kind: 'baz', text: '...'}]} // ``` - auto PrintPreorder(llvm::raw_ostream& output) const -> void; + auto PrintYamlPreorder(llvm::raw_ostream& output) const -> void; // Collects memory usage of members. auto CollectMemUsage(MemUsage& mem_usage, llvm::StringRef label) const @@ -168,10 +172,19 @@ class TreeAndSubtrees { auto VerifyExtract(NodeId node_id, NodeKind kind, ErrorBuilder* trace) const -> bool; - // Prints a single node for Print(). Returns true when preorder and there are - // children. - auto PrintNode(llvm::raw_ostream& output, NodeId n, int depth, - bool preorder) const -> bool; + // Prints the tree in postorder, in either YAML or human-readable format. + auto PrintPostorder(llvm::raw_ostream& output, bool yaml) const -> void; + + // Prints a single node in YAML format. Returns true when preorder and there + // are children. + auto YamlPrintNode(llvm::raw_ostream& output, NodeId n, int depth, + bool preorder) const -> bool; + + // Prints a single node in human-readable format. `pending_parents[i]` + // should be true if and only if there is a node at depth i that we haven't + // yet printed, but we have printed one of its children. + auto PrettyPrintNode(llvm::raw_ostream& output, NodeId n, int depth, + llvm::BitVector& pending_parents) const -> void; // The associated tokens. const Lex::TokenizedBuffer* tokens_; diff --git a/toolchain/parse/tree_test.cpp b/toolchain/parse/tree_test.cpp index b354ee69677f..dd69bf84378a 100644 --- a/toolchain/parse/tree_test.cpp +++ b/toolchain/parse/tree_test.cpp @@ -127,7 +127,7 @@ TEST_F(TreeTest, PrintPreorderAsYaml) { compile_helper_.GetTokenizedBufferWithTreeAndSubtrees("fn F();"); EXPECT_FALSE(tree_and_subtrees.tree().has_errors()); RawStringOstream print_stream; - tree_and_subtrees.PrintPreorder(print_stream); + tree_and_subtrees.PrintYamlPreorder(print_stream); auto param_list = Yaml::Sequence(ElementsAre(Yaml::Mapping( ElementsAre(Pair("node_index", "3"),